@rangertechnologies/ngnxt 2.0.37 → 2.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/esm2022/lib/components/custom-date-picker/custom-date-picker.component.mjs +33 -33
- package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +94 -82
- package/esm2022/lib/components/custom-input/custom-input.component.mjs +76 -76
- package/esm2022/lib/components/custom-table/custom-table.component.mjs +53 -53
- package/esm2022/lib/components/custom-text-area/custom-text-area.component.mjs +34 -34
- package/esm2022/lib/components/dropdown-with-flag/dropdown-with-flag.component.mjs +34 -34
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +110 -159
- package/esm2022/lib/components/file-view/file-view.component.mjs +42 -0
- package/esm2022/lib/components/pick-location/pick-location.component.mjs +136 -136
- package/esm2022/lib/components/search-box/search-box.component.mjs +106 -84
- package/esm2022/lib/interfaces/actionMeta.mjs +2 -2
- package/esm2022/lib/interfaces/apimeta.mjs +2 -2
- package/esm2022/lib/interfaces/dependencyMeta.mjs +2 -2
- package/esm2022/lib/model/bookletWrapper.mjs +9 -9
- package/esm2022/lib/model/changeWrapper.mjs +8 -8
- package/esm2022/lib/model/errorWrapper.mjs +6 -6
- package/esm2022/lib/model/tableWrapper.mjs +16 -16
- package/esm2022/lib/nxt-app.component.mjs +22 -22
- package/esm2022/lib/nxt-app.module.mjs +276 -268
- package/esm2022/lib/nxt-app.service.mjs +14 -14
- package/esm2022/lib/pages/booklet/booklet.component.mjs +171 -159
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +102 -85
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +2066 -2066
- package/esm2022/lib/pages/summary-page/summary-page.component.mjs +70 -0
- package/esm2022/lib/sample.mjs +432 -432
- package/esm2022/lib/services/change.service.mjs +38 -33
- package/esm2022/lib/services/data.service.mjs +40 -40
- package/esm2022/lib/services/salesforce.service.mjs +46 -46
- package/esm2022/lib/services/shared.service.mjs +86 -0
- package/esm2022/lib/services/storage.service.mjs +41 -41
- package/esm2022/lib/wrapper.mjs +161 -161
- package/esm2022/public-api.mjs +11 -10
- package/esm2022/rangertechnologies-ngnxt.mjs +4 -4
- package/fesm2022/rangertechnologies-ngnxt.mjs +4105 -3899
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/components/custom-date-picker/custom-date-picker.component.d.ts +14 -14
- package/lib/components/custom-dropdown/custom-dropdown.component.d.ts +29 -26
- package/lib/components/custom-input/custom-input.component.d.ts +26 -26
- package/lib/components/custom-table/custom-table.component.d.ts +20 -20
- package/lib/components/custom-text-area/custom-text-area.component.d.ts +14 -14
- package/lib/components/dropdown-with-flag/dropdown-with-flag.component.d.ts +14 -14
- package/lib/components/file-upload/file-upload.component.d.ts +24 -23
- package/lib/components/file-view/file-view.component.d.ts +14 -0
- package/lib/components/pick-location/pick-location.component.d.ts +35 -35
- package/lib/components/search-box/search-box.component.d.ts +40 -34
- package/lib/interfaces/actionMeta.d.ts +5 -5
- package/lib/interfaces/apimeta.d.ts +5 -5
- package/lib/interfaces/dependencyMeta.d.ts +5 -5
- package/lib/model/bookletWrapper.d.ts +5 -5
- package/lib/model/changeWrapper.d.ts +7 -7
- package/lib/model/errorWrapper.d.ts +5 -5
- package/lib/model/tableWrapper.d.ts +15 -15
- package/lib/nxt-app.component.d.ts +8 -8
- package/lib/nxt-app.module.d.ts +30 -28
- package/lib/nxt-app.service.d.ts +6 -6
- package/lib/pages/booklet/booklet.component.d.ts +45 -43
- package/lib/pages/questionbook/questionbook.component.d.ts +27 -26
- package/lib/pages/questionnaire/questionnaire.component.d.ts +206 -206
- package/lib/pages/summary-page/summary-page.component.d.ts +18 -0
- package/lib/sample.d.ts +10 -10
- package/lib/services/change.service.d.ts +16 -13
- package/lib/services/data.service.d.ts +9 -9
- package/lib/services/salesforce.service.d.ts +11 -11
- package/lib/services/shared.service.d.ts +11 -0
- package/lib/services/storage.service.d.ts +12 -12
- package/lib/wrapper.d.ts +161 -161
- package/package.json +1 -1
- package/public-api.d.ts +7 -6
- package/rangertechnologies-ngnxt-2.0.39.tgz +0 -0
- package/rangertechnologies-ngnxt-2.0.37.tgz +0 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
import * as i2 from "../../components/file-view/file-view.component";
|
|
5
|
+
export class SummaryPageComponent {
|
|
6
|
+
answerJson;
|
|
7
|
+
api;
|
|
8
|
+
booklet = [];
|
|
9
|
+
bookQuestionsMap = new Map();
|
|
10
|
+
actions = [];
|
|
11
|
+
sqOptions = new Map();
|
|
12
|
+
questions = [];
|
|
13
|
+
filteredQuestion;
|
|
14
|
+
constructor() { }
|
|
15
|
+
ngOnInit() {
|
|
16
|
+
if (this.answerJson) {
|
|
17
|
+
console.log('answer json', this.answerJson);
|
|
18
|
+
this.booklet = this.answerJson.records;
|
|
19
|
+
// Process the Sub Question Options - This should be merged with bookQuestionsMap in future
|
|
20
|
+
for (var sq in this.answerJson.sqOptions) {
|
|
21
|
+
this.sqOptions.set(sq, this.answerJson.sqOptions[sq]);
|
|
22
|
+
}
|
|
23
|
+
// Process the Questions
|
|
24
|
+
for (var value in this.answerJson.bookQuestionsMap) {
|
|
25
|
+
this.bookQuestionsMap.set(value, this.answerJson.bookQuestionsMap[value]);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
this.processSummary(this.booklet);
|
|
29
|
+
}
|
|
30
|
+
processSummary(data) {
|
|
31
|
+
let questions = [];
|
|
32
|
+
for (var i = 0; i < data.length; i++) {
|
|
33
|
+
let qbId = data[i].Id;
|
|
34
|
+
for (var sq in this.bookQuestionsMap?.get(qbId).Questions__r.records) {
|
|
35
|
+
let q = this.bookQuestionsMap?.get(qbId).Questions__r.records[sq];
|
|
36
|
+
if (q.Type__c == 'Dropdown') {
|
|
37
|
+
questions.push(this.sqOptions.get(q.Id));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
if (!q.input?.includes('|')) { // to avoid the unwanted fields for summary page
|
|
41
|
+
questions.push(q);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
this.questions = questions;
|
|
47
|
+
console.log('question', this.questions);
|
|
48
|
+
// map the questions using the the bookId
|
|
49
|
+
var qbIds = new Set(this.questions.map((item) => item.Question_Book__c));
|
|
50
|
+
this.filteredQuestion = [];
|
|
51
|
+
qbIds.forEach((id) => {
|
|
52
|
+
this.filteredQuestion.push({
|
|
53
|
+
Id: id,
|
|
54
|
+
questions: this.questions.filter((i) => i.Question_Book__c === id)
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
console.log('filteredQuestion', this.filteredQuestion);
|
|
58
|
+
}
|
|
59
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SummaryPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
60
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SummaryPageComponent, selector: "lib-summary-page", inputs: { answerJson: "answerJson", api: "api" }, ngImport: i0, template: "<div class=\"col-lg-12\">\n <div class=\"panel-group panel-group-joined\" id=\"details\">\n <div class=\"panel panel-default\">\n <div class=\"panel-heading\">\n <h4 class=\"panel-title\">\n <a data-toggle=\"collapse\" data-parent=\"#details\" href=\"#collapse\" class=\"collapsed\">\n PTW Details \n </a>\n </h4>\n </div>\n <div [id]=\"'collapse'\" class=\"collapse\">\n <div class=\"panel-body\">\n <div class=\"row\" *ngFor=\"let item of filteredQuestion;let i = index\">\n <div class=\"col-lg-6\" *ngFor=\"let ques of item.questions\" >\n <label *ngIf=\"ques.Type__c != 'File'\" >{{ques.Question__c}}</label>\n <p *ngIf = \"ques.Type__c != 'Dropdown' && ques.Type__c != 'Table' && ques.Type__c != 'File'\">{{ ques.input }}</p>\n <p *ngIf=\"ques.Type__c == 'Dropdown'\">{{ ques.selectedValue }}</p>\n <p *ngIf=\"!ques.input\">N/A</p>\n <div *ngIf= \"ques.Type__c == 'Table'\">\n <div *ngFor=\"let item of ques.input\" class=\"align-center\">\n <img *ngIf=\"item.value == 'yes' \" [src]=\"item.imageSrc\" [alt]=\"item.altText\">\n <p *ngIf=\"item.value == 'yes' \">{{ item.ppe }}</p>\n </div>\n </div>\n <div *ngIf = \"ques.Type__c == 'File'\">\n <app-file-view [api]=\"api\" [documentData]=\"ques.input\"></app-file-view>\n </div>\n </div>\n <div *ngIf=\"i != filteredQuestion.length -1\" class=\"col-lg-12\">\n <hr>\n </div>\n </div>\n </div>\n </div> \n </div>\n</div>\n\n", styles: [".panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.align-center{display:flex}.align-center p{margin-left:8px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FileViewComponent, selector: "app-file-view", inputs: ["documentData", "api"] }] });
|
|
61
|
+
}
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SummaryPageComponent, decorators: [{
|
|
63
|
+
type: Component,
|
|
64
|
+
args: [{ selector: 'lib-summary-page', template: "<div class=\"col-lg-12\">\n <div class=\"panel-group panel-group-joined\" id=\"details\">\n <div class=\"panel panel-default\">\n <div class=\"panel-heading\">\n <h4 class=\"panel-title\">\n <a data-toggle=\"collapse\" data-parent=\"#details\" href=\"#collapse\" class=\"collapsed\">\n PTW Details \n </a>\n </h4>\n </div>\n <div [id]=\"'collapse'\" class=\"collapse\">\n <div class=\"panel-body\">\n <div class=\"row\" *ngFor=\"let item of filteredQuestion;let i = index\">\n <div class=\"col-lg-6\" *ngFor=\"let ques of item.questions\" >\n <label *ngIf=\"ques.Type__c != 'File'\" >{{ques.Question__c}}</label>\n <p *ngIf = \"ques.Type__c != 'Dropdown' && ques.Type__c != 'Table' && ques.Type__c != 'File'\">{{ ques.input }}</p>\n <p *ngIf=\"ques.Type__c == 'Dropdown'\">{{ ques.selectedValue }}</p>\n <p *ngIf=\"!ques.input\">N/A</p>\n <div *ngIf= \"ques.Type__c == 'Table'\">\n <div *ngFor=\"let item of ques.input\" class=\"align-center\">\n <img *ngIf=\"item.value == 'yes' \" [src]=\"item.imageSrc\" [alt]=\"item.altText\">\n <p *ngIf=\"item.value == 'yes' \">{{ item.ppe }}</p>\n </div>\n </div>\n <div *ngIf = \"ques.Type__c == 'File'\">\n <app-file-view [api]=\"api\" [documentData]=\"ques.input\"></app-file-view>\n </div>\n </div>\n <div *ngIf=\"i != filteredQuestion.length -1\" class=\"col-lg-12\">\n <hr>\n </div>\n </div>\n </div>\n </div> \n </div>\n</div>\n\n", styles: [".panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.align-center{display:flex}.align-center p{margin-left:8px}\n"] }]
|
|
65
|
+
}], ctorParameters: function () { return []; }, propDecorators: { answerJson: [{
|
|
66
|
+
type: Input
|
|
67
|
+
}], api: [{
|
|
68
|
+
type: Input
|
|
69
|
+
}] } });
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtbWFyeS1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9zdW1tYXJ5LXBhZ2Uvc3VtbWFyeS1wYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9zdW1tYXJ5LXBhZ2Uvc3VtbWFyeS1wYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7O0FBU3pELE1BQU0sT0FBTyxvQkFBb0I7SUFDdEIsVUFBVSxDQUFLO0lBQ2YsR0FBRyxDQUFRO0lBRWIsT0FBTyxHQUFVLEVBQUUsQ0FBQztJQUNwQixnQkFBZ0IsR0FBUSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2xDLE9BQU8sR0FBaUIsRUFBRSxDQUFDO0lBQzFCLFNBQVMsR0FBUSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzVCLFNBQVMsR0FBUyxFQUFFLENBQUM7SUFDNUIsZ0JBQWdCLENBQVE7SUFFeEIsZ0JBQWdCLENBQUM7SUFFakIsUUFBUTtRQUNOLElBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUV2QywyRkFBMkY7WUFDM0YsS0FBSyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdkQ7WUFDRCx3QkFBd0I7WUFDeEIsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFO2dCQUNsRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDM0U7U0FDRjtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBUTtRQUNyQixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7WUFDbkMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0QixLQUFJLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRTtnQkFDbkUsSUFBSSxDQUFDLEdBQWEsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RSxJQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksVUFBVSxFQUFFO29CQUMxQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUMxQztxQkFBTTtvQkFDTCxJQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRyxnREFBZ0Q7d0JBQzVFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ25CO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QywwQ0FBMEM7UUFDMUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUE7UUFDNUUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztnQkFDekIsRUFBRSxFQUFFLEVBQUU7Z0JBQ04sU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEtBQUssRUFBRSxDQUFDO2FBQ3ZFLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN4RCxDQUFDO3dHQXpEVSxvQkFBb0I7NEZBQXBCLG9CQUFvQiwwR0NUakMsaXdEQXFDQTs7NEZENUJhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0I7MEVBS25CLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25NZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hY3Rpb25NZXRhJztcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSAnLi4vLi4vd3JhcHBlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zdW1tYXJ5LXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3VtbWFyeS1wYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3VtbWFyeS1wYWdlLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTdW1tYXJ5UGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGFuc3dlckpzb246YW55O1xuICBASW5wdXQoKSBhcGk6c3RyaW5nO1xuXG4gIHB1YmxpYyBib29rbGV0OiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgYm9va1F1ZXN0aW9uc01hcDogYW55ID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uTWV0YVtdID0gW107XG4gIHByaXZhdGUgc3FPcHRpb25zOiBhbnkgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBxdWVzdGlvbnM6YW55W10gPSBbXTtcbiAgZmlsdGVyZWRRdWVzdGlvbjogYW55W107XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZih0aGlzLmFuc3dlckpzb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKCdhbnN3ZXIganNvbicsdGhpcy5hbnN3ZXJKc29uKTtcbiAgICAgIHRoaXMuYm9va2xldCA9IHRoaXMuYW5zd2VySnNvbi5yZWNvcmRzO1xuXG4gICAgICAvLyBQcm9jZXNzIHRoZSBTdWIgUXVlc3Rpb24gT3B0aW9ucyAtIFRoaXMgc2hvdWxkIGJlIG1lcmdlZCB3aXRoIGJvb2tRdWVzdGlvbnNNYXAgaW4gZnV0dXJlXG4gICAgICBmb3IgKHZhciBzcSBpbiB0aGlzLmFuc3dlckpzb24uc3FPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuc3FPcHRpb25zLnNldChzcSwgdGhpcy5hbnN3ZXJKc29uLnNxT3B0aW9uc1tzcV0pO1xuICAgICAgfVxuICAgICAgLy8gUHJvY2VzcyB0aGUgUXVlc3Rpb25zXG4gICAgICBmb3IgKHZhciB2YWx1ZSBpbiB0aGlzLmFuc3dlckpzb24uYm9va1F1ZXN0aW9uc01hcCkge1xuICAgICAgICB0aGlzLmJvb2tRdWVzdGlvbnNNYXAuc2V0KHZhbHVlLCB0aGlzLmFuc3dlckpzb24uYm9va1F1ZXN0aW9uc01hcFt2YWx1ZV0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NTdW1tYXJ5KHRoaXMuYm9va2xldCk7XG4gIH1cblxuICBwcm9jZXNzU3VtbWFyeShkYXRhOmFueSl7XG4gICAgbGV0IHF1ZXN0aW9ucyA9IFtdO1xuICAgIGZvciggdmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGggO2krKyl7XG4gICAgICBsZXQgcWJJZCA9IGRhdGFbaV0uSWQ7XG4gICAgICBmb3IodmFyIHNxIGluIHRoaXMuYm9va1F1ZXN0aW9uc01hcD8uZ2V0KHFiSWQpLlF1ZXN0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAgIGxldCBxOiBRdWVzdGlvbiA9IHRoaXMuYm9va1F1ZXN0aW9uc01hcD8uZ2V0KHFiSWQpLlF1ZXN0aW9uc19fci5yZWNvcmRzW3NxXTtcbiAgICAgICAgaWYocS5UeXBlX19jID09ICdEcm9wZG93bicpIHtcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaCh0aGlzLnNxT3B0aW9ucy5nZXQocS5JZCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmKCFxLmlucHV0Py5pbmNsdWRlcygnfCcpKXsgIC8vIHRvIGF2b2lkIHRoZSB1bndhbnRlZCBmaWVsZHMgZm9yIHN1bW1hcnkgcGFnZVxuICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2gocSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucXVlc3Rpb25zID0gcXVlc3Rpb25zO1xuICAgIGNvbnNvbGUubG9nKCdxdWVzdGlvbicsIHRoaXMucXVlc3Rpb25zKTtcbiAgICAvLyBtYXAgdGhlIHF1ZXN0aW9ucyB1c2luZyAgdGhlIHRoZSBib29rSWRcbiAgICB2YXIgcWJJZHMgPSBuZXcgU2V0KHRoaXMucXVlc3Rpb25zLm1hcCgoaXRlbTphbnkpID0+IGl0ZW0uUXVlc3Rpb25fQm9va19fYykpXG4gICAgdGhpcy5maWx0ZXJlZFF1ZXN0aW9uID0gW107XG4gICAgcWJJZHMuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZFF1ZXN0aW9uLnB1c2goe1xuICAgICAgICAgIElkOiBpZCwgXG4gICAgICAgICAgcXVlc3Rpb25zOiB0aGlzLnF1ZXN0aW9ucy5maWx0ZXIoKGk6YW55KSA9PiBpLlF1ZXN0aW9uX0Jvb2tfX2MgPT09IGlkKVxuICAgICAgICB9KTtcbiAgICB9KVxuICAgIGNvbnNvbGUubG9nKCdmaWx0ZXJlZFF1ZXN0aW9uJyx0aGlzLmZpbHRlcmVkUXVlc3Rpb24pO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cbiAgPGRpdiBjbGFzcz1cInBhbmVsLWdyb3VwIHBhbmVsLWdyb3VwLWpvaW5lZFwiIGlkPVwiZGV0YWlsc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbCBwYW5lbC1kZWZhdWx0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCI+XG4gICAgICAgICAgPGg0IGNsYXNzPVwicGFuZWwtdGl0bGVcIj5cbiAgICAgICAgICAgIDxhIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLXBhcmVudD1cIiNkZXRhaWxzXCIgaHJlZj1cIiNjb2xsYXBzZVwiIGNsYXNzPVwiY29sbGFwc2VkXCI+XG4gICAgICAgICAgICBQVFcgRGV0YWlscyBcbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L2g0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgW2lkXT1cIidjb2xsYXBzZSdcIiBjbGFzcz1cImNvbGxhcHNlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1ib2R5XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRRdWVzdGlvbjtsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiICpuZ0Zvcj1cImxldCBxdWVzIG9mIGl0ZW0ucXVlc3Rpb25zXCIgPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwicXVlcy5UeXBlX19jICE9ICdGaWxlJ1wiID57e3F1ZXMuUXVlc3Rpb25fX2N9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8cCAqbmdJZiA9IFwicXVlcy5UeXBlX19jICE9ICdEcm9wZG93bicgJiYgcXVlcy5UeXBlX19jICE9ICdUYWJsZScgJiYgcXVlcy5UeXBlX19jICE9ICdGaWxlJ1wiPnt7IHF1ZXMuaW5wdXQgfX08L3A+XG4gICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PSAnRHJvcGRvd24nXCI+e3sgcXVlcy5zZWxlY3RlZFZhbHVlIH19PC9wPlxuICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCIhcXVlcy5pbnB1dFwiPk4vQTwvcD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9IFwicXVlcy5UeXBlX19jID09ICdUYWJsZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzLmlucHV0XCIgY2xhc3M9XCJhbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiaXRlbS52YWx1ZSA9PSAneWVzJyBcIiBbc3JjXT1cIml0ZW0uaW1hZ2VTcmNcIiBbYWx0XT1cIml0ZW0uYWx0VGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiaXRlbS52YWx1ZSA9PSAneWVzJyBcIj57eyBpdGVtLnBwZSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWYgPSBcInF1ZXMuVHlwZV9fYyA9PSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1maWxlLXZpZXcgW2FwaV09XCJhcGlcIiBbZG9jdW1lbnREYXRhXT1cInF1ZXMuaW5wdXRcIj48L2FwcC1maWxlLXZpZXc+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpICE9IGZpbHRlcmVkUXVlc3Rpb24ubGVuZ3RoIC0xXCIgY2xhc3M9XCJjb2wtbGctMTJcIj5cbiAgICAgICAgICAgICAgICA8aHI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gXG4gIDwvZGl2PlxuPC9kaXY+XG5cbiJdfQ==
|