@eqproject/eqp-dynamic-module 2.7.37 → 2.8.0
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/esm2020/lib/components/private/dbgetter/dbgetter.component.mjs +27 -12
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +26 -11
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +26 -11
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/private/dbgetter/dbgetter.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -22,9 +22,10 @@ export class DbgetterComponent {
|
|
|
22
22
|
this.haveRelations = false;
|
|
23
23
|
this.reload = true;
|
|
24
24
|
this.relations = new Array();
|
|
25
|
+
this.backupQuestionFields = null;
|
|
25
26
|
}
|
|
26
27
|
ngOnInit() {
|
|
27
|
-
console.log("INSIDE DBGETTER", this.form, this.record, this.field, this.QueryEditorComponent);
|
|
28
|
+
//console.log("INSIDE DBGETTER", this.form, this.record, this.field, this.QueryEditorComponent);
|
|
28
29
|
if (this.QueryEditorComponent != null) {
|
|
29
30
|
this.QueryEditorComponent.inputParams.config.mode = QueryEditorModeEnum.RESULT;
|
|
30
31
|
this.QueryEditorComponent.inputParams.config.field = this.field;
|
|
@@ -33,6 +34,13 @@ export class DbgetterComponent {
|
|
|
33
34
|
if (this.field.DataGetter.DataGetterValue.openedFields.find(x => x.QueryPropertyValue == '?') != null) {
|
|
34
35
|
// Il campo ha almeno un valore con "?"
|
|
35
36
|
this.haveQuestions = true;
|
|
37
|
+
//console.log("CHECKING BACKUPS OPENED FIELDS....", this.backupQuestionFields);
|
|
38
|
+
if (this.backupQuestionFields == null) {
|
|
39
|
+
this.backupQuestionFields = new Array();
|
|
40
|
+
this.field.DataGetter.DataGetterValue.openedFields.forEach((rqf) => {
|
|
41
|
+
this.backupQuestionFields.push(rqf.PropertyName);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
36
44
|
}
|
|
37
45
|
if (this.field.DataGetter.DataGetterValue.openedFields.find(x => x.QueryPropertyValue.indexOf('!') != -1) != null) {
|
|
38
46
|
// Il campo ha almeno un valore con "!nomerelazione"
|
|
@@ -40,17 +48,17 @@ export class DbgetterComponent {
|
|
|
40
48
|
this.field.DataGetter.DataGetterValue.openedFields.filter(x => x.QueryPropertyValue.indexOf('!') != -1).forEach((fieldWithRelation) => {
|
|
41
49
|
var fieldRelated = fieldWithRelation.QueryPropertyValue.replace("!", "");
|
|
42
50
|
if (this.record[fieldRelated] == null) {
|
|
43
|
-
console.log("this.record[fieldRelated] E' NULL", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
51
|
+
//console.log("this.record[fieldRelated] E' NULL", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
44
52
|
this.relations.push({ field: fieldRelated, loaded: false, actualvalue: this.record[fieldRelated] });
|
|
45
53
|
this.checkRelations();
|
|
46
54
|
this.interval = setInterval(() => {
|
|
47
|
-
console.log("this.record[fieldRelated] CHECK", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
55
|
+
//console.log("this.record[fieldRelated] CHECK", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
48
56
|
var currentRelation = this.relations.find(x => x.field == fieldRelated);
|
|
49
57
|
if (currentRelation != null) {
|
|
50
58
|
// Gestione dei cambi di valore dei campi relazionati
|
|
51
59
|
// Il campo relazionato INIZIALMENTE NON E' NULL, e cambia valore in qualcosa che NON E' NULL
|
|
52
60
|
if (currentRelation.actualvalue != null && this.record[fieldRelated] != null && this.record[fieldRelated] != currentRelation.actualvalue) {
|
|
53
|
-
console.log("this.record[fieldRelated] HA CAMBIATO VALORE!!", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
61
|
+
//console.log("this.record[fieldRelated] HA CAMBIATO VALORE!!", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
54
62
|
currentRelation.actualvalue = this.record[fieldRelated];
|
|
55
63
|
currentRelation.loaded = true;
|
|
56
64
|
fieldWithRelation.QueryPropertyValue = this.record[fieldRelated];
|
|
@@ -59,16 +67,20 @@ export class DbgetterComponent {
|
|
|
59
67
|
}
|
|
60
68
|
// Il campo relazionato INIZIALMENTE NON E' NULL, e cambia valore IN NULL
|
|
61
69
|
else if (currentRelation.actualvalue != null && this.record[fieldRelated] == null) {
|
|
62
|
-
console.log("this.record[fieldRelated] E' TORNATO AD ESSERE NULL!! :(", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
70
|
+
//console.log("this.record[fieldRelated] E' TORNATO AD ESSERE NULL!! :(", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
63
71
|
currentRelation.actualvalue = this.record[fieldRelated];
|
|
64
72
|
currentRelation.loaded = true;
|
|
65
73
|
fieldWithRelation.QueryPropertyValue = "!" + fieldRelated;
|
|
66
74
|
this.record[this.field.Name] = null;
|
|
75
|
+
// Recupero Backup
|
|
76
|
+
this.backupQuestionFields.forEach((bof) => {
|
|
77
|
+
this.field.DataGetter.DataGetterValue.openedFields.find(x => x.PropertyName == bof).QueryPropertyValue = "?";
|
|
78
|
+
});
|
|
67
79
|
this.reloadComponent();
|
|
68
80
|
}
|
|
69
81
|
// Il campo relazionato INIZIALMENTE E' NULL, e cambia valore
|
|
70
82
|
else if (currentRelation.actualvalue == null && this.record[fieldRelated] != null) {
|
|
71
|
-
console.log("this.record[fieldRelated] NON E' PIU' NULL!! :)", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
83
|
+
//console.log("this.record[fieldRelated] NON E' PIU' NULL!! :)", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
72
84
|
currentRelation.actualvalue = this.record[fieldRelated];
|
|
73
85
|
currentRelation.loaded = true;
|
|
74
86
|
fieldWithRelation.QueryPropertyValue = this.record[fieldRelated];
|
|
@@ -76,10 +88,10 @@ export class DbgetterComponent {
|
|
|
76
88
|
}
|
|
77
89
|
this.checkRelations();
|
|
78
90
|
}
|
|
79
|
-
},
|
|
91
|
+
}, 200);
|
|
80
92
|
}
|
|
81
93
|
else {
|
|
82
|
-
console.log("this.record[fieldRelated] NON E' NULL!! :)", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
94
|
+
//console.log("this.record[fieldRelated] NON E' NULL!! :)", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
83
95
|
fieldWithRelation.QueryPropertyValue = this.record[fieldRelated] != null ? this.record[fieldRelated] : '';
|
|
84
96
|
this.relations.push({ field: fieldRelated, loaded: true, actualvalue: this.record[fieldRelated] });
|
|
85
97
|
this.checkRelations();
|
|
@@ -102,17 +114,20 @@ export class DbgetterComponent {
|
|
|
102
114
|
}
|
|
103
115
|
}
|
|
104
116
|
reloadComponent() {
|
|
105
|
-
console.log("RELOAD COMPONENT CALLED", this.record, this.QueryEditorComponent.inputParams.config.record);
|
|
117
|
+
//console.log("RELOAD COMPONENT CALLED", this.record, this.QueryEditorComponent.inputParams.config.record);
|
|
106
118
|
this.reload = false;
|
|
107
119
|
this.QueryEditorComponent.inputParams.config.record = this.record;
|
|
108
120
|
this.QueryEditorComponent.inputParams.config.field = this.field;
|
|
109
|
-
setTimeout(() => {
|
|
121
|
+
setTimeout(() => {
|
|
122
|
+
this.reload = true;
|
|
123
|
+
//console.log("RELOADED QUERYEDITOR");
|
|
124
|
+
}, 3000);
|
|
110
125
|
}
|
|
111
126
|
checkRelations() {
|
|
112
127
|
this.relationsLoaded = this.relations.find(x => x.loaded) != null;
|
|
113
128
|
}
|
|
114
129
|
onExternalSQLResultOut(ev) {
|
|
115
|
-
console.log("Risultato dell'elaborazione del query editor: onExternalSQLResultOut", ev);
|
|
130
|
+
//console.log("Risultato dell'elaborazione del query editor: onExternalSQLResultOut", ev);
|
|
116
131
|
if (ev.Behaviours.indexOf("send-out") != -1) {
|
|
117
132
|
this.out.emit(ev);
|
|
118
133
|
}
|
|
@@ -208,4 +223,4 @@ export var QueryEditorModeEnum;
|
|
|
208
223
|
QueryEditorModeEnum[QueryEditorModeEnum["COMPOSER"] = 2] = "COMPOSER";
|
|
209
224
|
QueryEditorModeEnum[QueryEditorModeEnum["RESULT"] = 3] = "RESULT";
|
|
210
225
|
})(QueryEditorModeEnum || (QueryEditorModeEnum = {}));
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJnZXR0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2RiZ2V0dGVyL2RiZ2V0dGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9kYmdldHRlci9kYmdldHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBWXZFLE1BQU0sT0FBTyxpQkFBaUI7SUE2QjVCLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF4QmpDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBQ25DLHlCQUFvQixHQUErQixJQUFJLENBQUMsQ0FBQyxtQ0FBbUM7UUFDNUYsU0FBSSxHQUFRLElBQUksQ0FBQyxDQUFDLHdDQUF3QztRQUV6RCxRQUFHLEdBQTJCLElBQUksWUFBWSxFQUFZLENBQUM7UUFDM0Qsa0JBQWEsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVyRSxTQUFJLEdBQWtCLElBQUksQ0FBQztRQUMzQixXQUFNLEdBQVksS0FBSyxDQUFDO1FBR3hCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsV0FBTSxHQUFZLElBQUksQ0FBQztRQUV2QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixXQUFNLEdBQVksSUFBSSxDQUFDO1FBSXZCLGNBQVMsR0FBOEQsSUFBSSxLQUFLLEVBQXNELENBQUM7SUFHMUYsQ0FB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YUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDOzsrR0EvTlUsaUJBQWlCO21HQUFqQixpQkFBaUIsK1JDWjlCLGlqSEEwRTRDOzRGRDlEL0IsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLFVBQVU7aUdBTVgsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFSSxHQUFHO3NCQUFaLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTs7QUF1TlQsNkJBQTZCO0FBQzdCLE1BQU0sQ0FBTixJQUFZLG1CQUlYO0FBSkQsV0FBWSxtQkFBbUI7SUFDN0IsNkVBQWtCLENBQUE7SUFDbEIscUVBQWMsQ0FBQTtJQUNkLGlFQUFZLENBQUE7QUFDZCxDQUFDLEVBSlcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUk5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhLCBldmVudE91dCB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy1sb2FkZXIvZHluYW1pYy1sb2FkZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFzZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkYmdldHRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RiZ2V0dGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYmdldHRlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYmdldHRlckNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm07XHJcbiAgQElucHV0KCkgZmllbGQ6IEJhc2VGaWVsZDtcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZDtcclxuICBASW5wdXQoKSBpbkNvbmZpZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIERpcmVjdGx5T3BlblRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgUXVlcnlFZGl0b3JDb21wb25lbnQ6IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhID0gbnVsbDsgLy8gTCdpbnRlcm8gY29tcG9uZW50ZSBxdWVyeSBFZGl0b3JcclxuICBASW5wdXQoKSBkYXRhOiBhbnkgPSBudWxsOyAvLyBMbyBmYWNjaWFtbyBmdW56aW9uYXJlIHRpcG8gRVFQLVRBQkxFXHJcblxyXG4gIEBPdXRwdXQoKSBvdXQ6IEV2ZW50RW1pdHRlcjxldmVudE91dD4gPSBuZXcgRXZlbnRFbWl0dGVyPGV2ZW50T3V0PigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZFZhbHVlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBrZXlzOiBBcnJheTxzdHJpbmc+ID0gbnVsbDtcclxuICBsb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB2YWx1ZTogYW55O1xyXG5cclxuICBzaG93VGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93UUU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBoYXZlUXVlc3Rpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGF2ZVJlbGF0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHJlbG9hZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGludGVydmFsOiBhbnk7XHJcblxyXG4gIHJlbGF0aW9uczogQXJyYXk8e2ZpZWxkOiBzdHJpbmcsIGxvYWRlZDogYm9vbGVhbiwgYWN0dWFsdmFsdWU6IGFueX0+ID0gbmV3IEFycmF5PHtmaWVsZDogc3RyaW5nLCBsb2FkZWQ6IGJvb2xlYW4sIGFjdHVhbHZhbHVlOiBhbnl9PigpO1xyXG4gIHJlbGF0aW9uc0xvYWRlZDogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIklOU0lERSBEQkdFVFRFUlwiLCB0aGlzLmZvcm0sIHRoaXMucmVjb3JkLCB0aGlzLmZpZWxkLCB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50KTtcclxuXHJcbiAgICBpZiAodGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudCAhPSBudWxsKXtcclxuICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcubW9kZSA9IFF1ZXJ5RWRpdG9yTW9kZUVudW0uUkVTVUxUO1xyXG4gICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5maWVsZCA9IHRoaXMuZmllbGQ7XHJcbiAgICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLnJlY29yZCA9IHRoaXMucmVjb3JkO1xyXG4gICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5pbkNvbmZpZyA9IHRoaXMuaW5Db25maWc7XHJcblxyXG4gICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZS5vcGVuZWRGaWVsZHMuZmluZCh4ID0+IHguUXVlcnlQcm9wZXJ0eVZhbHVlID09ICc/JykgIT0gbnVsbCl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gSWwgY2FtcG8gaGEgYWxtZW5vIHVuIHZhbG9yZSBjb24gXCI/XCJcclxuICAgICAgICB0aGlzLmhhdmVRdWVzdGlvbnMgPSB0cnVlO1xyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUub3BlbmVkRmllbGRzLmZpbmQoeCA9PiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZS5pbmRleE9mKCchJykgIT0gLTEpICE9IG51bGwpe1xyXG5cclxuICAgICAgICAvLyBJbCBjYW1wbyBoYSBhbG1lbm8gdW4gdmFsb3JlIGNvbiBcIiFub21lcmVsYXppb25lXCJcclxuICAgICAgICB0aGlzLmhhdmVSZWxhdGlvbnMgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlLm9wZW5lZEZpZWxkcy5maWx0ZXIoeCA9PiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZS5pbmRleE9mKCchJykgIT0gLTEpLmZvckVhY2goKGZpZWxkV2l0aFJlbGF0aW9uKSA9PiB7XHJcblxyXG4gICAgICAgICAgdmFyIGZpZWxkUmVsYXRlZCA9IGZpZWxkV2l0aFJlbGF0aW9uLlF1ZXJ5UHJvcGVydHlWYWx1ZS5yZXBsYWNlKFwiIVwiLFwiXCIpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdID09IG51bGwpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gRScgTlVMTFwiLCB0aGlzLmZpZWxkLk5hbWUsIGZpZWxkUmVsYXRlZCwgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSwgdGhpcy5yZWNvcmQpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbGF0aW9ucy5wdXNoKHtmaWVsZDogZmllbGRSZWxhdGVkLCBsb2FkZWQ6IGZhbHNlLCBhY3R1YWx2YWx1ZTogdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXX0pO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrUmVsYXRpb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdIENIRUNLXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFJlbGF0aW9uID0gdGhpcy5yZWxhdGlvbnMuZmluZCh4ID0+IHguZmllbGQgPT0gZmllbGRSZWxhdGVkKTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UmVsYXRpb24gIT0gbnVsbCl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBHZXN0aW9uZSBkZWkgY2FtYmkgZGkgdmFsb3JlIGRlaSBjYW1waSByZWxhemlvbmF0aVxyXG4gICAgICAgICAgICAgICAgICAvLyBJbCBjYW1wbyByZWxhemlvbmF0byBJTklaSUFMTUVOVEUgTk9OIEUnIE5VTEwsIGUgY2FtYmlhIHZhbG9yZSBpbiBxdWFsY29zYSBjaGUgTk9OIEUnIE5VTExcclxuICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSZWxhdGlvbi5hY3R1YWx2YWx1ZSAhPSBudWxsICYmIHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gIT0gbnVsbCAmJiB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdICE9IGN1cnJlbnRSZWxhdGlvbi5hY3R1YWx2YWx1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdIEhBIENBTUJJQVRPIFZBTE9SRSEhXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlID0gdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24ubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZFdpdGhSZWxhdGlvbi5RdWVyeVByb3BlcnR5VmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIElsIGNhbXBvIHJlbGF6aW9uYXRvIElOSVpJQUxNRU5URSBOT04gRScgTlVMTCwgZSBjYW1iaWEgdmFsb3JlIElOIE5VTExcclxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlICE9IG51bGwgJiYgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gRScgVE9STkFUTyBBRCBFU1NFUkUgTlVMTCEhIDooXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlID0gdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24ubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZFdpdGhSZWxhdGlvbi5RdWVyeVByb3BlcnR5VmFsdWUgPSBcIiFcIitmaWVsZFJlbGF0ZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxvYWRDb21wb25lbnQoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gSWwgY2FtcG8gcmVsYXppb25hdG8gSU5JWklBTE1FTlRFIEUnIE5VTEwsIGUgY2FtYmlhIHZhbG9yZVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUgPT0gbnVsbCAmJiB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSBOT04gRScgUElVJyBOVUxMISEgOilcIiwgdGhpcy5maWVsZC5OYW1lLCBmaWVsZFJlbGF0ZWQsIHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0sIHRoaXMucmVjb3JkKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWxhdGlvbi5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkV2l0aFJlbGF0aW9uLlF1ZXJ5UHJvcGVydHlWYWx1ZSA9IHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxvYWRDb21wb25lbnQoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1JlbGF0aW9ucygpO1xyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwyMDAwKTtcclxuXHJcblxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJ0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdIE5PTiBFJyBOVUxMISEgOilcIiwgdGhpcy5maWVsZC5OYW1lLCBmaWVsZFJlbGF0ZWQsIHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0sIHRoaXMucmVjb3JkKTtcclxuICAgICAgICAgICAgZmllbGRXaXRoUmVsYXRpb24uUXVlcnlQcm9wZXJ0eVZhbHVlID0gdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSAhPSBudWxsID8gdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSA6ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnJlbGF0aW9ucy5wdXNoKHtmaWVsZDogZmllbGRSZWxhdGVkLCBsb2FkZWQ6IHRydWUsIGFjdHVhbHZhbHVlOiB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdfSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tSZWxhdGlvbnMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgIH0pOyAgICAgICAgXHJcblxyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0aGlzLmhhdmVSZWxhdGlvbnMpe1xyXG4gICAgICAgIHRoaXMucmVsYXRpb25zTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgfSAgICAgXHJcblxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRhdGEgPT0gbnVsbCl7XHJcblxyXG4gICAgICB0aGlzLmh0dHBDbGllbnQuZ2V0KCcuL2Fzc2V0cy9tb2NrdXBzL21vY2tlZEZyb21RdWVyeUVkaXRvcl9SRVNVTFRfTUFOWS50eHQnLCB7cmVzcG9uc2VUeXBlOiAndGV4dCd9KVxyXG4gICAgICAuc3Vic2NyaWJlKG1vY2tlZEZyb21RdWVyeUVkaXRvciA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZShtb2NrZWRGcm9tUXVlcnlFZGl0b3IpO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UodGhpcy5kYXRhLnJlc3VsdCk7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzUmVzdWx0KHRoaXMuZGF0YSxbXSk7XHJcbiAgICAgICB9KTsgICAgICBcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcmVsb2FkQ29tcG9uZW50KCl7XHJcbiAgICBjb25zb2xlLmxvZyhcIlJFTE9BRCBDT01QT05FTlQgQ0FMTEVEXCIsIHRoaXMucmVjb3JkLCB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5yZWNvcmQpO1xyXG5cclxuICAgIHRoaXMucmVsb2FkID0gZmFsc2U7XHJcbiAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5yZWNvcmQgPSB0aGlzLnJlY29yZDtcclxuICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmZpZWxkID0gdGhpcy5maWVsZDtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5yZWxvYWQgPSB0cnVlOyBjb25zb2xlLmxvZyhcIlJFTE9BREVEIFFVRVJZRURJVE9SXCIpOyB9LCAxMDAwKTsgXHJcbiAgfVxyXG5cclxuICBjaGVja1JlbGF0aW9ucygpe1xyXG4gICAgdGhpcy5yZWxhdGlvbnNMb2FkZWQgPSB0aGlzLnJlbGF0aW9ucy5maW5kKHggPT4geC5sb2FkZWQpICE9IG51bGw7XHJcbiAgfVxyXG5cclxuICBvbkV4dGVybmFsU1FMUmVzdWx0T3V0KGV2OiBldmVudE91dCl7XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJSaXN1bHRhdG8gZGVsbCdlbGFib3JhemlvbmUgZGVsIHF1ZXJ5IGVkaXRvcjogb25FeHRlcm5hbFNRTFJlc3VsdE91dFwiLCBldik7XHJcblxyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcInNlbmQtb3V0XCIpICE9IC0xKXsgdGhpcy5vdXQuZW1pdChldik7IH1cclxuXHJcbiAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKGV2LlBhcmFtcy5yZXN1bHQpO1xyXG4gICAgdGhpcy5wcm9jZXNzUmVzdWx0KHRoaXMuZGF0YSxldi5CZWhhdmlvdXJzKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcm9jZXNzUmVzdWx0KGRhdGE6IGFueSwgYmVoYXZpb3VyczogQXJyYXk8c3RyaW5nPiA9IFtdKXtcclxuICAgIFxyXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCl7XHJcbiAgICAgIHRoaXMua2V5cyA9IE9iamVjdC5rZXlzKGRhdGFbMF0pO1xyXG4gICAgICBpZiAodGhpcy5rZXlzLmxlbmd0aCA9PSAyICYmIGRhdGEubGVuZ3RoID09IDEpe1xyXG4gICAgICAgIC8vIFNlIGhvIHVuIHNvbG8gb2NjaGlldHRvIHNlbGV6aW9uYXRvIGUgbGEgcXVlcnkgcmVzdGl0dWlzY2UgdW4gc29sbyB2YWxvcmUsIGxvIGJ1dHRvIGZ1b3JpIGF1dG9tYXRpY2FtZW50ZVxyXG4gICAgICAgIHRoaXMuc2hvd1RhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGRhdGFbMF1bdGhpcy5rZXlzWzFdXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUuZW1pdChbZGF0YVswXVt0aGlzLmtleXNbMV1dLHRydWVdKTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLmxlbmd0aCA9PSAxICYmIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgIT0gbnVsbCl7XHJcbiAgICAgICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gZGF0YVswXVt0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlLmtleV07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW2RhdGFbMF1bdGhpcy5rZXlzWzFdXSx0cnVlXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIGlmIChiZWhhdmlvdXJzLmluZGV4T2YoXCJtYW5hZ2UtcXVlc3Rpb24taW4tZGJnZXR0ZXJcIikgIT0gLTEpe1xyXG4gICAgICAgICAgdGhpcy5zaG93VGFibGUgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgaWYgKCF0aGlzLkRpcmVjdGx5T3BlblRhYmxlKXtcclxuICAgICAgICAgICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RhYmxlID0gdHJ1ZTsgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vdGhpcy5zaG93UUUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgfVxyXG5cclxuICBzZWxlY3RWYWx1ZShyb3csIHZhbHVlKXtcclxuXHJcbiAgICB2YXIgdmFsdWVUb0JlU2V0ID0gXCJcIjtcclxuXHJcbiAgICBpZih0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID09IG51bGwpe1xyXG4gICAgICB2YWx1ZVRvQmVTZXQgPSB2YWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhbHVlVG9CZVNldCA9IHJvd1t0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlLmtleV07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbHVlVG9CZVNldCA9PSBudWxsKXsgdmFsdWVUb0JlU2V0ID0gXCJcIjsgfVxyXG5cclxuICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSB2YWx1ZVRvQmVTZXQ7XHJcbiAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gICAgLy90aGlzLnNob3dRRSA9IGZhbHNlO1xyXG5cclxuICAgIC8vRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuU3VjY2VzcyhcIlVuIHNvbG8gcmlzdWx0YXRvIHRyb3ZhdG8sIMOoIHN0YXRvIGluc2VyaXRvIGluIGF1dG9tYXRpY29cIik7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW3ZhbHVlVG9CZVNldCxmYWxzZV0pOyAgICBcclxuICB9XHJcblxyXG4gIGNsb3NlKCl7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUuZW1pdChbXCIqKioqQ0xPU0UqKioqXCIsdHJ1ZV0pO1xyXG4gICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuICB9XHJcbiAgXHJcbiAgZGVsZXRlKCl7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUuZW1pdChbbnVsbCx0cnVlXSk7XHJcbiAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gIH0gIFxyXG59XHJcblxyXG4vLyBPIGNvc8OsIG8gc2NoaWFudGF0byBhIG1hbm9cclxuZXhwb3J0IGVudW0gUXVlcnlFZGl0b3JNb2RlRW51bSB7XHJcbiAgXCJDT05GSUdVUkFUT1JcIiA9IDEsXHJcbiAgXCJDT01QT1NFUlwiID0gMixcclxuICBcIlJFU1VMVFwiID0gM1xyXG59Iiwie3tzaG93UUV9fSB7e1F1ZXJ5RWRpdG9yQ29tcG9uZW50fX0ge3tyZWxhdGlvbnNMb2FkZWR9fSB7e3JlbG9hZH19XHJcblxyXG48ZGl2IFtoaWRkZW5dPVwiIXNob3dRRVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIFthcHBEeW5hbWljTG9hZGVyXSBbZGF0YV09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiIChvdXQpPVwib25FeHRlcm5hbFNRTFJlc3VsdE91dCgkZXZlbnQpO1wiICpuZ0lmPVwiUXVlcnlFZGl0b3JDb21wb25lbnQgIT0gbnVsbCAmJiByZWxhdGlvbnNMb2FkZWQgJiYgcmVsb2FkXCI+PC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiZmxvYXRpbmd0YWJsZSBkcmFnZ2FibGVcIiBjZGtEcmFnICpuZ0lmPVwic2hvd1RhYmxlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tZGFuZ2VyXCIgKGNsaWNrKT1cImNsb3NlKClcIj5DaGl1ZGkgZmluZXN0cmEgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj48L2J1dHRvbj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPjxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1kYW5nZXJcIiAoY2xpY2spPVwiZGVsZXRlKClcIj5DYW5jZWxsYSB2YWxvcmUgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+PG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj4gU2VsZXppb25hIGlsIHZhbG9yZSBkYSByZWdpc3RyYXJlLiBDbGljY2Egc3UgcXVlc3RhIGJhcnJhIHBlciB0cmFzY2luYXJlLjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgXHJcbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZVwiIFtuZ0NsYXNzXT1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID09IG51bGwgPyAndGFibGUtbm90Zm9yY2VkJyA6ICd0YWJsZS1mb3JjZWQnXCI+XHJcbiAgICAgICAgPHRyPjx0aCAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXM7IGxldCBmaXJzdCA9IGZpcnN0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlyc3RcIj57e2tleX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaXJzdFwiPnt7a2V5LnNwbGl0KFwiX19cIilbMV19fTwvc3Bhbj5cclxuICAgICAgICA8L3RoPjwvdHI+XHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YVwiIGNsYXNzPVwicm93c1wiPlxyXG4gICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzXCIgKGNsaWNrKT1cInNlbGVjdFZhbHVlKHJvdywgcm93W2tleV0pXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dba2V5XSAhPSBudWxsICYmIHJvd1trZXldLnRvU3RyaW5nKCkubGVuZ3RoIDw9IDEwMFwiIFtpbm5lckhUTUxdPVwicm93W2tleV1cIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+IFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dba2V5XSAhPSBudWxsICYmIHJvd1trZXldLnRvU3RyaW5nKCkubGVuZ3RoID4gMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tyb3dba2V5XSAhPSBudWxsID8gcm93W2tleV0udG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwxMDApIDogJyd9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dba2V5XSAhPSBudWxsICYmIHJvd1trZXldLnRvU3RyaW5nKCkubGVuZ3RoID4gMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cInJvd1trZXldXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG5cclxuICAgIDwhLS0gXHJcbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ub3Rmb3JjZWRcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID09IG51bGxcIj5cclxuICAgICAgICA8dHI+PHRoICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5czsgbGV0IGZpcnN0ID0gZmlyc3RcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaXJzdFwiPnt7a2V5fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZpcnN0XCI+e3trZXkuc3BsaXQoXCJfX1wiKVsxXX19PC9zcGFuPlxyXG4gICAgICAgIDwvdGg+PC90cj5cclxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhXCIgY2xhc3M9XCJyb3dzXCI+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXNcIiAoY2xpY2spPVwic2VsZWN0VmFsdWVOb3RGb3JjZWQocm93W2tleV0pXCI+XHJcbiAgICAgICAgICAgICAgICB7e3Jvd1trZXldICE9IG51bGwgPyByb3dba2V5XS50b1N0cmluZygpLnN1YnN0cmluZygwLDEwMCkgOiAnJ319XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd1trZXldICE9IG51bGwgJiYgcm93W2tleV0udG9TdHJpbmcoKS5sZW5ndGggPiAxMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAuLi5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC90YWJsZT5cclxuXHJcbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1mb3JjZWRcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlICE9IG51bGxcIj5cclxuICAgICAgICA8dHI+PHRoICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5czsgbGV0IGZpcnN0ID0gZmlyc3RcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaXJzdFwiPnt7a2V5fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZpcnN0XCI+e3trZXkuc3BsaXQoXCJfX1wiKVsxXX19PC9zcGFuPlxyXG4gICAgICAgIDwvdGg+PC90cj5cclxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhXCIgY2xhc3M9XCJyb3dzXCIgKGNsaWNrKT1cInNlbGVjdFZhbHVlRm9yY2VkKHJvdylcIj5cclxuICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5c1wiPlxyXG4gICAgICAgICAgICAgICAge3tyb3dba2V5XSAhPSBudWxsID8gcm93W2tleV0udG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwxMDApIDogJyd9fVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dba2V5XSAhPSBudWxsICYmIHJvd1trZXldLnRvU3RyaW5nKCkubGVuZ3RoID4gMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcbiAgICAtLT5cclxuXHJcbjwvZGl2PlxyXG5cclxuPHNwYW4gKm5nSWY9XCJ2YWx1ZSAhPSBudWxsXCI+e3t2YWx1ZX19PC9zcGFuPiJdfQ==
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJnZXR0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2RiZ2V0dGVyL2RiZ2V0dGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9kYmdldHRlci9kYmdldHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBWXZFLE1BQU0sT0FBTyxpQkFBaUI7SUE4QjVCLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF6QmpDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBQ25DLHlCQUFvQixHQUErQixJQUFJLENBQUMsQ0FBQyxtQ0FBbUM7UUFDNUYsU0FBSSxHQUFRLElBQUksQ0FBQyxDQUFDLHdDQUF3QztRQUV6RCxRQUFHLEdBQTJCLElBQUksWUFBWSxFQUFZLENBQUM7UUFDM0Qsa0JBQWEsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVyRSxTQUFJLEdBQWtCLElBQUksQ0FBQztRQUMzQixXQUFNLEdBQVksS0FBSyxDQUFDO1FBR3hCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsV0FBTSxHQUFZLElBQUksQ0FBQztRQUV2QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixXQUFNLEdBQVksSUFBSSxDQUFDO1FBSXZCLGNBQVMsR0FBOEQsSUFBSSxLQUFLLEVBQXNELENBQUM7UUFFdkkseUJB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QUc7c0JBQVosTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNOztBQTBPVCw2QkFBNkI7QUFDN0IsTUFBTSxDQUFOLElBQVksbUJBSVg7QUFKRCxXQUFZLG1CQUFtQjtJQUM3Qiw2RUFBa0IsQ0FBQTtJQUNsQixxRUFBYyxDQUFBO0lBQ2QsaUVBQVksQ0FBQTtBQUNkLENBQUMsRUFKVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBSTlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEsIGV2ZW50T3V0IH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2RiZ2V0dGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGJnZXR0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RiZ2V0dGVyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIERiZ2V0dGVyQ29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgZm9ybTogRm9ybTtcclxuICBASW5wdXQoKSBmaWVsZDogQmFzZUZpZWxkO1xyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgRGlyZWN0bHlPcGVuVGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBRdWVyeUVkaXRvckNvbXBvbmVudDogRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEgPSBudWxsOyAvLyBMJ2ludGVybyBjb21wb25lbnRlIHF1ZXJ5IEVkaXRvclxyXG4gIEBJbnB1dCgpIGRhdGE6IGFueSA9IG51bGw7IC8vIExvIGZhY2NpYW1vIGZ1bnppb25hcmUgdGlwbyBFUVAtVEFCTEVcclxuXHJcbiAgQE91dHB1dCgpIG91dDogRXZlbnRFbWl0dGVyPGV2ZW50T3V0PiA9IG5ldyBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkVmFsdWU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGtleXM6IEFycmF5PHN0cmluZz4gPSBudWxsO1xyXG4gIGxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZhbHVlOiBhbnk7XHJcblxyXG4gIHNob3dUYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dRRTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGhhdmVRdWVzdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXZlUmVsYXRpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcmVsb2FkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgaW50ZXJ2YWw6IGFueTtcclxuXHJcbiAgcmVsYXRpb25zOiBBcnJheTx7ZmllbGQ6IHN0cmluZywgbG9hZGVkOiBib29sZWFuLCBhY3R1YWx2YWx1ZTogYW55fT4gPSBuZXcgQXJyYXk8e2ZpZWxkOiBzdHJpbmcsIGxvYWRlZDogYm9vbGVhbiwgYWN0dWFsdmFsdWU6IGFueX0+KCk7XHJcbiAgcmVsYXRpb25zTG9hZGVkOiBib29sZWFuO1xyXG4gIGJhY2t1cFF1ZXN0aW9uRmllbGRzOiBBcnJheTxzdHJpbmc+ID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwiSU5TSURFIERCR0VUVEVSXCIsIHRoaXMuZm9ybSwgdGhpcy5yZWNvcmQsIHRoaXMuZmllbGQsIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50ICE9IG51bGwpe1xyXG4gICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5tb2RlID0gUXVlcnlFZGl0b3JNb2RlRW51bS5SRVNVTFQ7XHJcbiAgICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmZpZWxkID0gdGhpcy5maWVsZDtcclxuICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcucmVjb3JkID0gdGhpcy5yZWNvcmQ7XHJcbiAgICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmluQ29uZmlnID0gdGhpcy5pbkNvbmZpZztcclxuXHJcbiAgICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlLm9wZW5lZEZpZWxkcy5maW5kKHggPT4geC5RdWVyeVByb3BlcnR5VmFsdWUgPT0gJz8nKSAhPSBudWxsKXtcclxuICAgICAgICBcclxuICAgICAgICAvLyBJbCBjYW1wbyBoYSBhbG1lbm8gdW4gdmFsb3JlIGNvbiBcIj9cIlxyXG4gICAgICAgIHRoaXMuaGF2ZVF1ZXN0aW9ucyA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coXCJDSEVDS0lORyBCQUNLVVBTIE9QRU5FRCBGSUVMRFMuLi4uXCIsIHRoaXMuYmFja3VwUXVlc3Rpb25GaWVsZHMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5iYWNrdXBRdWVzdGlvbkZpZWxkcyA9PSBudWxsKXtcclxuICAgICAgICAgIHRoaXMuYmFja3VwUXVlc3Rpb25GaWVsZHMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZS5vcGVuZWRGaWVsZHMuZm9yRWFjaCgocnFmKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFja3VwUXVlc3Rpb25GaWVsZHMucHVzaChycWYuUHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZS5vcGVuZWRGaWVsZHMuZmluZCh4ID0+IHguUXVlcnlQcm9wZXJ0eVZhbHVlLmluZGV4T2YoJyEnKSAhPSAtMSkgIT0gbnVsbCl7XHJcblxyXG4gICAgICAgIC8vIElsIGNhbXBvIGhhIGFsbWVubyB1biB2YWxvcmUgY29uIFwiIW5vbWVyZWxhemlvbmVcIlxyXG4gICAgICAgIHRoaXMuaGF2ZVJlbGF0aW9ucyA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUub3BlbmVkRmllbGRzLmZpbHRlcih4ID0+IHguUXVlcnlQcm9wZXJ0eVZhbHVlLmluZGV4T2YoJyEnKSAhPSAtMSkuZm9yRWFjaCgoZmllbGRXaXRoUmVsYXRpb24pID0+IHtcclxuXHJcbiAgICAgICAgICB2YXIgZmllbGRSZWxhdGVkID0gZmllbGRXaXRoUmVsYXRpb24uUXVlcnlQcm9wZXJ0eVZhbHVlLnJlcGxhY2UoXCIhXCIsXCJcIik7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJ0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdIEUnIE5VTExcIiwgdGhpcy5maWVsZC5OYW1lLCBmaWVsZFJlbGF0ZWQsIHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0sIHRoaXMucmVjb3JkKTtcclxuICAgICAgICAgICAgdGhpcy5yZWxhdGlvbnMucHVzaCh7ZmllbGQ6IGZpZWxkUmVsYXRlZCwgbG9hZGVkOiBmYWxzZSwgYWN0dWFsdmFsdWU6IHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF19KTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1JlbGF0aW9ucygpO1xyXG4gICAgICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJ0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdIENIRUNLXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFJlbGF0aW9uID0gdGhpcy5yZWxhdGlvbnMuZmluZCh4ID0+IHguZmllbGQgPT0gZmllbGRSZWxhdGVkKTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UmVsYXRpb24gIT0gbnVsbCl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBHZXN0aW9uZSBkZWkgY2FtYmkgZGkgdmFsb3JlIGRlaSBjYW1waSByZWxhemlvbmF0aVxyXG4gICAgICAgICAgICAgICAgICAvLyBJbCBjYW1wbyByZWxhemlvbmF0byBJTklaSUFMTUVOVEUgTk9OIEUnIE5VTEwsIGUgY2FtYmlhIHZhbG9yZSBpbiBxdWFsY29zYSBjaGUgTk9OIEUnIE5VTExcclxuICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSZWxhdGlvbi5hY3R1YWx2YWx1ZSAhPSBudWxsICYmIHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gIT0gbnVsbCAmJiB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdICE9IGN1cnJlbnRSZWxhdGlvbi5hY3R1YWx2YWx1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gSEEgQ0FNQklBVE8gVkFMT1JFISFcIiwgdGhpcy5maWVsZC5OYW1lLCBmaWVsZFJlbGF0ZWQsIHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0sIHRoaXMucmVjb3JkKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWxhdGlvbi5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkV2l0aFJlbGF0aW9uLlF1ZXJ5UHJvcGVydHlWYWx1ZSA9IHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxvYWRDb21wb25lbnQoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gSWwgY2FtcG8gcmVsYXppb25hdG8gSU5JWklBTE1FTlRFIE5PTiBFJyBOVUxMLCBlIGNhbWJpYSB2YWxvcmUgSU4gTlVMTFxyXG4gICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUgIT0gbnVsbCAmJiB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdID09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJ0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdIEUnIFRPUk5BVE8gQUQgRVNTRVJFIE5VTEwhISA6KFwiLCB0aGlzLmZpZWxkLk5hbWUsIGZpZWxkUmVsYXRlZCwgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSwgdGhpcy5yZWNvcmQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWxhdGlvbi5hY3R1YWx2YWx1ZSA9IHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF07XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlbGF0aW9uLmxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGRXaXRoUmVsYXRpb24uUXVlcnlQcm9wZXJ0eVZhbHVlID0gXCIhXCIrZmllbGRSZWxhdGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBSZWN1cGVybyBCYWNrdXBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhY2t1cFF1ZXN0aW9uRmllbGRzLmZvckVhY2goKGJvZikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZS5vcGVuZWRGaWVsZHMuZmluZCh4ID0+IHguUHJvcGVydHlOYW1lID09IGJvZikuUXVlcnlQcm9wZXJ0eVZhbHVlID0gXCI/XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIElsIGNhbXBvIHJlbGF6aW9uYXRvIElOSVpJQUxNRU5URSBFJyBOVUxMLCBlIGNhbWJpYSB2YWxvcmVcclxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlID09IG51bGwgJiYgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwidGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSBOT04gRScgUElVJyBOVUxMISEgOilcIiwgdGhpcy5maWVsZC5OYW1lLCBmaWVsZFJlbGF0ZWQsIHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0sIHRoaXMucmVjb3JkKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWxhdGlvbi5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkV2l0aFJlbGF0aW9uLlF1ZXJ5UHJvcGVydHlWYWx1ZSA9IHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxvYWRDb21wb25lbnQoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1JlbGF0aW9ucygpO1xyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwyMDApO1xyXG5cclxuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwidGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSBOT04gRScgTlVMTCEhIDopXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgIGZpZWxkV2l0aFJlbGF0aW9uLlF1ZXJ5UHJvcGVydHlWYWx1ZSA9IHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gIT0gbnVsbCA/IHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gOiAnJztcclxuICAgICAgICAgICAgdGhpcy5yZWxhdGlvbnMucHVzaCh7ZmllbGQ6IGZpZWxkUmVsYXRlZCwgbG9hZGVkOiB0cnVlLCBhY3R1YWx2YWx1ZTogdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXX0pO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrUmVsYXRpb25zKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICB9KTsgICAgICAgIFxyXG5cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGhpcy5oYXZlUmVsYXRpb25zKXtcclxuICAgICAgICB0aGlzLnJlbGF0aW9uc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgIH0gICAgIFxyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5kYXRhID09IG51bGwpe1xyXG5cclxuICAgICAgdGhpcy5odHRwQ2xpZW50LmdldCgnLi9hc3NldHMvbW9ja3Vwcy9tb2NrZWRGcm9tUXVlcnlFZGl0b3JfUkVTVUxUX01BTlkudHh0Jywge3Jlc3BvbnNlVHlwZTogJ3RleHQnfSlcclxuICAgICAgLnN1YnNjcmliZShtb2NrZWRGcm9tUXVlcnlFZGl0b3IgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UobW9ja2VkRnJvbVF1ZXJ5RWRpdG9yKTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKHRoaXMuZGF0YS5yZXN1bHQpO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1Jlc3VsdCh0aGlzLmRhdGEsW10pO1xyXG4gICAgICAgfSk7ICAgICAgXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHJlbG9hZENvbXBvbmVudCgpe1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJFTE9BRCBDT01QT05FTlQgQ0FMTEVEXCIsIHRoaXMucmVjb3JkLCB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5yZWNvcmQpO1xyXG5cclxuICAgIHRoaXMucmVsb2FkID0gZmFsc2U7XHJcbiAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5yZWNvcmQgPSB0aGlzLnJlY29yZDtcclxuICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmZpZWxkID0gdGhpcy5maWVsZDtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5yZWxvYWQgPSB0cnVlOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiUkVMT0FERUQgUVVFUllFRElUT1JcIik7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSwgMzAwMCk7IFxyXG4gIH1cclxuXHJcbiAgY2hlY2tSZWxhdGlvbnMoKXtcclxuICAgIHRoaXMucmVsYXRpb25zTG9hZGVkID0gdGhpcy5yZWxhdGlvbnMuZmluZCh4ID0+IHgubG9hZGVkKSAhPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgb25FeHRlcm5hbFNRTFJlc3VsdE91dChldjogZXZlbnRPdXQpe1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJSaXN1bHRhdG8gZGVsbCdlbGFib3JhemlvbmUgZGVsIHF1ZXJ5IGVkaXRvcjogb25FeHRlcm5hbFNRTFJlc3VsdE91dFwiLCBldik7XHJcblxyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcInNlbmQtb3V0XCIpICE9IC0xKXsgdGhpcy5vdXQuZW1pdChldik7IH1cclxuXHJcbiAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKGV2LlBhcmFtcy5yZXN1bHQpO1xyXG4gICAgdGhpcy5wcm9jZXNzUmVzdWx0KHRoaXMuZGF0YSxldi5CZWhhdmlvdXJzKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcm9jZXNzUmVzdWx0KGRhdGE6IGFueSwgYmVoYXZpb3VyczogQXJyYXk8c3RyaW5nPiA9IFtdKXtcclxuICAgIFxyXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCl7XHJcbiAgICAgIHRoaXMua2V5cyA9IE9iamVjdC5rZXlzKGRhdGFbMF0pO1xyXG4gICAgICBpZiAodGhpcy5rZXlzLmxlbmd0aCA9PSAyICYmIGRhdGEubGVuZ3RoID09IDEpe1xyXG4gICAgICAgIC8vIFNlIGhvIHVuIHNvbG8gb2NjaGlldHRvIHNlbGV6aW9uYXRvIGUgbGEgcXVlcnkgcmVzdGl0dWlzY2UgdW4gc29sbyB2YWxvcmUsIGxvIGJ1dHRvIGZ1b3JpIGF1dG9tYXRpY2FtZW50ZVxyXG4gICAgICAgIHRoaXMuc2hvd1RhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGRhdGFbMF1bdGhpcy5rZXlzWzFdXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUuZW1pdChbZGF0YVswXVt0aGlzLmtleXNbMV1dLHRydWVdKTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLmxlbmd0aCA9PSAxICYmIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgIT0gbnVsbCl7XHJcbiAgICAgICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gZGF0YVswXVt0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlLmtleV07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW2RhdGFbMF1bdGhpcy5rZXlzWzFdXSx0cnVlXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIGlmIChiZWhhdmlvdXJzLmluZGV4T2YoXCJtYW5hZ2UtcXVlc3Rpb24taW4tZGJnZXR0ZXJcIikgIT0gLTEpe1xyXG4gICAgICAgICAgdGhpcy5zaG93VGFibGUgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgaWYgKCF0aGlzLkRpcmVjdGx5T3BlblRhYmxlKXtcclxuICAgICAgICAgICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RhYmxlID0gdHJ1ZTsgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vdGhpcy5zaG93UUUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgfVxyXG5cclxuICBzZWxlY3RWYWx1ZShyb3csIHZhbHVlKXtcclxuXHJcbiAgICB2YXIgdmFsdWVUb0JlU2V0ID0gXCJcIjtcclxuXHJcbiAgICBpZih0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID09IG51bGwpe1xyXG4gICAgICB2YWx1ZVRvQmVTZXQgPSB2YWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhbHVlVG9CZVNldCA9IHJvd1t0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlLmtleV07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbHVlVG9CZVNldCA9PSBudWxsKXsgdmFsdWVUb0JlU2V0ID0gXCJcIjsgfVxyXG5cclxuICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSB2YWx1ZVRvQmVTZXQ7XHJcbiAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gICAgLy90aGlzLnNob3dRRSA9IGZhbHNlO1xyXG5cclxuICAgIC8vRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuU3VjY2VzcyhcIlVuIHNvbG8gcmlzdWx0YXRvIHRyb3ZhdG8sIMOoIHN0YXRvIGluc2VyaXRvIGluIGF1dG9tYXRpY29cIik7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW3ZhbHVlVG9CZVNldCxmYWxzZV0pOyAgICBcclxuICB9XHJcblxyXG4gIGNsb3NlKCl7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUuZW1pdChbXCIqKioqQ0xPU0UqKioqXCIsdHJ1ZV0pO1xyXG4gICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuICB9XHJcbiAgXHJcbiAgZGVsZXRlKCl7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUuZW1pdChbbnVsbCx0cnVlXSk7XHJcbiAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gIH0gIFxyXG59XHJcblxyXG4vLyBPIGNvc8OsIG8gc2NoaWFudGF0byBhIG1hbm9cclxuZXhwb3J0IGVudW0gUXVlcnlFZGl0b3JNb2RlRW51bSB7XHJcbiAgXCJDT05GSUdVUkFUT1JcIiA9IDEsXHJcbiAgXCJDT01QT1NFUlwiID0gMixcclxuICBcIlJFU1VMVFwiID0gM1xyXG59Iiwie3tzaG93UUV9fSB7e1F1ZXJ5RWRpdG9yQ29tcG9uZW50fX0ge3tyZWxhdGlvbnNMb2FkZWR9fSB7e3JlbG9hZH19XHJcblxyXG48ZGl2IFtoaWRkZW5dPVwiIXNob3dRRVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIFthcHBEeW5hbWljTG9hZGVyXSBbZGF0YV09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiIChvdXQpPVwib25FeHRlcm5hbFNRTFJlc3VsdE91dCgkZXZlbnQpO1wiICpuZ0lmPVwiUXVlcnlFZGl0b3JDb21wb25lbnQgIT0gbnVsbCAmJiByZWxhdGlvbnNMb2FkZWQgJiYgcmVsb2FkXCI+PC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiZmxvYXRpbmd0YWJsZSBkcmFnZ2FibGVcIiBjZGtEcmFnICpuZ0lmPVwic2hvd1RhYmxlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tZGFuZ2VyXCIgKGNsaWNrKT1cImNsb3NlKClcIj5DaGl1ZGkgZmluZXN0cmEgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj48L2J1dHRvbj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPjxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1kYW5nZXJcIiAoY2xpY2spPVwiZGVsZXRlKClcIj5DYW5jZWxsYSB2YWxvcmUgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+PG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj4gU2VsZXppb25hIGlsIHZhbG9yZSBkYSByZWdpc3RyYXJlLiBDbGljY2Egc3UgcXVlc3RhIGJhcnJhIHBlciB0cmFzY2luYXJlLjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgXHJcbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZVwiIFtuZ0NsYXNzXT1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID09IG51bGwgPyAndGFibGUtbm90Zm9yY2VkJyA6ICd0YWJsZS1mb3JjZWQnXCI+XHJcbiAgICAgICAgPHRyPjx0aCAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXM7IGxldCBmaXJzdCA9IGZpcnN0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlyc3RcIj57e2tleX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaXJzdFwiPnt7a2V5LnNwbGl0KFwiX19cIilbMV19fTwvc3Bhbj5cclxuICAgICAgICA8L3RoPjwvdHI+XHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YVwiIGNsYXNzPVwicm93c1wiPlxyXG4gICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzXCIgKGNsaWNrKT1cInNlbGVjdFZhbHVlKHJvdywgcm93W2tleV0pXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dba2V5XSAhPSBudWxsICYmIHJvd1trZXldLnRvU3RyaW5nKCkubGVuZ3RoIDw9IDEwMFwiIFtpbm5lckhUTUxdPVwicm93W2tleV1cIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+IFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dba2V5XSAhPSBudWxsICYmIHJvd1trZXldLnRvU3RyaW5nKCkubGVuZ3RoID4gMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tyb3dba2V5XSAhPSBudWxsID8gcm93W2tleV0udG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwxMDApIDogJyd9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dba2V5XSAhPSBudWxsICYmIHJvd1trZXldLnRvU3RyaW5nKCkubGVuZ3RoID4gMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cInJvd1trZXldXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG5cclxuICAgIDwhLS0gXHJcbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ub3Rmb3JjZWRcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID09IG51bGxcIj5cclxuICAgICAgICA8dHI+PHRoICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5czsgbGV0IGZpcnN0ID0gZmlyc3RcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaXJzdFwiPnt7a2V5fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZpcnN0XCI+e3trZXkuc3BsaXQoXCJfX1wiKVsxXX19PC9zcGFuPlxyXG4gICAgICAgIDwvdGg+PC90cj5cclxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhXCIgY2xhc3M9XCJyb3dzXCI+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXNcIiAoY2xpY2spPVwic2VsZWN0VmFsdWVOb3RGb3JjZWQocm93W2tleV0pXCI+XHJcbiAgICAgICAgICAgICAgICB7e3Jvd1trZXldICE9IG51bGwgPyByb3dba2V5XS50b1N0cmluZygpLnN1YnN0cmluZygwLDEwMCkgOiAnJ319XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd1trZXldICE9IG51bGwgJiYgcm93W2tleV0udG9TdHJpbmcoKS5sZW5ndGggPiAxMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAuLi5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC90YWJsZT5cclxuXHJcbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1mb3JjZWRcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlICE9IG51bGxcIj5cclxuICAgICAgICA8dHI+PHRoICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5czsgbGV0IGZpcnN0ID0gZmlyc3RcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaXJzdFwiPnt7a2V5fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZpcnN0XCI+e3trZXkuc3BsaXQoXCJfX1wiKVsxXX19PC9zcGFuPlxyXG4gICAgICAgIDwvdGg+PC90cj5cclxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhXCIgY2xhc3M9XCJyb3dzXCIgKGNsaWNrKT1cInNlbGVjdFZhbHVlRm9yY2VkKHJvdylcIj5cclxuICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5c1wiPlxyXG4gICAgICAgICAgICAgICAge3tyb3dba2V5XSAhPSBudWxsID8gcm93W2tleV0udG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwxMDApIDogJyd9fVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dba2V5XSAhPSBudWxsICYmIHJvd1trZXldLnRvU3RyaW5nKCkubGVuZ3RoID4gMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcbiAgICAtLT5cclxuXHJcbjwvZGl2PlxyXG5cclxuPHNwYW4gKm5nSWY9XCJ2YWx1ZSAhPSBudWxsXCI+e3t2YWx1ZX19PC9zcGFuPiJdfQ==
|
|
@@ -4419,9 +4419,10 @@ class DbgetterComponent {
|
|
|
4419
4419
|
this.haveRelations = false;
|
|
4420
4420
|
this.reload = true;
|
|
4421
4421
|
this.relations = new Array();
|
|
4422
|
+
this.backupQuestionFields = null;
|
|
4422
4423
|
}
|
|
4423
4424
|
ngOnInit() {
|
|
4424
|
-
console.log("INSIDE DBGETTER", this.form, this.record, this.field, this.QueryEditorComponent);
|
|
4425
|
+
//console.log("INSIDE DBGETTER", this.form, this.record, this.field, this.QueryEditorComponent);
|
|
4425
4426
|
if (this.QueryEditorComponent != null) {
|
|
4426
4427
|
this.QueryEditorComponent.inputParams.config.mode = QueryEditorModeEnum.RESULT;
|
|
4427
4428
|
this.QueryEditorComponent.inputParams.config.field = this.field;
|
|
@@ -4430,6 +4431,13 @@ class DbgetterComponent {
|
|
|
4430
4431
|
if (this.field.DataGetter.DataGetterValue.openedFields.find(x => x.QueryPropertyValue == '?') != null) {
|
|
4431
4432
|
// Il campo ha almeno un valore con "?"
|
|
4432
4433
|
this.haveQuestions = true;
|
|
4434
|
+
//console.log("CHECKING BACKUPS OPENED FIELDS....", this.backupQuestionFields);
|
|
4435
|
+
if (this.backupQuestionFields == null) {
|
|
4436
|
+
this.backupQuestionFields = new Array();
|
|
4437
|
+
this.field.DataGetter.DataGetterValue.openedFields.forEach((rqf) => {
|
|
4438
|
+
this.backupQuestionFields.push(rqf.PropertyName);
|
|
4439
|
+
});
|
|
4440
|
+
}
|
|
4433
4441
|
}
|
|
4434
4442
|
if (this.field.DataGetter.DataGetterValue.openedFields.find(x => x.QueryPropertyValue.indexOf('!') != -1) != null) {
|
|
4435
4443
|
// Il campo ha almeno un valore con "!nomerelazione"
|
|
@@ -4437,17 +4445,17 @@ class DbgetterComponent {
|
|
|
4437
4445
|
this.field.DataGetter.DataGetterValue.openedFields.filter(x => x.QueryPropertyValue.indexOf('!') != -1).forEach((fieldWithRelation) => {
|
|
4438
4446
|
var fieldRelated = fieldWithRelation.QueryPropertyValue.replace("!", "");
|
|
4439
4447
|
if (this.record[fieldRelated] == null) {
|
|
4440
|
-
console.log("this.record[fieldRelated] E' NULL", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
4448
|
+
//console.log("this.record[fieldRelated] E' NULL", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
4441
4449
|
this.relations.push({ field: fieldRelated, loaded: false, actualvalue: this.record[fieldRelated] });
|
|
4442
4450
|
this.checkRelations();
|
|
4443
4451
|
this.interval = setInterval(() => {
|
|
4444
|
-
console.log("this.record[fieldRelated] CHECK", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
4452
|
+
//console.log("this.record[fieldRelated] CHECK", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
4445
4453
|
var currentRelation = this.relations.find(x => x.field == fieldRelated);
|
|
4446
4454
|
if (currentRelation != null) {
|
|
4447
4455
|
// Gestione dei cambi di valore dei campi relazionati
|
|
4448
4456
|
// Il campo relazionato INIZIALMENTE NON E' NULL, e cambia valore in qualcosa che NON E' NULL
|
|
4449
4457
|
if (currentRelation.actualvalue != null && this.record[fieldRelated] != null && this.record[fieldRelated] != currentRelation.actualvalue) {
|
|
4450
|
-
console.log("this.record[fieldRelated] HA CAMBIATO VALORE!!", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
4458
|
+
//console.log("this.record[fieldRelated] HA CAMBIATO VALORE!!", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
4451
4459
|
currentRelation.actualvalue = this.record[fieldRelated];
|
|
4452
4460
|
currentRelation.loaded = true;
|
|
4453
4461
|
fieldWithRelation.QueryPropertyValue = this.record[fieldRelated];
|
|
@@ -4456,16 +4464,20 @@ class DbgetterComponent {
|
|
|
4456
4464
|
}
|
|
4457
4465
|
// Il campo relazionato INIZIALMENTE NON E' NULL, e cambia valore IN NULL
|
|
4458
4466
|
else if (currentRelation.actualvalue != null && this.record[fieldRelated] == null) {
|
|
4459
|
-
console.log("this.record[fieldRelated] E' TORNATO AD ESSERE NULL!! :(", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
4467
|
+
//console.log("this.record[fieldRelated] E' TORNATO AD ESSERE NULL!! :(", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
4460
4468
|
currentRelation.actualvalue = this.record[fieldRelated];
|
|
4461
4469
|
currentRelation.loaded = true;
|
|
4462
4470
|
fieldWithRelation.QueryPropertyValue = "!" + fieldRelated;
|
|
4463
4471
|
this.record[this.field.Name] = null;
|
|
4472
|
+
// Recupero Backup
|
|
4473
|
+
this.backupQuestionFields.forEach((bof) => {
|
|
4474
|
+
this.field.DataGetter.DataGetterValue.openedFields.find(x => x.PropertyName == bof).QueryPropertyValue = "?";
|
|
4475
|
+
});
|
|
4464
4476
|
this.reloadComponent();
|
|
4465
4477
|
}
|
|
4466
4478
|
// Il campo relazionato INIZIALMENTE E' NULL, e cambia valore
|
|
4467
4479
|
else if (currentRelation.actualvalue == null && this.record[fieldRelated] != null) {
|
|
4468
|
-
console.log("this.record[fieldRelated] NON E' PIU' NULL!! :)", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
4480
|
+
//console.log("this.record[fieldRelated] NON E' PIU' NULL!! :)", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
4469
4481
|
currentRelation.actualvalue = this.record[fieldRelated];
|
|
4470
4482
|
currentRelation.loaded = true;
|
|
4471
4483
|
fieldWithRelation.QueryPropertyValue = this.record[fieldRelated];
|
|
@@ -4473,10 +4485,10 @@ class DbgetterComponent {
|
|
|
4473
4485
|
}
|
|
4474
4486
|
this.checkRelations();
|
|
4475
4487
|
}
|
|
4476
|
-
},
|
|
4488
|
+
}, 200);
|
|
4477
4489
|
}
|
|
4478
4490
|
else {
|
|
4479
|
-
console.log("this.record[fieldRelated] NON E' NULL!! :)", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
4491
|
+
//console.log("this.record[fieldRelated] NON E' NULL!! :)", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);
|
|
4480
4492
|
fieldWithRelation.QueryPropertyValue = this.record[fieldRelated] != null ? this.record[fieldRelated] : '';
|
|
4481
4493
|
this.relations.push({ field: fieldRelated, loaded: true, actualvalue: this.record[fieldRelated] });
|
|
4482
4494
|
this.checkRelations();
|
|
@@ -4499,17 +4511,20 @@ class DbgetterComponent {
|
|
|
4499
4511
|
}
|
|
4500
4512
|
}
|
|
4501
4513
|
reloadComponent() {
|
|
4502
|
-
console.log("RELOAD COMPONENT CALLED", this.record, this.QueryEditorComponent.inputParams.config.record);
|
|
4514
|
+
//console.log("RELOAD COMPONENT CALLED", this.record, this.QueryEditorComponent.inputParams.config.record);
|
|
4503
4515
|
this.reload = false;
|
|
4504
4516
|
this.QueryEditorComponent.inputParams.config.record = this.record;
|
|
4505
4517
|
this.QueryEditorComponent.inputParams.config.field = this.field;
|
|
4506
|
-
setTimeout(() => {
|
|
4518
|
+
setTimeout(() => {
|
|
4519
|
+
this.reload = true;
|
|
4520
|
+
//console.log("RELOADED QUERYEDITOR");
|
|
4521
|
+
}, 3000);
|
|
4507
4522
|
}
|
|
4508
4523
|
checkRelations() {
|
|
4509
4524
|
this.relationsLoaded = this.relations.find(x => x.loaded) != null;
|
|
4510
4525
|
}
|
|
4511
4526
|
onExternalSQLResultOut(ev) {
|
|
4512
|
-
console.log("Risultato dell'elaborazione del query editor: onExternalSQLResultOut", ev);
|
|
4527
|
+
//console.log("Risultato dell'elaborazione del query editor: onExternalSQLResultOut", ev);
|
|
4513
4528
|
if (ev.Behaviours.indexOf("send-out") != -1) {
|
|
4514
4529
|
this.out.emit(ev);
|
|
4515
4530
|
}
|