@eqproject/eqp-dynamic-module 2.2.6 → 2.2.7
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/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +15 -7
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +15 -9
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +15 -7
- package/esm2020/lib/components/private/dynamic-module-field/dynamic-module-field.component.mjs +1 -1
- package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +1 -1
- package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +12 -10
- package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +17 -9
- package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +11 -9
- package/esm2020/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.mjs +12 -4
- package/esm2020/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.mjs +11 -3
- package/esm2020/lib/components/private/form-records/view-form-record/view-form-record.component.mjs +12 -88
- package/esm2020/lib/services/utilityHelper.services.mjs +6 -6
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +118 -144
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +118 -144
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +3 -1
- package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +3 -1
- package/lib/components/private/add-form-field/add-form-field.component.d.ts +3 -1
- package/lib/components/private/form-records/add-form-record/add-form-record.component.d.ts +3 -3
- package/lib/components/private/form-records/list-form-record/list-form-record.component.d.ts +3 -1
- package/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.d.ts +2 -2
- package/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.d.ts +3 -1
- package/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.d.ts +3 -1
- package/lib/components/private/form-records/view-form-record/view-form-record.component.d.ts +2 -2
- package/package.json +1 -1
package/esm2020/lib/components/private/form-records/view-form-record/view-form-record.component.mjs
CHANGED
|
@@ -12,7 +12,7 @@ export class ViewFormRecordComponent {
|
|
|
12
12
|
constructor(utilityService, domSanitizer) {
|
|
13
13
|
this.utilityService = utilityService;
|
|
14
14
|
this.domSanitizer = domSanitizer;
|
|
15
|
-
this.debugMode =
|
|
15
|
+
this.debugMode = false;
|
|
16
16
|
this.showBackButton = true;
|
|
17
17
|
this.outputString = "";
|
|
18
18
|
this.loader = false;
|
|
@@ -20,8 +20,13 @@ export class ViewFormRecordComponent {
|
|
|
20
20
|
this.FieldTypeEnum = FieldTypeEnum;
|
|
21
21
|
this.goBackEvent = new EventEmitter();
|
|
22
22
|
}
|
|
23
|
+
debugLog(message, element) {
|
|
24
|
+
if (this.debugMode) {
|
|
25
|
+
console.log(message, element);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
23
28
|
ngOnInit() {
|
|
24
|
-
|
|
29
|
+
this.debugLog('this.record', this.record);
|
|
25
30
|
if (typeof this.record === "string") {
|
|
26
31
|
// allora è un ID
|
|
27
32
|
this.getRecordByID();
|
|
@@ -104,96 +109,15 @@ export class ViewFormRecordComponent {
|
|
|
104
109
|
// STAMPO A SCHERMO
|
|
105
110
|
// this.loader = true;
|
|
106
111
|
}
|
|
107
|
-
// private getResponseValues(record: Record, form: Form ): Array<any> {
|
|
108
|
-
// let outputValuesArray: Array<any> = []; // array con i valori delle risposte
|
|
109
|
-
// //(<DynRecord>this.record).Values è la lista di oggetti {fieldName: valore}
|
|
110
|
-
// for (let fieldName in (record).Values) {
|
|
111
|
-
// try {
|
|
112
|
-
// // fieldName è il nome del campo
|
|
113
|
-
// // PREPARO VARIABILI VALORI CORRETTI
|
|
114
|
-
// let foundObject = form.Fields.find(
|
|
115
|
-
// (obj) => obj.Name === fieldName
|
|
116
|
-
// );
|
|
117
|
-
// this.debugLog("fieldName", fieldName);
|
|
118
|
-
// this.debugLog("foundObject", foundObject);
|
|
119
|
-
// // gestire caso fieldtype 8 [elenco generico]
|
|
120
|
-
// // fare un eval per popolare i valuePairs se è presente una formula
|
|
121
|
-
// // prendere la label corretta
|
|
122
|
-
// ////////////////////////////////////////////////////////////////////////////////
|
|
123
|
-
// if (foundObject.FieldType == FieldTypeEnum["Elenco generico"])
|
|
124
|
-
// {
|
|
125
|
-
// if (foundObject.Formula)
|
|
126
|
-
// {
|
|
127
|
-
// // aggiungo a valuepairs i valori calcolati
|
|
128
|
-
// // (<ListValueField>foundObject).ValuePairs = {};
|
|
129
|
-
// var temp = UtilityHelperService.EvaluateFieldFormula(
|
|
130
|
-
// foundObject.Formula,
|
|
131
|
-
// record,
|
|
132
|
-
// null
|
|
133
|
-
// );
|
|
134
|
-
// for (let key2 in temp) {
|
|
135
|
-
// if (UtilityHelperService.isNumeric(temp[key2]))
|
|
136
|
-
// {
|
|
137
|
-
// (<ListValueField>foundObject).ValuePairs[Number(key2)] = temp[key2];
|
|
138
|
-
// } else
|
|
139
|
-
// {
|
|
140
|
-
// (<ListValueField>foundObject).ValuePairs[key2] = temp[key2];
|
|
141
|
-
// }
|
|
142
|
-
// }
|
|
143
|
-
// this.debugLog("(record).Values[fieldName]", (record).Values[fieldName]);
|
|
144
|
-
// this.debugLog("(<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]]", (<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]]);
|
|
145
|
-
// outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]];
|
|
146
|
-
// }
|
|
147
|
-
// let inverted = {};
|
|
148
|
-
// for (let key in (<ListValueField>foundObject).ValuePairs)
|
|
149
|
-
// {
|
|
150
|
-
// inverted[(<ListValueField>foundObject).ValuePairs[key]] = key;
|
|
151
|
-
// }
|
|
152
|
-
// (<ListValueField>foundObject).ValuePairs = inverted;
|
|
153
|
-
// outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]];
|
|
154
|
-
// } else
|
|
155
|
-
// {
|
|
156
|
-
// this.debugLog("(record).Values[fieldName]", (record).Values[fieldName]);
|
|
157
|
-
// outputValuesArray[fieldName] = (record).Values[fieldName];
|
|
158
|
-
// }
|
|
159
|
-
// ////////////////////////////////////////////////////////////////////////////////
|
|
160
|
-
// } catch (e) {
|
|
161
|
-
// console.error(e);
|
|
162
|
-
// }
|
|
163
|
-
// }
|
|
164
|
-
// // cancello i valori indefiniti o nulli
|
|
165
|
-
// for(const chiave in outputValuesArray){
|
|
166
|
-
// if(outputValuesArray[chiave] == undefined || outputValuesArray[chiave] == null)
|
|
167
|
-
// outputValuesArray[chiave] = ''
|
|
168
|
-
// }
|
|
169
|
-
// return outputValuesArray;
|
|
170
|
-
// }
|
|
171
|
-
// private getResponseTemplate(form: Form): string {
|
|
172
|
-
// let template: string = "";
|
|
173
|
-
// // PREPARO O PRENDO LA STRUTTURA DA STAMPARE
|
|
174
|
-
// form.Fields.forEach((baseField: BaseField) => {
|
|
175
|
-
// template += '<span style="' + baseField.LabelstyleCSS + '">' + baseField.Description + ':</span> <span style="' + baseField.FieldstyleCSS + '"> ##' + baseField.Name + '##</span> \n <br> ';
|
|
176
|
-
// });
|
|
177
|
-
// // (attualmente non esiste il concetto di tempate di output)
|
|
178
|
-
// return template;
|
|
179
|
-
// }
|
|
180
|
-
// private replaceTemplatePlaceholdersWithValues(template: string, outputValuesArray: Array<any>, regex): string {
|
|
181
|
-
// return template.replace(regex, (match, group) => {
|
|
182
|
-
// return <string>outputValuesArray[group];
|
|
183
|
-
// });
|
|
184
|
-
// }
|
|
185
|
-
debugLog(message, item) {
|
|
186
|
-
if (this.debugMode) {
|
|
187
|
-
console.log(message, item);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
112
|
}
|
|
191
113
|
ViewFormRecordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ViewFormRecordComponent, deps: [{ token: i1.UtilityHelperService }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
192
|
-
ViewFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ViewFormRecordComponent, selector: "view-form-record", inputs: { endPointConfiguration: "endPointConfiguration", record: "record", showBackButton: "showBackButton" }, outputs: { goBackEvent: "goBackEvent" }, viewQueries: [{ propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"loader\">\r\n <div id=\"output-string\" [innerHTML]=\"outputString\"></div>\r\n <div class=\"row mt-2\" *ngIf=\"showBackButton\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button\r\n class=\"mr-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"goBack()\"\r\n >\r\n Indietro\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
114
|
+
ViewFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ViewFormRecordComponent, selector: "view-form-record", inputs: { debugMode: "debugMode", endPointConfiguration: "endPointConfiguration", record: "record", showBackButton: "showBackButton" }, outputs: { goBackEvent: "goBackEvent" }, viewQueries: [{ propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"loader\">\r\n <div id=\"output-string\" [innerHTML]=\"outputString\"></div>\r\n <div class=\"row mt-2\" *ngIf=\"showBackButton\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button\r\n class=\"mr-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"goBack()\"\r\n >\r\n Indietro\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
193
115
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ViewFormRecordComponent, decorators: [{
|
|
194
116
|
type: Component,
|
|
195
117
|
args: [{ selector: "view-form-record", template: "<div *ngIf=\"loader\">\r\n <div id=\"output-string\" [innerHTML]=\"outputString\"></div>\r\n <div class=\"row mt-2\" *ngIf=\"showBackButton\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button\r\n class=\"mr-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"goBack()\"\r\n >\r\n Indietro\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
|
|
196
|
-
}], ctorParameters: function () { return [{ type: i1.UtilityHelperService }, { type: i2.DomSanitizer }]; }, propDecorators: {
|
|
118
|
+
}], ctorParameters: function () { return [{ type: i1.UtilityHelperService }, { type: i2.DomSanitizer }]; }, propDecorators: { debugMode: [{
|
|
119
|
+
type: Input
|
|
120
|
+
}], endPointConfiguration: [{
|
|
197
121
|
type: Input
|
|
198
122
|
}], record: [{
|
|
199
123
|
type: Input
|
|
@@ -205,4 +129,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
205
129
|
type: ViewChildren,
|
|
206
130
|
args: ["fieldTemplate"]
|
|
207
131
|
}] } });
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL3ZpZXctZm9ybS1yZWNvcmQvdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL3ZpZXctZm9ybS1yZWNvcmQvdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFOUUsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGlDQUFpQyxDQUFDO0FBR3BFLE9BQU8sRUFFTCxhQUFhLEdBQ2QsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7O0FBRzFELDJHQUEyRztBQU8zRyxNQUFNLE9BQU8sdUJBQXVCO0lBa0JsQyxZQUNTLGNBQW9DLEVBQ3BDLFlBQTBCO1FBRDFCLG1CQUFjLEdBQWQsY0FBYyxDQUFzQjtRQUNwQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQW5CbkMsY0FBUyxHQUFHLElBQUksQ0FBQztRQUlSLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBRS9CLGlCQUFZLEdBQWMsRUFBRSxDQUFDO1FBRTdCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsMkRBQTJEO1FBQzNELGtCQUFhLEdBQUcsYUFBYSxDQUFDO1FBRXBCLGdCQUFXLEdBQXVCLElBQUksWUFBWSxFQUFR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WTtJQUNaLCtEQUErRDtJQUMvRCwrR0FBK0c7SUFDL0csZ0JBQWdCO0lBQ2hCLFVBQVU7SUFDVixtRkFBbUY7SUFDbkYscUVBQXFFO0lBQ3JFLFVBQVU7SUFDVix5RkFBeUY7SUFDekYsb0JBQW9CO0lBQ3BCLDBCQUEwQjtJQUMxQixRQUFRO0lBQ1IsTUFBTTtJQUNOLDRDQUE0QztJQUM1Qyw0Q0FBNEM7SUFDNUMsc0ZBQXNGO0lBQ3RGLHFDQUFxQztJQUNyQyxNQUFNO0lBQ04sOEJBQThCO0lBQzlCLElBQUk7SUFFSixvREFBb0Q7SUFDcEQsK0JBQStCO0lBQy9CLGlEQUFpRDtJQUNqRCxvREFBb0Q7SUFDcEQsbU1BQW1NO0lBQ25NLFFBQVE7SUFDUixpRUFBaUU7SUFDakUscUJBQXFCO0lBQ3JCLElBQUk7SUFFSixrSEFBa0g7SUFDbEgsdURBQXVEO0lBQ3ZELCtDQUErQztJQUMvQyxRQUFRO0lBQ1IsSUFBSTtJQUVKLFFBQVEsQ0FBQyxPQUFlLEVBQUUsSUFBUztRQUNqQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDOztxSEE5TVUsdUJBQXVCO3lHQUF2Qix1QkFBdUIsb1RDOUJwQyx3YkFnQkE7NEZEY2EsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLGtCQUFrQjtzSUFPbkIscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQVFJLFdBQVc7c0JBQXBCLE1BQU07Z0JBR1AsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZvcm0sIEZvcm1TY2FsYXJUeXBlRW51bSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5SZWNvcmQsIFJlY29yZCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUZpZWxkRml4Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtcclxuICBFbmRQb2ludENvbmZpZ3VyYXRpb24sXHJcbiAgUGFyYW1UeXBlRW51bSxcclxufSBmcm9tIFwiLi8uLi8uLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSBcIi4vLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuLy8gaW1wb3J0IHsgRHluYW1pY01vZHVsZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZHluYW1pYy1tb2R1bGUtZmllbGQvZHluYW1pYy1tb2R1bGUtZmllbGQuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcInZpZXctZm9ybS1yZWNvcmRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3ZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZXdGb3JtUmVjb3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBkZWJ1Z01vZGUgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSByZWNvcmQ6IHN0cmluZyB8IER5blJlY29yZDtcclxuICBASW5wdXQoKSBzaG93QmFja0J1dHRvbiA9IHRydWU7XHJcblxyXG4gIG91dHB1dFN0cmluZzogU2FmZUh0bWwgID0gXCJcIjtcclxuICBmb3JtOiBGb3JtO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8vIHBlciBjb250cm9sbGFyZSBjaGUgaWwgY2FtcG8gbm9uIHNpYSB1bmEgc2NlbHRhIG11bHRpcGxhXHJcbiAgRmllbGRUeXBlRW51bSA9IEZpZWxkVHlwZUVudW07XHJcblxyXG4gIEBPdXRwdXQoKSBnb0JhY2tFdmVudDogRXZlbnRFbWl0dGVyPG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcjxudWxsPigpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFwiZmllbGRUZW1wbGF0ZVwiKVxyXG4gIGZpZWxkVGVtcGxhdGU6IFF1ZXJ5TGlzdDxEeW5hbWljTW9kdWxlRmllbGRGaXhDb21wb25lbnQ+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ3RoaXMucmVjb3JkJywgdGhpcy5yZWNvcmQpXHJcbiAgICBpZiAodHlwZW9mIHRoaXMucmVjb3JkID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIC8vIGFsbG9yYSDDqCB1biBJRFxyXG4gICAgICB0aGlzLmdldFJlY29yZEJ5SUQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlsIHJlY29yZCB2aWVuZSBwYXNzYXRvIGNvbWUgdGFsZVxyXG4gICAgICAvLyAoPFJlY29yZD50aGlzLnJlY29yZCkuRW50SUQgPSBcIjNcIjtcclxuICAgICAgLy8gKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLlZlcnNpb247XHJcbiAgICAgIC8vIHRoaXMuZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uKCk7XHJcbiAgICAgIHRoaXMuY3JlYXRlT3V0cHV0KClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBpIGRhdGkgaW5zZXJpdGkgZGFsbCd1dGVudGUgdW5hIHZvbHRhIGNvbmNsdXNhIGxhIGNvbXBpbGF6aW9uZSBkZWxsYSBmb3JtLlxyXG4gICAqL1xyXG4gIGdvQmFjaygpIHtcclxuICAgIHRoaXMuZ29CYWNrRXZlbnQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2kgZW50cm8gc29sbyBzZSDDqCBzdGF0byBwYXNzYXRvIGlsIHBhcmFtZXRybyBcInJlY29yZFwiIGNvbWUgc3RyaW5nYVxyXG4gIGdldFJlY29yZEJ5SUQoKSB7XHJcbiAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICB2YXIgZHluYW1pY1JlY29yZFBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMucmVjb3JkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgKHJlczogRHluUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQgPSBuZXcgRHluUmVjb3JkKCk7XHJcblxyXG4gICAgICAgICg8UmVjb3JkPnRoaXMucmVjb3JkKSA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLklEID0gcmVzLklEO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLkVudElEID0gcmVzLkVudElEO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLnVzZXJJRCA9IHJlcy51c2VySUQ7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuVmVyc2lvbiA9IHJlcy5WZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLlZhbHVlcyA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLkhUTUxyZWFkYWJsZVZhbHVlcyA9IHJlcy5IVE1McmVhZGFibGVWYWx1ZXM7XHJcbiAgICAgICAgLy8gdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRTtcclxuICAgICAgICAvLyB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZyhcInJlY29yZFwiLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVPdXRwdXQoKVxyXG4gICAgICAgIC8vIHRoaXMuZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIGdldEZvcm1CeUlEYW5kVmVyc2lvbigpIHtcclxuICAgIC8vIHByZXBhcm8gbGEgdmVyc2lvbmUgY29ycmV0dGEgZGVsIGZvcm1cclxuICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogKDxEeW5SZWNvcmQ+dGhpcy5yZWNvcmQpLkVudElELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIlZlcnNpb25cIixcclxuICAgICAgICBQYXJhbVZhbHVlOiAoPER5blJlY29yZD50aGlzLnJlY29yZCkuVmVyc2lvbixcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREFuZFZlcnNpb25FbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICB0aGlzLmRlYnVnTG9nKFwiZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlT3V0cHV0KCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBpbCBGb3JtR3JvdXAgY2hlIHJhcHByZXNlbnRhIGxhIGZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVPdXRwdXQoKSB7XHJcbiAgICB0aGlzLm91dHB1dFN0cmluZyA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKCg8RHluUmVjb3JkPnRoaXMucmVjb3JkKS5IVE1McmVhZGFibGVWYWx1ZXMpO1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgcmV0dXJuXHJcbiAgICAvLyBsZXQgb3V0cHV0VmFsdWVzQXJyYXk6IEFycmF5PGFueT4gPSB0aGlzLmdldFJlc3BvbnNlVmFsdWVzKDxEeW5SZWNvcmQ+dGhpcy5yZWNvcmQsIHRoaXMuZm9ybSk7XHJcbiAgICAvLyB0aGlzLmRlYnVnTG9nKFwib3V0cHV0VmFsdWVzQXJyYXlcIiwgb3V0cHV0VmFsdWVzQXJyYXkpO1xyXG4gICAgXHJcbiAgICAvLyBsZXQgdGVtcGxhdGU6IHN0cmluZyA9IHRoaXMuZ2V0UmVzcG9uc2VUZW1wbGF0ZSh0aGlzLmZvcm0pOyAvLyBvZ2dldHRvIG5lbCBxdWFsZSB2aWVuZSBjb3N0cnVpdG8gaWwgdGVtcGxhdGUgbyBjaGUgcHJlbmRlIGlsIHZhbG9yZSBkYSB1biB0ZW1wbGF0ZSBlc3Rlcm5vXHJcbiAgICAvLyB0aGlzLmRlYnVnTG9nKFwidGVtcGxhdGVcIiwgdGVtcGxhdGUpO1xyXG5cclxuICAgIC8vIGNvbnN0IHJlZ2V4ID0gLyMjKFtcXHddKykjIy9nO1xyXG4gICAgLy8gY29uc3Qgb3V0cHV0U3RyaW5nID0gdGhpcy5yZXBsYWNlVGVtcGxhdGVQbGFjZWhvbGRlcnNXaXRoVmFsdWVzKHRlbXBsYXRlLCBvdXRwdXRWYWx1ZXNBcnJheSwgcmVnZXgpOyAvLyBvZ2dldHRvIGNoZSBjb250ZXJyw6AgbCdvdXRwdXQgZWxhYm9yYXRvICAgIFxyXG4gICAgLy8gdGhpcy5vdXRwdXRTdHJpbmcgPSB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChvdXRwdXRTdHJpbmcpO1xyXG4gICAgLy8gdGhpcy5kZWJ1Z0xvZyhcIm91dHB1dFN0cmluZ1wiLCB0aGlzLm91dHB1dFN0cmluZyk7XHJcblxyXG4gICAgLy8gU1RBTVBPIEEgU0NIRVJNT1xyXG4gICAgLy8gdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBnZXRSZXNwb25zZVZhbHVlcyhyZWNvcmQ6IFJlY29yZCwgZm9ybTogRm9ybSApOiBBcnJheTxhbnk+IHtcclxuICAvLyAgIGxldCBvdXRwdXRWYWx1ZXNBcnJheTogQXJyYXk8YW55PiA9IFtdOyAvLyBhcnJheSBjb24gaSB2YWxvcmkgZGVsbGUgcmlzcG9zdGVcclxuICAvLyAgIC8vKDxEeW5SZWNvcmQ+dGhpcy5yZWNvcmQpLlZhbHVlcyDDqCBsYSBsaXN0YSBkaSBvZ2dldHRpIHtmaWVsZE5hbWU6IHZhbG9yZX1cclxuICAvLyAgIGZvciAobGV0IGZpZWxkTmFtZSBpbiAocmVjb3JkKS5WYWx1ZXMpIHtcclxuICAvLyAgICAgdHJ5IHtcclxuICAvLyAgICAgICAvLyBmaWVsZE5hbWUgw6ggaWwgbm9tZSBkZWwgY2FtcG9cclxuICAvLyAgICAgICAvLyBQUkVQQVJPIFZBUklBQklMSSBWQUxPUkkgQ09SUkVUVElcclxuICAvLyAgICAgICBsZXQgZm91bmRPYmplY3QgPSBmb3JtLkZpZWxkcy5maW5kKFxyXG4gIC8vICAgICAgICAgKG9iaikgPT4gb2JqLk5hbWUgPT09IGZpZWxkTmFtZVxyXG4gIC8vICAgICAgICk7XHJcbiAgLy8gICAgICAgdGhpcy5kZWJ1Z0xvZyhcImZpZWxkTmFtZVwiLCBmaWVsZE5hbWUpO1xyXG4gIC8vICAgICAgIHRoaXMuZGVidWdMb2coXCJmb3VuZE9iamVjdFwiLCBmb3VuZE9iamVjdCk7XHJcbiAgLy8gICAgICAgLy8gZ2VzdGlyZSBjYXNvIGZpZWxkdHlwZSA4IFtlbGVuY28gZ2VuZXJpY29dXHJcbiAgLy8gICAgICAgLy8gZmFyZSB1biBldmFsIHBlciBwb3BvbGFyZSBpIHZhbHVlUGFpcnMgc2Ugw6ggcHJlc2VudGUgdW5hIGZvcm11bGFcclxuICAvLyAgICAgICAvLyBwcmVuZGVyZSBsYSBsYWJlbCBjb3JyZXR0YVxyXG4gIC8vICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgLy8gICAgICAgaWYgKGZvdW5kT2JqZWN0LkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdKSBcclxuICAvLyAgICAgICB7XHJcbiAgLy8gICAgICAgICBpZiAoZm91bmRPYmplY3QuRm9ybXVsYSkgXHJcbiAgLy8gICAgICAgICB7XHJcbiAgLy8gICAgICAgICAgIC8vIGFnZ2l1bmdvIGEgdmFsdWVwYWlycyBpIHZhbG9yaSBjYWxjb2xhdGlcclxuICAvLyAgICAgICAgICAgLy8gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlycyA9IHt9O1xyXG4gIC8vICAgICAgICAgICB2YXIgdGVtcCA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKFxyXG4gIC8vICAgICAgICAgICAgIGZvdW5kT2JqZWN0LkZvcm11bGEsXHJcbiAgLy8gICAgICAgICAgICAgcmVjb3JkLFxyXG4gIC8vICAgICAgICAgICAgIG51bGxcclxuICAvLyAgICAgICAgICAgKTtcclxuICAvLyAgICAgICAgICAgZm9yIChsZXQga2V5MiBpbiB0ZW1wKSB7XHJcbiAgLy8gICAgICAgICAgICAgaWYgKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmlzTnVtZXJpYyh0ZW1wW2tleTJdKSkgXHJcbiAgLy8gICAgICAgICAgICAge1xyXG4gIC8vICAgICAgICAgICAgICAgKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tOdW1iZXIoa2V5MildID0gdGVtcFtrZXkyXTtcclxuICAvLyAgICAgICAgICAgICB9IGVsc2UgXHJcbiAgLy8gICAgICAgICAgICAge1xyXG4gIC8vICAgICAgICAgICAgICAgKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1trZXkyXSA9IHRlbXBba2V5Ml07XHJcbiAgLy8gICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgIHRoaXMuZGVidWdMb2coXCIocmVjb3JkKS5WYWx1ZXNbZmllbGROYW1lXVwiLCAocmVjb3JkKS5WYWx1ZXNbZmllbGROYW1lXSk7XHJcbiAgLy8gICAgICAgICAgIHRoaXMuZGVidWdMb2coXCIoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzWyhyZWNvcmQpLlZhbHVlc1tmaWVsZE5hbWVdXVwiLCAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzWyhyZWNvcmQpLlZhbHVlc1tmaWVsZE5hbWVdXSk7XHJcbiAgLy8gICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkTmFtZV0gPSAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzWyhyZWNvcmQpLlZhbHVlc1tmaWVsZE5hbWVdXTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgIGxldCBpbnZlcnRlZCA9IHt9O1xyXG4gIC8vICAgICAgICAgZm9yIChsZXQga2V5IGluICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMpIFxyXG4gIC8vICAgICAgICAgeyBcclxuICAvLyAgICAgICAgICAgaW52ZXJ0ZWRbKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1trZXldXSA9IGtleTsgXHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgICAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzID0gaW52ZXJ0ZWQ7XHJcbiAgLy8gICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZE5hbWVdID0gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1socmVjb3JkKS5WYWx1ZXNbZmllbGROYW1lXV07XHJcbiAgLy8gICAgICAgfSBlbHNlIFxyXG4gIC8vICAgICAgIHtcclxuICAvLyAgICAgICAgIHRoaXMuZGVidWdMb2coXCIocmVjb3JkKS5WYWx1ZXNbZmllbGROYW1lXVwiLCAocmVjb3JkKS5WYWx1ZXNbZmllbGROYW1lXSk7XHJcbiAgLy8gICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZE5hbWVdID0gKHJlY29yZCkuVmFsdWVzW2ZpZWxkTmFtZV07XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgLy8gICAgIH0gY2F0Y2ggKGUpIHtcclxuICAvLyAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gICAvLyBjYW5jZWxsbyBpIHZhbG9yaSBpbmRlZmluaXRpIG8gbnVsbGlcclxuICAvLyAgIGZvcihjb25zdCBjaGlhdmUgaW4gb3V0cHV0VmFsdWVzQXJyYXkpe1xyXG4gIC8vICAgICBpZihvdXRwdXRWYWx1ZXNBcnJheVtjaGlhdmVdID09IHVuZGVmaW5lZCB8fCBvdXRwdXRWYWx1ZXNBcnJheVtjaGlhdmVdID09IG51bGwpXHJcbiAgLy8gICAgIG91dHB1dFZhbHVlc0FycmF5W2NoaWF2ZV0gPSAnJ1xyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIG91dHB1dFZhbHVlc0FycmF5O1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBnZXRSZXNwb25zZVRlbXBsYXRlKGZvcm06IEZvcm0pOiBzdHJpbmcge1xyXG4gIC8vICAgbGV0IHRlbXBsYXRlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIC8vICAgLy8gUFJFUEFSTyBPIFBSRU5ETyBMQSBTVFJVVFRVUkEgREEgU1RBTVBBUkVcclxuICAvLyAgIGZvcm0uRmllbGRzLmZvckVhY2goKGJhc2VGaWVsZDogQmFzZUZpZWxkKSA9PiB7XHJcbiAgLy8gICAgIHRlbXBsYXRlICs9ICc8c3BhbiBzdHlsZT1cIicgKyBiYXNlRmllbGQuTGFiZWxzdHlsZUNTUyArICdcIj4nICsgYmFzZUZpZWxkLkRlc2NyaXB0aW9uICsgJzo8L3NwYW4+IDxzcGFuIHN0eWxlPVwiJyArIGJhc2VGaWVsZC5GaWVsZHN0eWxlQ1NTICsgJ1wiPiAjIycgKyBiYXNlRmllbGQuTmFtZSArICcjIzwvc3Bhbj4gXFxuIDxicj4gJztcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgLy8gKGF0dHVhbG1lbnRlIG5vbiBlc2lzdGUgaWwgY29uY2V0dG8gZGkgdGVtcGF0ZSBkaSBvdXRwdXQpXHJcbiAgLy8gICByZXR1cm4gdGVtcGxhdGU7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBwcml2YXRlIHJlcGxhY2VUZW1wbGF0ZVBsYWNlaG9sZGVyc1dpdGhWYWx1ZXModGVtcGxhdGU6IHN0cmluZywgb3V0cHV0VmFsdWVzQXJyYXk6IEFycmF5PGFueT4sIHJlZ2V4KTogc3RyaW5nIHtcclxuICAvLyAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKHJlZ2V4LCAobWF0Y2gsIGdyb3VwKSA9PiB7XHJcbiAgLy8gICAgIHJldHVybiA8c3RyaW5nPm91dHB1dFZhbHVlc0FycmF5W2dyb3VwXTtcclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgZGVidWdMb2cobWVzc2FnZTogc3RyaW5nLCBpdGVtOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRlYnVnTW9kZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlLCBpdGVtKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImxvYWRlclwiPlxyXG4gIDxkaXYgaWQ9XCJvdXRwdXQtc3RyaW5nXCIgW2lubmVySFRNTF09XCJvdXRwdXRTdHJpbmdcIj48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwicm93IG10LTJcIiAqbmdJZj1cInNob3dCYWNrQnV0dG9uXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIHRleHQtcmlnaHRcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwibXItMlwiXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJnb0JhY2soKVwiXHJcbiAgICAgID5cclxuICAgICAgICBJbmRpZXRyb1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL3ZpZXctZm9ybS1yZWNvcmQvdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL3ZpZXctZm9ybS1yZWNvcmQvdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFOUUsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGlDQUFpQyxDQUFDO0FBR3BFLE9BQU8sRUFFTCxhQUFhLEdBQ2QsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7O0FBRzFELDJHQUEyRztBQU8zRyxNQUFNLE9BQU8sdUJBQXVCO0lBd0JsQyxZQUNTLGNBQW9DLEVBQ3BDLFlBQTBCO1FBRDFCLG1CQUFjLEdBQWQsY0FBYyxDQUFzQjtRQUNwQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQXhCMUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQVMzQixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUUvQixpQkFBWSxHQUFjLEVBQUUsQ0FBQztRQUU3QixXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLDJEQUEyRDtRQUMzRCxrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQUVwQixnQkFBVyxHQUF1QixJQUFJLFlBQVksRUFB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QUFTLEVBQUUsRUFBRTtZQUNaLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBYSxJQUFJLENBQUMsTUFBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0csSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTTtRQUNOLGlHQUFpRztRQUNqRyx5REFBeUQ7UUFFekQsNkpBQTZKO1FBQzdKLHVDQUF1QztRQUV2QyxnQ0FBZ0M7UUFDaEMsc0pBQXNKO1FBQ3RKLCtFQUErRTtRQUMvRSxvREFBb0Q7UUFFcEQsbUJBQW1CO1FBQ25CLHNCQUFzQjtJQUN4QixDQUFDOztxSEE3SFUsdUJBQXVCO3lHQUF2Qix1QkFBdUIsNFVDOUJwQyx3YkFnQkE7NEZEY2EsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLGtCQUFrQjtzSUFNbkIsU0FBUztzQkFBakIsS0FBSztnQkFPRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBUUksV0FBVztzQkFBcEIsTUFBTTtnQkFHUCxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgQmFzZUZpZWxkLCBGaWVsZFR5cGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRm9ybSwgRm9ybVNjYWxhclR5cGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWxcIjtcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlRmllbGRGaXhDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vZHluYW1pYy1tb2R1bGUtZmllbGQtZml4L2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge1xyXG4gIEVuZFBvaW50Q29uZmlndXJhdGlvbixcclxuICBQYXJhbVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLy4uLy4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgTGlzdFZhbHVlRmllbGQgfSBmcm9tIFwiLi8uLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG4vLyBpbXBvcnQgeyBEeW5hbWljTW9kdWxlRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9keW5hbWljLW1vZHVsZS1maWVsZC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwidmlldy1mb3JtLXJlY29yZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi92aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmlld0Zvcm1SZWNvcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBkZWJ1Z01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkZWJ1Z0xvZyhtZXNzYWdlOiBzdHJpbmcsIGVsZW1lbnQ/OiBhbnkpe1xyXG4gICAgaWYodGhpcy5kZWJ1Z01vZGUpe1xyXG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlLCBlbGVtZW50KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgcmVjb3JkOiBzdHJpbmcgfCBEeW5SZWNvcmQ7XHJcbiAgQElucHV0KCkgc2hvd0JhY2tCdXR0b24gPSB0cnVlO1xyXG5cclxuICBvdXRwdXRTdHJpbmc6IFNhZmVIdG1sICA9IFwiXCI7XHJcbiAgZm9ybTogRm9ybTtcclxuICBsb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvLyBwZXIgY29udHJvbGxhcmUgY2hlIGlsIGNhbXBvIG5vbiBzaWEgdW5hIHNjZWx0YSBtdWx0aXBsYVxyXG4gIEZpZWxkVHlwZUVudW0gPSBGaWVsZFR5cGVFbnVtO1xyXG5cclxuICBAT3V0cHV0KCkgZ29CYWNrRXZlbnQ6IEV2ZW50RW1pdHRlcjxudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVsbD4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihcImZpZWxkVGVtcGxhdGVcIilcclxuICBmaWVsZFRlbXBsYXRlOiBRdWVyeUxpc3Q8RHluYW1pY01vZHVsZUZpZWxkRml4Q29tcG9uZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVidWdMb2coJ3RoaXMucmVjb3JkJywgdGhpcy5yZWNvcmQpXHJcbiAgICBpZiAodHlwZW9mIHRoaXMucmVjb3JkID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIC8vIGFsbG9yYSDDqCB1biBJRFxyXG4gICAgICB0aGlzLmdldFJlY29yZEJ5SUQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlsIHJlY29yZCB2aWVuZSBwYXNzYXRvIGNvbWUgdGFsZVxyXG4gICAgICAvLyAoPFJlY29yZD50aGlzLnJlY29yZCkuRW50SUQgPSBcIjNcIjtcclxuICAgICAgLy8gKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLlZlcnNpb247XHJcbiAgICAgIC8vIHRoaXMuZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uKCk7XHJcbiAgICAgIHRoaXMuY3JlYXRlT3V0cHV0KClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBpIGRhdGkgaW5zZXJpdGkgZGFsbCd1dGVudGUgdW5hIHZvbHRhIGNvbmNsdXNhIGxhIGNvbXBpbGF6aW9uZSBkZWxsYSBmb3JtLlxyXG4gICAqL1xyXG4gIGdvQmFjaygpIHtcclxuICAgIHRoaXMuZ29CYWNrRXZlbnQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2kgZW50cm8gc29sbyBzZSDDqCBzdGF0byBwYXNzYXRvIGlsIHBhcmFtZXRybyBcInJlY29yZFwiIGNvbWUgc3RyaW5nYVxyXG4gIGdldFJlY29yZEJ5SUQoKSB7XHJcbiAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICB2YXIgZHluYW1pY1JlY29yZFBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMucmVjb3JkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgKHJlczogRHluUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQgPSBuZXcgRHluUmVjb3JkKCk7XHJcblxyXG4gICAgICAgICg8UmVjb3JkPnRoaXMucmVjb3JkKSA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLklEID0gcmVzLklEO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLkVudElEID0gcmVzLkVudElEO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLnVzZXJJRCA9IHJlcy51c2VySUQ7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuVmVyc2lvbiA9IHJlcy5WZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLlZhbHVlcyA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLkhUTUxyZWFkYWJsZVZhbHVlcyA9IHJlcy5IVE1McmVhZGFibGVWYWx1ZXM7XHJcbiAgICAgICAgLy8gdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRTtcclxuICAgICAgICAvLyB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZyhcInJlY29yZFwiLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVPdXRwdXQoKVxyXG4gICAgICAgIC8vIHRoaXMuZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIGdldEZvcm1CeUlEYW5kVmVyc2lvbigpIHtcclxuICAgIC8vIHByZXBhcm8gbGEgdmVyc2lvbmUgY29ycmV0dGEgZGVsIGZvcm1cclxuICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogKDxEeW5SZWNvcmQ+dGhpcy5yZWNvcmQpLkVudElELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIlZlcnNpb25cIixcclxuICAgICAgICBQYXJhbVZhbHVlOiAoPER5blJlY29yZD50aGlzLnJlY29yZCkuVmVyc2lvbixcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREFuZFZlcnNpb25FbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICB0aGlzLmRlYnVnTG9nKFwiZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlT3V0cHV0KCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBpbCBGb3JtR3JvdXAgY2hlIHJhcHByZXNlbnRhIGxhIGZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVPdXRwdXQoKSB7XHJcbiAgICB0aGlzLm91dHB1dFN0cmluZyA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKCg8RHluUmVjb3JkPnRoaXMucmVjb3JkKS5IVE1McmVhZGFibGVWYWx1ZXMpO1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgcmV0dXJuXHJcbiAgICAvLyBsZXQgb3V0cHV0VmFsdWVzQXJyYXk6IEFycmF5PGFueT4gPSB0aGlzLmdldFJlc3BvbnNlVmFsdWVzKDxEeW5SZWNvcmQ+dGhpcy5yZWNvcmQsIHRoaXMuZm9ybSk7XHJcbiAgICAvLyB0aGlzLmRlYnVnTG9nKFwib3V0cHV0VmFsdWVzQXJyYXlcIiwgb3V0cHV0VmFsdWVzQXJyYXkpO1xyXG4gICAgXHJcbiAgICAvLyBsZXQgdGVtcGxhdGU6IHN0cmluZyA9IHRoaXMuZ2V0UmVzcG9uc2VUZW1wbGF0ZSh0aGlzLmZvcm0pOyAvLyBvZ2dldHRvIG5lbCBxdWFsZSB2aWVuZSBjb3N0cnVpdG8gaWwgdGVtcGxhdGUgbyBjaGUgcHJlbmRlIGlsIHZhbG9yZSBkYSB1biB0ZW1wbGF0ZSBlc3Rlcm5vXHJcbiAgICAvLyB0aGlzLmRlYnVnTG9nKFwidGVtcGxhdGVcIiwgdGVtcGxhdGUpO1xyXG5cclxuICAgIC8vIGNvbnN0IHJlZ2V4ID0gLyMjKFtcXHddKykjIy9nO1xyXG4gICAgLy8gY29uc3Qgb3V0cHV0U3RyaW5nID0gdGhpcy5yZXBsYWNlVGVtcGxhdGVQbGFjZWhvbGRlcnNXaXRoVmFsdWVzKHRlbXBsYXRlLCBvdXRwdXRWYWx1ZXNBcnJheSwgcmVnZXgpOyAvLyBvZ2dldHRvIGNoZSBjb250ZXJyw6AgbCdvdXRwdXQgZWxhYm9yYXRvICAgIFxyXG4gICAgLy8gdGhpcy5vdXRwdXRTdHJpbmcgPSB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChvdXRwdXRTdHJpbmcpO1xyXG4gICAgLy8gdGhpcy5kZWJ1Z0xvZyhcIm91dHB1dFN0cmluZ1wiLCB0aGlzLm91dHB1dFN0cmluZyk7XHJcblxyXG4gICAgLy8gU1RBTVBPIEEgU0NIRVJNT1xyXG4gICAgLy8gdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBnZXRSZXNwb25zZVZhbHVlcyhyZWNvcmQ6IFJlY29yZCwgZm9ybTogRm9ybSApOiBBcnJheTxhbnk+IHtcclxuICAvLyAgIGxldCBvdXRwdXRWYWx1ZXNBcnJheTogQXJyYXk8YW55PiA9IFtdOyAvLyBhcnJheSBjb24gaSB2YWxvcmkgZGVsbGUgcmlzcG9zdGVcclxuICAvLyAgIC8vKDxEeW5SZWNvcmQ+dGhpcy5yZWNvcmQpLlZhbHVlcyDDqCBsYSBsaXN0YSBkaSBvZ2dldHRpIHtmaWVsZE5hbWU6IHZhbG9yZX1cclxuICAvLyAgIGZvciAobGV0IGZpZWxkTmFtZSBpbiAocmVjb3JkKS5WYWx1ZXMpIHtcclxuICAvLyAgICAgdHJ5IHtcclxuICAvLyAgICAgICAvLyBmaWVsZE5hbWUgw6ggaWwgbm9tZSBkZWwgY2FtcG9cclxuICAvLyAgICAgICAvLyBQUkVQQVJPIFZBUklBQklMSSBWQUxPUkkgQ09SUkVUVElcclxuICAvLyAgICAgICBsZXQgZm91bmRPYmplY3QgPSBmb3JtLkZpZWxkcy5maW5kKFxyXG4gIC8vICAgICAgICAgKG9iaikgPT4gb2JqLk5hbWUgPT09IGZpZWxkTmFtZVxyXG4gIC8vICAgICAgICk7XHJcbiAgLy8gICAgICAgdGhpcy5kZWJ1Z0xvZyhcImZpZWxkTmFtZVwiLCBmaWVsZE5hbWUpO1xyXG4gIC8vICAgICAgIHRoaXMuZGVidWdMb2coXCJmb3VuZE9iamVjdFwiLCBmb3VuZE9iamVjdCk7XHJcbiAgLy8gICAgICAgLy8gZ2VzdGlyZSBjYXNvIGZpZWxkdHlwZSA4IFtlbGVuY28gZ2VuZXJpY29dXHJcbiAgLy8gICAgICAgLy8gZmFyZSB1biBldmFsIHBlciBwb3BvbGFyZSBpIHZhbHVlUGFpcnMgc2Ugw6ggcHJlc2VudGUgdW5hIGZvcm11bGFcclxuICAvLyAgICAgICAvLyBwcmVuZGVyZSBsYSBsYWJlbCBjb3JyZXR0YVxyXG4gIC8vICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgLy8gICAgICAgaWYgKGZvdW5kT2JqZWN0LkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdKSBcclxuICAvLyAgICAgICB7XHJcbiAgLy8gICAgICAgICBpZiAoZm91bmRPYmplY3QuRm9ybXVsYSkgXHJcbiAgLy8gICAgICAgICB7XHJcbiAgLy8gICAgICAgICAgIC8vIGFnZ2l1bmdvIGEgdmFsdWVwYWlycyBpIHZhbG9yaSBjYWxjb2xhdGlcclxuICAvLyAgICAgICAgICAgLy8gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlycyA9IHt9O1xyXG4gIC8vICAgICAgICAgICB2YXIgdGVtcCA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKFxyXG4gIC8vICAgICAgICAgICAgIGZvdW5kT2JqZWN0LkZvcm11bGEsXHJcbiAgLy8gICAgICAgICAgICAgcmVjb3JkLFxyXG4gIC8vICAgICAgICAgICAgIG51bGxcclxuICAvLyAgICAgICAgICAgKTtcclxuICAvLyAgICAgICAgICAgZm9yIChsZXQga2V5MiBpbiB0ZW1wKSB7XHJcbiAgLy8gICAgICAgICAgICAgaWYgKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmlzTnVtZXJpYyh0ZW1wW2tleTJdKSkgXHJcbiAgLy8gICAgICAgICAgICAge1xyXG4gIC8vICAgICAgICAgICAgICAgKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tOdW1iZXIoa2V5MildID0gdGVtcFtrZXkyXTtcclxuICAvLyAgICAgICAgICAgICB9IGVsc2UgXHJcbiAgLy8gICAgICAgICAgICAge1xyXG4gIC8vICAgICAgICAgICAgICAgKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1trZXkyXSA9IHRlbXBba2V5Ml07XHJcbiAgLy8gICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgIHRoaXMuZGVidWdMb2coXCIocmVjb3JkKS5WYWx1ZXNbZmllbGROYW1lXVwiLCAocmVjb3JkKS5WYWx1ZXNbZmllbGROYW1lXSk7XHJcbiAgLy8gICAgICAgICAgIHRoaXMuZGVidWdMb2coXCIoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzWyhyZWNvcmQpLlZhbHVlc1tmaWVsZE5hbWVdXVwiLCAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzWyhyZWNvcmQpLlZhbHVlc1tmaWVsZE5hbWVdXSk7XHJcbiAgLy8gICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkTmFtZV0gPSAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzWyhyZWNvcmQpLlZhbHVlc1tmaWVsZE5hbWVdXTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgIGxldCBpbnZlcnRlZCA9IHt9O1xyXG4gIC8vICAgICAgICAgZm9yIChsZXQga2V5IGluICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMpIFxyXG4gIC8vICAgICAgICAgeyBcclxuICAvLyAgICAgICAgICAgaW52ZXJ0ZWRbKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1trZXldXSA9IGtleTsgXHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgICAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzID0gaW52ZXJ0ZWQ7XHJcbiAgLy8gICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZE5hbWVdID0gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1socmVjb3JkKS5WYWx1ZXNbZmllbGROYW1lXV07XHJcbiAgLy8gICAgICAgfSBlbHNlIFxyXG4gIC8vICAgICAgIHtcclxuICAvLyAgICAgICAgIHRoaXMuZGVidWdMb2coXCIocmVjb3JkKS5WYWx1ZXNbZmllbGROYW1lXVwiLCAocmVjb3JkKS5WYWx1ZXNbZmllbGROYW1lXSk7XHJcbiAgLy8gICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZE5hbWVdID0gKHJlY29yZCkuVmFsdWVzW2ZpZWxkTmFtZV07XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgLy8gICAgIH0gY2F0Y2ggKGUpIHtcclxuICAvLyAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gICAvLyBjYW5jZWxsbyBpIHZhbG9yaSBpbmRlZmluaXRpIG8gbnVsbGlcclxuICAvLyAgIGZvcihjb25zdCBjaGlhdmUgaW4gb3V0cHV0VmFsdWVzQXJyYXkpe1xyXG4gIC8vICAgICBpZihvdXRwdXRWYWx1ZXNBcnJheVtjaGlhdmVdID09IHVuZGVmaW5lZCB8fCBvdXRwdXRWYWx1ZXNBcnJheVtjaGlhdmVdID09IG51bGwpXHJcbiAgLy8gICAgIG91dHB1dFZhbHVlc0FycmF5W2NoaWF2ZV0gPSAnJ1xyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIG91dHB1dFZhbHVlc0FycmF5O1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBnZXRSZXNwb25zZVRlbXBsYXRlKGZvcm06IEZvcm0pOiBzdHJpbmcge1xyXG4gIC8vICAgbGV0IHRlbXBsYXRlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIC8vICAgLy8gUFJFUEFSTyBPIFBSRU5ETyBMQSBTVFJVVFRVUkEgREEgU1RBTVBBUkVcclxuICAvLyAgIGZvcm0uRmllbGRzLmZvckVhY2goKGJhc2VGaWVsZDogQmFzZUZpZWxkKSA9PiB7XHJcbiAgLy8gICAgIHRlbXBsYXRlICs9ICc8c3BhbiBzdHlsZT1cIicgKyBiYXNlRmllbGQuTGFiZWxzdHlsZUNTUyArICdcIj4nICsgYmFzZUZpZWxkLkRlc2NyaXB0aW9uICsgJzo8L3NwYW4+IDxzcGFuIHN0eWxlPVwiJyArIGJhc2VGaWVsZC5GaWVsZHN0eWxlQ1NTICsgJ1wiPiAjIycgKyBiYXNlRmllbGQuTmFtZSArICcjIzwvc3Bhbj4gXFxuIDxicj4gJztcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgLy8gKGF0dHVhbG1lbnRlIG5vbiBlc2lzdGUgaWwgY29uY2V0dG8gZGkgdGVtcGF0ZSBkaSBvdXRwdXQpXHJcbiAgLy8gICByZXR1cm4gdGVtcGxhdGU7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBwcml2YXRlIHJlcGxhY2VUZW1wbGF0ZVBsYWNlaG9sZGVyc1dpdGhWYWx1ZXModGVtcGxhdGU6IHN0cmluZywgb3V0cHV0VmFsdWVzQXJyYXk6IEFycmF5PGFueT4sIHJlZ2V4KTogc3RyaW5nIHtcclxuICAvLyAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKHJlZ2V4LCAobWF0Y2gsIGdyb3VwKSA9PiB7XHJcbiAgLy8gICAgIHJldHVybiA8c3RyaW5nPm91dHB1dFZhbHVlc0FycmF5W2dyb3VwXTtcclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImxvYWRlclwiPlxyXG4gIDxkaXYgaWQ9XCJvdXRwdXQtc3RyaW5nXCIgW2lubmVySFRNTF09XCJvdXRwdXRTdHJpbmdcIj48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwicm93IG10LTJcIiAqbmdJZj1cInNob3dCYWNrQnV0dG9uXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIHRleHQtcmlnaHRcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwibXItMlwiXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJnb0JhY2soKVwiXHJcbiAgICAgID5cclxuICAgICAgICBJbmRpZXRyb1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -201,16 +201,16 @@ export class UtilityHelperService {
|
|
|
201
201
|
* @returns Restituisce un FormGroup rappresentate la Form a cui appartengono i BaseField ricevuti in input.
|
|
202
202
|
*/
|
|
203
203
|
CreateFormFormGroup(formFields, record, onlyView = false, includeCurrentFormInField = true) {
|
|
204
|
-
console.log("formFields", formFields);
|
|
205
|
-
console.log("record", record);
|
|
206
|
-
console.log("onlyView", onlyView);
|
|
207
|
-
console.log("includeCurrentFormInField", includeCurrentFormInField);
|
|
204
|
+
// console.log("formFields", formFields);
|
|
205
|
+
// console.log("record", record);
|
|
206
|
+
// console.log("onlyView", onlyView);
|
|
207
|
+
// console.log("includeCurrentFormInField", includeCurrentFormInField);
|
|
208
208
|
const formForm = this.formBuilder.group([]);
|
|
209
209
|
formFields.forEach((field) => {
|
|
210
210
|
// console.log(field);
|
|
211
211
|
formForm.addControl(field.Name, this.createFieldFormControl(field, record));
|
|
212
212
|
if (includeCurrentFormInField) {
|
|
213
|
-
console.log(field);
|
|
213
|
+
// console.log(field);
|
|
214
214
|
field.FormFormGroup = formForm;
|
|
215
215
|
}
|
|
216
216
|
});
|
|
@@ -505,4 +505,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
505
505
|
providedIn: "root",
|
|
506
506
|
}]
|
|
507
507
|
}], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }, { type: i2.HttpClient }, { type: i3.SpinnerService }]; } });
|
|
508
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eUhlbHBlci5zZXJ2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsa0JBQWtCLEVBR2xCLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsYUFBYSxHQUNkLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFDTCxxQkFBcUIsRUFHckIsYUFBYSxFQUNiLGlCQUFpQixHQUNsQixNQUFNLHVDQUF1QyxDQUFDO0FBSy9DLE9BQU8sRUFDTCxZQUFZLEVBQ1osU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEdBQ1QsTUFBTSxrQ0FBa0MsQ0FBQztBQUcxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7O0FBTXBGLE1BQU0sT0FBTyxvQkFBb0I7SUFHL0IsWUFDVSxXQUErQixFQUMvQixJQUFnQixFQUNoQixjQUE4QjtRQUY5QixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDckMsQ0FBQztJQUVHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FDaEMsT0FBZSxFQUNmLEdBQVcsRUFDWCxHQUFRO1FBRVIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FB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QztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIEFic3RyYWN0Q29udHJvbCxcclxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG4gIFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9yRm4sXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtcclxuICBCYXNlRmllbGQsXHJcbiAgQ29sU3BhblNpemVzRW51bSxcclxuICBGaWVsZFR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbnRleHQubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBFbmRQb2ludENvbmZpZ3VyYXRpb24sXHJcbiAgRW5kUG9pbnREYXRhLFxyXG4gIEVuZFBvaW50RGF0YVBhcmFtcyxcclxuICBQYXJhbVR5cGVFbnVtLFxyXG4gIFJlcXVlc3RNZXRob2RFbnVtLFxyXG59IGZyb20gXCIuLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWVsZCB9IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL2F0dGFjaG1lbnRGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJbWFnZUZpZWxkIH0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvaW1hZ2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBMaXN0VmFsdWVGaWVsZCB9IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFRleHRhcmVhRmllbGQgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpZWxkcy90ZXh0YXJlYUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgVGV4dE1hc2tFbnVtLFxyXG4gIFRleHRGaWVsZCxcclxuICBVcmxSZWdleCxcclxuICBUZWxSZWdleCxcclxufSBmcm9tIFwiLi4vbW9kZWxzL2ZpZWxkcy90ZXh0RmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gXCIuLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tIFwiLi4vbW9kZWxzL3JlY29yZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBcnJheVZhbGlkYXRvcnMgfSBmcm9tIFwiLi9jdXN0b20tZm9ybS12YWxpZGF0b3JzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi9lcXAtZHluYW1pYy1tb2R1bGUtZGlhbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwiLi9zcGlubmVyLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFV0aWxpdHlIZWxwZXJTZXJ2aWNlIHtcclxuICBwdWJsaWMgc3RhdGljIGNvbnRleHQ6IENvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgc3Bpbm5lclNlcnZpY2U6IFNwaW5uZXJTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEV2YWx1YXRlRmllbGRGb3JtdWxhKFxyXG4gICAgZm9ybXVsYTogc3RyaW5nLFxyXG4gICAgcmVjOiBSZWNvcmQsXHJcbiAgICBjdHg6IGFueVxyXG4gICk6IGFueSB7XHJcbiAgICBjb25zdCBldmFsdWF0ZWRWYWx1ZSA9IGV2YWwoZm9ybXVsYSk7XHJcbiAgICByZXR1cm4gZXZhbHVhdGVkVmFsdWUgPyBldmFsdWF0ZWRWYWx1ZSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIFNldENvbnRleHQoY3R4OiBDb250ZXh0KSB7XHJcbiAgICB0aGlzLmNvbnRleHQgPSBjdHg7XHJcbiAgfVxyXG4gIHB1YmxpYyBzdGF0aWMgaXNOdW1lcmljKG4pIHtcclxuICAgIHJldHVybiAhaXNOYU4obik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGluaXRTdHlsZXMoc3R5bGVjc3MpIHtcclxuICAgIHJldHVybiBzdHlsZWNzcy5zcGxpdChcIjtcIikucmVkdWNlKChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IGtleXBhciA9IGIuc3BsaXQoXCI6XCIpO1xyXG4gICAgICBpZiAoa2V5cGFyLmxlbmd0aCA+IDEpIGFba2V5cGFyWzBdLnRyaW0oKV0gPSBrZXlwYXJbMV0udHJpbSgpO1xyXG4gICAgICByZXR1cm4gYTtcclxuICAgIH0sIHt9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgR2V0RmllbGRUeXBlKGZpZWxkOiBCYXNlRmllbGQpIHtcclxuICAgIHN3aXRjaCAoZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIGRpIHRlc3RvXCJdOiB7XHJcbiAgICAgICAgY29uc3QgdDogVGV4dEZpZWxkID0gT2JqZWN0LmFzc2lnbihuZXcgVGV4dEZpZWxkKCksIGZpZWxkKTtcclxuICAgICAgICByZXR1cm4gdDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgaW1wb3N0YXJlIGkgdmFsb3JpIGRhIHN1Z2dlcmlyZSBuZWxsJ2F1dG9jb21wbGV0ZSBwZXIgaSBjYW1waSBpbiBjdWkgbCd1dGVudGUgZGV2ZSBzY3JpdmVyZSBjb21hbmRpIGphdmFzY3JpcHQuXHJcbiAgICogSW4gYmFzZSBhbGwndWx0aW1vIGNhcmF0dGVyZSBkaWdpdGF0byB2aWVuZSBpbXBvc3RhdG8gdW4gZWxlbmNvIGRpIG9nZ2V0dGkgbyBwcm9wcmlldMOgIGNoZSBsJ3V0ZW50ZSBoYSBhIGRpc3Bvc2l6aW9uZSBpbiBxdWVsIG1vbWVudG8uXHJcbiAgICogQHBhcmFtIGZpZWxkcyBBcnJheSBkaSBCYXNlRmllbGQgYWdnaXVudGkgYWxsYSBGb3JtXHJcbiAgICogQHBhcmFtIHR5cGVkRm9ybXVsYSBTdHJpbmdhIGRpZ2l0YXRhIGRhbGwndXRlbnRlXHJcbiAgICogQHN1bW1hcnkgSWwgbWV0b2RvIGltcG9zdGEgaSBzdWdnZXJpbWVudGkgYmFzYW5kb3NpIHN1IDMgY2FzaTpcclxuICAgKiAgMSkgbCd1dGVudGUgbm9uIGhhIGRpZ2l0YXRvIG51bGxhIG8gbGEgc3RyaW5nYSBkaWdpdGF0YSBkYWxsJ3V0ZW50ZSBmaW5pc2NlIGNvbiB1bm8gc3BhemlvIHZ1b3RvXHJcbiAgICogIDIpIGxhIHN0cmluZ2EgZGlnaXRhdGEgZGFsbCd1dGVudGUgZmluaXNjZSBjb24gdW4gXCIuXCJcclxuICAgKiAgMykgbGEgc3RyaW5nYSBkaWdpdGF0YSBkYWxsJ3V0ZW50ZSBub24gY29pbmNpZGUgY29uIG5lc3N1biBhbHRybyBjYXNvIHNvcHJhIChmaW5pc2NlIGNvbiB1biBjYXJhdHRlcmUgcXVhbHVucXVlKVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgR2V0QXV0b2NvbXBsZXRlT3B0aW9ucyhcclxuICAgIGZpZWxkczogQXJyYXk8QmFzZUZpZWxkPixcclxuICAgIHR5cGVkRm9ybXVsYTogc3RyaW5nXHJcbiAgKTogQXJyYXk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+IHtcclxuICAgIGxldCBhdXRvY29tcGxldGVPcHRpb25zOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4gPSBbXTtcclxuXHJcbiAgICAvLyBSZWN1cGVybyBpIG5vbWkgZGkgdHV0dGkgaSBjYW1waSBjcmVhdGkgZmlubyBhZCBvcmEgbmVsbGEgZm9ybS5cclxuICAgIGNvbnN0IGF2YWlsYWJsZVJlY1Byb3BlcnRpZXM6IEFycmF5PHN0cmluZz4gPSBmaWVsZHMubWFwKChmKSA9PlxyXG4gICAgICBmLkxhYmVsLnNwbGl0KFwiIFwiKS5qb2luKFwiX1wiKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBOZWwgY2FzaSBpbiBjdWkgbCd1dGVudGUgbm9uIGhhIGluc2VyaXRvIG51bGxhIG9wcHVyZSBsYSBzdHJpbmdhIGZpbmlzY2UgY29uIHVubyBzcGF6aW8gdnVvdG8gbyB1biBzaW1ib2xvIGRpdmVyc28gZGEgXCIuXCJcclxuICAgIC8vICh1biBjYXJhdHRlcmUgbm9uIGFsZmFudW1lcmljbykgaW1wb3N0byBjb21lIHN1Z2dlcmltZW50aSBzb2xvIFwicmVjXCIgZSBcImN0eFwiLCBvdnZlcm8gZ2xpIHVuaWNpIGR1ZSBvZ2dldHRpIGEgY3VpIGwndXRlbnRlIGhhIGFjY2Vzc28uXHJcbiAgICBpZiAoXHJcbiAgICAgICF0eXBlZEZvcm11bGEgfHxcclxuICAgICAgKCF0eXBlZEZvcm11bGEuZW5kc1dpdGgoXCIuXCIpICYmXHJcbiAgICAgICAgbmV3IFJlZ0V4cChcIlteMC05YS16QS1aX11cIikudGVzdChcclxuICAgICAgICAgIHR5cGVkRm9ybXVsYS5zdWJzdHJpbmcodHlwZWRGb3JtdWxhLmxlbmd0aCAtIDEsIHR5cGVkRm9ybXVsYS5sZW5ndGgpXHJcbiAgICAgICAgKSlcclxuICAgICkge1xyXG4gICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gW1xyXG4gICAgICAgIHsgbGFiZWw6IFwicmVjXCIsIHZhbHVlOiAodHlwZWRGb3JtdWxhID8gdHlwZWRGb3JtdWxhIDogXCJcIikgKyBcInJlY1wiIH0sXHJcbiAgICAgICAgeyBsYWJlbDogXCJjdHhcIiwgdmFsdWU6ICh0eXBlZEZvcm11bGEgPyB0eXBlZEZvcm11bGEgOiBcIlwiKSArIFwiY3R4XCIgfSxcclxuICAgICAgXTtcclxuICAgIH1cclxuICAgIC8vIFNlIGxhIHN0cmluZ2EgZmluaXNjZSBjb24gdW4gXCIuXCIgdnVvbCBkaXJlIGNoZSBsJ3V0ZW50ZSBzdGEgY2VyY2FuZG8gZGkgYWNjZWRlcmUgYWQgdW5hIHByb3ByaWV0w6AgZGkgdW4gb2dnZXR0b1xyXG4gICAgLy8gYSBzdWEgZGlzcG9zaXppb25lLiBSZWN1cGVybyBpbCBub21lIGRlbGwndWx0aW1vIG9nZ2V0dG8gZGlnaXRhdG8gZGFsbCd1dGVudGUgZSBzZSBsJ29nZ2V0dG8gc2NlbHRvIMOoIFwicmVjXCIgbyBcImN0eFwiXHJcbiAgICAvLyBhbGxvcmEgc3VnZ2VyaXNjbyBsZSBwcm9wcmlldMOgIGNoZSBlc2lzdG9ubyBhbGwnaW50ZXJubyBkaSBxdWVzdGkgb2dnZXR0aSBhbHRyaW1lbnRpIG5vbiBtb3N0cm8gbnVsbGEuXHJcbiAgICBlbHNlIGlmICh0eXBlZEZvcm11bGEuZW5kc1dpdGgoXCIuXCIpKSB7XHJcbiAgICAgIGNvbnN0IGZvcm11bGFQaWVjZXM6IEFycmF5PHN0cmluZz4gPSB0eXBlZEZvcm11bGFcclxuICAgICAgICAuc3BsaXQoXCIgXCIpXHJcbiAgICAgICAgW3R5cGVkRm9ybXVsYS5zcGxpdChcIiBcIikubGVuZ3RoIC0gMV0uc3BsaXQoXCIuXCIpO1xyXG4gICAgICBpZiAoZm9ybXVsYVBpZWNlc1tmb3JtdWxhUGllY2VzLmxlbmd0aCAtIDJdID09PSBcInJlY1wiKSB7XHJcbiAgICAgICAgYXV0b2NvbXBsZXRlT3B0aW9ucyA9IGF2YWlsYWJsZVJlY1Byb3BlcnRpZXMubWFwKChmKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4geyBsYWJlbDogZiwgdmFsdWU6IHR5cGVkRm9ybXVsYSArIGYgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmIChmb3JtdWxhUGllY2VzW2Zvcm11bGFQaWVjZXMubGVuZ3RoIC0gMl0gPT09IFwiY3R4XCIpIHtcclxuICAgICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gT2JqZWN0LmtleXMoVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dCkubWFwKFxyXG4gICAgICAgICAgKGYpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWw6IGYsIHZhbHVlOiB0eXBlZEZvcm11bGEgKyBmIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBmb3JtdWxhUGllY2VzLmxlbmd0aCA+IDIgJiZcclxuICAgICAgICBmb3JtdWxhUGllY2VzW2Zvcm11bGFQaWVjZXMubGVuZ3RoIC0gM10gPT09IFwiY3R4XCIgJiZcclxuICAgICAgICBmb3JtdWxhUGllY2VzW2Zvcm11bGFQaWVjZXMubGVuZ3RoIC0gMl0gPT09IFwiVXNlclwiXHJcbiAgICAgICkge1xyXG4gICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBPYmplY3Qua2V5cyhcclxuICAgICAgICAgIFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmNvbnRleHQuVXNlclxyXG4gICAgICAgICkubWFwKChmKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4geyBsYWJlbDogZiwgdmFsdWU6IHR5cGVkRm9ybXVsYSArIGYgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEluIHR1dHRpIGdsaSBhbHRyaSBjYXNpLCBvdnZlcm8gcXVhbmRvIGxhIHN0cmluZ2EgZGlnaXRhdGEgZmluaXNjZSBjb24gdW4gY2FyYXR0ZXJlIGRpdmVyc28gZGEgcXVlbGxpXHJcbiAgICAvLyBjb250cm9sbGF0aSBmaW5vcmEsIHZ1b2wgZGlyZSBjaGUgbCd1dGVudGUgc3RhIGRpZ2l0YW50byBpbCBub21lIGRpIHVuIG9nZ2V0dG8sIHVuYSBwcm9wcmlldMOgIG8gdW5hXHJcbiAgICAvLyBmdW56aW9uZSBqYXZhc2NyaXB0LiBDb250cm9sbG8gbGEgcGFyb2xhIGNoZSBsJ3V0ZW50ZSBzdGEgZGlnaXRhbmRvIGUgc2UgZmEgcGFydGUgZGkgdW5vIGRlZ2xpIG9nZ2V0dGkgYSBkaXNwb3NpemlvbmVcclxuICAgIC8vIG8gdW5hIHByb3ByaWV0w6AgZGkgZXNzaSBhbGxvcmEgc3VnZ2VyaXNjbyBpIHBvc3NpYmlsaSBtYXRjaC5cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zdCBhdmFpbGFibGVPcHRpb25zOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4gPSBbXTtcclxuXHJcbiAgICAgIC8vIFByZW5kbyB0dXR0aSBpIGJsb2NjaGkgZGkgY2FyYXR0ZXJpIGRpZ2l0YXRpIGRhbGwndXRlbnRlXHJcbiAgICAgIGNvbnN0IGFsbEZvcm11bGFXb3JkczogQXJyYXk8c3RyaW5nPiA9IHR5cGVkRm9ybXVsYS5zcGxpdChcIiBcIik7XHJcbiAgICAgIC8vIFByZW5kbyBsJ3VsdGltbyBibG9jY28gZGkgY2FyYXR0ZXJpIGRpZ2l0YXRvIGRhbGwndXRlbnRlXHJcbiAgICAgIGNvbnN0IGxhc3RUeXBlZFN0cmluZzogc3RyaW5nID1cclxuICAgICAgICBhbGxGb3JtdWxhV29yZHNbYWxsRm9ybXVsYVdvcmRzLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgLy8gU2UgbGEgbCd1bHRpbWEgc3RyaW5nYSBkaWdpdGF0YSBub24gY29udGllbmUgY2FyYXR0ZXJpIHNwZWNpYWxpIGFsbG9yYSBzcGxpdHRvIGxhIHN0cmluZ2FcclxuICAgICAgLy8gc3VpIFwiLlwiIGUgaW1wb3N0byBpIHN1Z2dlcmltZW50aSBpbiBiYXNlIGFsIHBhdGggZGVsbGEgcHJvcnBpZXTDoCBjaGUgc2kgc3RhIGRpZ2l0YW5kby5cclxuICAgICAgaWYgKCFuZXcgUmVnRXhwKFwiW14wLTlhLXpBLVpfLl1cIikudGVzdChsYXN0VHlwZWRTdHJpbmcpKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcGVydHlQYXRoID0gbGFzdFR5cGVkU3RyaW5nLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBjb25zdCBsYXN0VHlwZWRXb3JrID0gcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgbGV0IHByb3BlcnRpZXNUb0NoZWNrOiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG4gICAgICAgIGlmIChwcm9wZXJ0eVBhdGgubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gW1wicmVjXCIsIFwiY3R4XCJdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBwcm9wZXJ0eVBhdGgubGVuZ3RoID4gMSAmJlxyXG4gICAgICAgICAgcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAyXSA9PT0gXCJjdHhcIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcHJvcGVydGllc1RvQ2hlY2sgPSBPYmplY3Qua2V5cyhVdGlsaXR5SGVscGVyU2VydmljZS5jb250ZXh0KTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgcHJvcGVydHlQYXRoLmxlbmd0aCA+IDIgJiZcclxuICAgICAgICAgIHByb3BlcnR5UGF0aFtwcm9wZXJ0eVBhdGgubGVuZ3RoIC0gM10gPT09IFwiY3R4XCIgJiZcclxuICAgICAgICAgIHByb3BlcnR5UGF0aFtwcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMl0gPT09IFwiVXNlclwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9DaGVjayA9IE9iamVjdC5rZXlzKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmNvbnRleHQuVXNlcik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIHByb3BlcnR5UGF0aC5sZW5ndGggPiAxICYmXHJcbiAgICAgICAgICBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDJdID09PSBcInJlY1wiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9DaGVjayA9IGF2YWlsYWJsZVJlY1Byb3BlcnRpZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBFc2VndW8gaWwgY29udHJvbGxvIHN1bGxlIHByb3ByaWV0w6AgcmVjdXBlcmF0ZSwgYWdnaXVuZ28gYWkgc3VnZ2VyaW1lbnRpIHR1dHRpIGkgbm9taSBjaGUgaW5pemlhbm8gY29uXHJcbiAgICAgICAgLy8gcXVlbGxvIGNoZSBzdGEgZGlnaXRhbmRvIGwndXRlbnRlLlxyXG4gICAgICAgIHByb3BlcnRpZXNUb0NoZWNrLmZvckVhY2goKHByb3ApID0+IHtcclxuICAgICAgICAgIGlmIChwcm9wLnN0YXJ0c1dpdGgobGFzdFR5cGVkV29yaykpIHtcclxuICAgICAgICAgICAgYXZhaWxhYmxlT3B0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICBsYWJlbDogcHJvcCxcclxuICAgICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICAgIHR5cGVkRm9ybXVsYSArXHJcbiAgICAgICAgICAgICAgICBwcm9wLnN1YnN0cmluZyhsYXN0VHlwZWRXb3JrLmxlbmd0aCwgcHJvcC5sZW5ndGgpLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgYXV0b2NvbXBsZXRlT3B0aW9ucyA9IGF2YWlsYWJsZU9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGF1dG9jb21wbGV0ZU9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gZGFsbCdodG1sIHBlciBpbXBvc3RhcmUgbGUgY2xhc3NpIGNzcyBwZXIgdmlzdWFsaXp6YXJlIGlsIGNhbXBvIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0uXHJcbiAgICogU2UgcGVyIGlsIGZpZWxkIHNvbm8gc3RhdGUgc3BlY2lmaWNhdGUgZGVsbGUgY2xhc3NpIGFsbG9yYSB2ZW5nb25vIGFwcGxjYXRlIHF1ZWxsZSwgYWx0cmltZW50aSB2ZW5nb25vIHVzYXRlXHJcbiAgICogZGVsbGUgY2xhc3NpIGRpIGRlZmF1bHQuXHJcbiAgICogQHBhcmFtIGZpZWxkIEJhc2VGaWVsZCBkYSB2aXN1YWxpenphcmUuXHJcbiAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW5hIHN0cmluZ2EgY29udGVuZW50ZSBsZSBjbGFzc2kgY3NzIGRhIGFwcGxpY2FyZS5cclxuICAgKi9cclxuICBnZXRGaWVsZFN5bGVDbGFzcyhmaWVsZDogQmFzZUZpZWxkKTogc3RyaW5nIHtcclxuICAgIGlmIChmaWVsZC5Db2xTcGFuU2l6ZXMgJiYgZmllbGQuQ29sU3BhblNpemVzLmxlbmd0aCA+IDApXHJcbiAgICAgIHJldHVybiBmaWVsZC5Db2xTcGFuU2l6ZXMubWFwKChzaXplKSA9PlxyXG4gICAgICAgIENvbFNwYW5TaXplc0VudW1bc2l6ZV0udG9TdHJpbmcoKVxyXG4gICAgICApLmpvaW4oXCIgXCIpO1xyXG5cclxuICAgIHN3aXRjaCAoZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIGRpIHRlc3RvXCJdOlxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJBcmVhIGRpIHRlc3RvXCJdOlxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyXCI7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkJvb2xlYW5vXCJdOlxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTRcIjtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl06XHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFsbGVnYXRvXCJdOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIChmaWVsZCBhcyBBdHRhY2htZW50RmllbGQpLklzTXVsdGlBdHRhY2ggfHxcclxuICAgICAgICAgICgoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkcyAmJlxyXG4gICAgICAgICAgICAoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTJcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJJbW1hZ2luZVwiXTpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5Jc011bHRpQXR0YWNoIHx8XHJcbiAgICAgICAgICAoKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uTWV0YWRhdGFGaWVsZHMgJiZcclxuICAgICAgICAgICAgKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uTWV0YWRhdGFGaWVsZHMubGVuZ3RoID4gMClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOlxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJMb29rdXBcIl06XHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdOlxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBpbCBGb3JtR3JvdXAgY2hlIHJhcHByZXNlbnRhIHVuYSBGb3JtIGEgcGFydGlyZSBkYWkgc3VvaSBCYXNlRmllbGQuXHJcbiAgICogQHBhcmFtIGZvcm1GaWVsZHMgTGlzdGEgZGVpIEJhc2VGaWVsZCBjaGUgY29tcG9uZ29ubyBsYSBmb3JtLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgT2dnZXR0byBkaSB0aXBvIFJlY29yZCBjaGUgY29udGllbmUgaSB2YWxvcmkgZGVpIGNhbXBpLlxyXG4gICAqIEBwYXJhbSBvbmx5VmlldyBTZSBUUlVFIGRpc2FiaWxpdGEgbGEgZm9ybSBwZXIgcmVuZGVybGEgaW4gc29sYSBsZXR0dXJhLlxyXG4gICAqIEBwYXJhbSBpbmNsdWRlQ3VycmVudEZvcm1JbkZpZWxkIFNlIFRSVUUgcG9wb2xhIGxhIHByb3ByaWV0w6AgRm9ybUZvcm1Hcm91cCBhbGwnaW50ZXJubyBkaSBvZ25pIEJhc2VGaWVsZCBjb24gaWwgRm9ybUdyb3VwIGNvcnJlbnRlLlxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIEZvcm1Hcm91cCByYXBwcmVzZW50YXRlIGxhIEZvcm0gYSBjdWkgYXBwYXJ0ZW5nb25vIGkgQmFzZUZpZWxkIHJpY2V2dXRpIGluIGlucHV0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBDcmVhdGVGb3JtRm9ybUdyb3VwKFxyXG4gICAgZm9ybUZpZWxkczogQXJyYXk8QmFzZUZpZWxkPixcclxuICAgIHJlY29yZDogUmVjb3JkLFxyXG4gICAgb25seVZpZXcgPSBmYWxzZSxcclxuICAgIGluY2x1ZGVDdXJyZW50Rm9ybUluRmllbGQgPSB0cnVlXHJcbiAgKTogVW50eXBlZEZvcm1Hcm91cCB7XHJcbiAgICBjb25zb2xlLmxvZyhcImZvcm1GaWVsZHNcIiwgZm9ybUZpZWxkcyk7XHJcbiAgICBjb25zb2xlLmxvZyhcInJlY29yZFwiLCByZWNvcmQpO1xyXG4gICAgY29uc29sZS5sb2coXCJvbmx5Vmlld1wiLCBvbmx5Vmlldyk7XHJcbiAgICBjb25zb2xlLmxvZyhcImluY2x1ZGVDdXJyZW50Rm9ybUluRmllbGRcIiwgaW5jbHVkZUN1cnJlbnRGb3JtSW5GaWVsZCk7XHJcblxyXG4gICAgY29uc3QgZm9ybUZvcm06IFVudHlwZWRGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFtdKTtcclxuXHJcbiAgICBmb3JtRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKGZpZWxkKTtcclxuICAgICAgZm9ybUZvcm0uYWRkQ29udHJvbChcclxuICAgICAgICBmaWVsZC5OYW1lLFxyXG4gICAgICAgIHRoaXMuY3JlYXRlRmllbGRGb3JtQ29udHJvbChmaWVsZCwgcmVjb3JkKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaW5jbHVkZUN1cnJlbnRGb3JtSW5GaWVsZCkgeyAgICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpZWxkKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgIGZpZWxkLkZvcm1Gb3JtR3JvdXAgPSBmb3JtRm9ybTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAob25seVZpZXcpIHtcclxuICAgICAgZm9ybUZvcm0uZGlzYWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JtRm9ybTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bnppb25lIHBlciBjcmVhcmUgZSBhZ2dpdW5nZXJlIGFsIEZvcm1Hcm91cCByYXBwcmVzZW50YW50ZSBsYSBmb3JtIHVuIG51b3ZvIEZvcm1Db250cm9sIGEgcGFydGlyZSBkYSB1biBGaWVsZC5cclxuICAgKiBJbiBudW92byBGb3JtQ29udHJvbCBhdnLDoCBpbCBub21lIGRlbCBjYW1wbyBwYXNzYXRvIGUgdmVycmFubm8gaW1wb3N0YXRpIGkgVmFsaWRhdG9ycyBpbiBiYXNlIGFsIHRpcG8gZGVsIGNhbXBvIHN0ZXNzby5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIHBlciBjdWkgY3JlYXJlIGlsIEZvcm1Db250cm9sIGRhIGluc2VyaXJlIG5lbCBGb3JtR3JvdXAgZGVsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRmllbGRGb3JtQ29udHJvbChcclxuICAgIGZpZWxkOiBCYXNlRmllbGQsXHJcbiAgICByZWNvcmQ6IFJlY29yZFxyXG4gICk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JzOiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcclxuXHJcbiAgICBpZiAoZmllbGQuUmVxdWlyZWQpIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBkaSB0ZXN0b1wiXTpcclxuICAgICAgICBpZiAoKGZpZWxkIGFzIFRleHRGaWVsZCkuTWF4TGVuZ2h0KSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgoKGZpZWxkIGFzIFRleHRGaWVsZCkuTWF4TGVuZ2h0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoZmllbGQgYXMgVGV4dEZpZWxkKS5NaW5MZW5naHQpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCgoZmllbGQgYXMgVGV4dEZpZWxkKS5NaW5MZW5naHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoICgoZmllbGQgYXMgVGV4dEZpZWxkKS5UZXh0TWFzaykge1xyXG4gICAgICAgICAgY2FzZSBUZXh0TWFza0VudW0uVXJsOlxyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKFVybFJlZ2V4KSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBUZXh0TWFza0VudW0uRW1haWw6XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLmVtYWlsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFRleHRNYXNrRW51bS5UZWxlZm9ubzpcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihUZWxSZWdleCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFyZWEgZGkgdGVzdG9cIl06XHJcbiAgICAgICAgaWYgKChmaWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NYXhMZW5naHQpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoKGZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1heExlbmdodClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWluTGVuZ2h0KSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKChmaWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NaW5MZW5naHQpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkFsbGVnYXRvOlxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW0uSW1tYWdpbmU6XHJcbiAgICAgICAgaWYgKGZpZWxkLlJlcXVpcmVkKSB2YWxpZGF0b3JzLnB1c2goQXJyYXlWYWxpZGF0b3JzLm1pbkxlbmdodCgxKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuICAgICAgICBpZiAoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Jc011bHRpQ2hvaWNoZSlcclxuICAgICAgICAgIGlmIChmaWVsZC5SZXF1aXJlZCkgdmFsaWRhdG9ycy5wdXNoKEFycmF5VmFsaWRhdG9ycy5taW5MZW5naHQoMSkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgVW50eXBlZEZvcm1Db250cm9sKHJlY29yZFtmaWVsZC5OYW1lXSwgdmFsaWRhdG9ycyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGdsaSBlbmRwb2ludCBkYSB1c2FyZSBkaSBkZWZhdWx0IGEgcGFydGlyZSBkYWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXJcclxuICAgKiBhIGN1aSBzaSBkZXZlIGNvbm5ldHRlcmUgZSBhbCB0b2tlbiBkYSBwYXNzYXJlIHBlciBhdXRlbnRpY2Fyc2kuXHJcbiAgICogQHBhcmFtIGJhc2VTZXJ2ZXJVcmwgU3RyaW5nYSBkZWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXIgKGVzOiBcImh0dHA6Ly9sb2NhbGhvc3Q6NTAwMFwiKS5cclxuICAgKiBAcGFyYW0gdXNlclRva2VuIFRva2VuIGRlbGwndXRlbnRlIGxvZ2dhdG8gZGEgdXNhcmUgcGVyIGF1dGVudGljYXJzaSBzZSBuZWNlc3NhcmlvLlxyXG4gICAqIEByZXR1cm5zIFJlc2l0dWlzY2UgbGEgY29uZmlndXJhemlvbmUgY29tcGxldGEgZGVnbGkgZW5kUG9pbnQgZGEgdXNhcmUgZGkgZGVmYXVsdC5cclxuICAgKi9cclxuICBwdWJsaWMgQ29uZmlndXJlRGVmYXVsdEVuZFBvaW50cyhcclxuICAgIGJhc2VTZXJ2ZXJVcmw6IHN0cmluZyxcclxuICAgIHVzZXJUb2tlbjogc3RyaW5nXHJcbiAgKTogRW5kUG9pbnRDb25maWd1cmF0aW9uIHtcclxuICAgIGxldCBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbiA9XHJcbiAgICAgIG5ldyBFbmRQb2ludENvbmZpZ3VyYXRpb24oYmFzZVNlcnZlclVybCwgdXNlclRva2VuKTtcclxuXHJcbiAgICAvLyBlbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyA9IHtcclxuICAgIC8vICAgR2V0QnlGb3JtSURFbmRQb2ludDoge1xyXG4gICAgLy8gICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS92MS9nZXRhbGxcIixcclxuICAgIC8vICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgLy8gICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLkdFVCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludDoge1xyXG4gICAgLy8gICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS92MS9HZXRBbGxCeVVzZXJJRFwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBHZXRCeUlERW5kUG9pbnQ6IHtcclxuICAgIC8vICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvZ2V0QnlJRFwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBTYXZlRW5kUG9pbnQ6IHtcclxuICAgIC8vICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvc2F2ZVwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uUE9TVCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgRHVwbGljYXRlRW5kUG9pbnQ6IHtcclxuICAgIC8vICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvZHVwbGljYXRlXCIsXHJcbiAgICAvLyAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgIC8vICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5HRVQsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIERlbGV0ZUVuZFBvaW50OiB7XHJcbiAgICAvLyAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL3YxL2RlbGV0ZVwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uREVMRVRFLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gfTtcclxuICAgIC8vIGVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3JtcyA9IHtcclxuICAgIC8vICAgR2V0QnlJREVuZFBvaW50OiB7XHJcbiAgICAvLyAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL2NvbmYvZm9ybVwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBHZXRCeUlEQW5kVmVyc2lvbkVuZFBvaW50OiB7XHJcbiAgICAvLyAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL2NvbmYvR2V0QnlJREFuZFZlcnNpb25cIixcclxuICAgIC8vICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgLy8gICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLkdFVCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgU2F2ZUVuZFBvaW50OiB7XHJcbiAgICAvLyAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL2NvbmYvZm9ybVwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uUE9TVCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vIH07XHJcbiAgICByZXR1cm4gZW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIH1cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBleHByZXNzaW9uIHByZW5kZSB1bmEgc3RyaW5nYSBpbiBpbnB1dCBlIHZlcmlmaWNhIGNoZSBvZ25pIHBhcmVudGVzaSBhcGVydGEgdmVuZ2EgYW5jaGUgY2hpdXNhXHJcbiAgICogQHJldHVybnMgdHJ1ZSBzZSBsZSBwYXJlbnRlc2kgc29ubyBwYXJpIGUgb2duaSBwYXJlbnRlc2kgY2hpdWRlIHNlIHN0ZXNzYSwgZmFsc2Ugc2UgbWFuY2FubyBwYXJlbnRlc2kgbyBub24gdmVuZ29ubyBjaGl1c2VcclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIHN0cmluZ1Nhbml0aXplcihleHByZXNzaW9uLCByZXF1aXJlZCA9IGZhbHNlKSB7XHJcbiAgICBpZiAoZXhwcmVzc2lvbiA9PSB1bmRlZmluZWQgfHwgZXhwcmVzc2lvbiA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiByZXF1aXJlZCA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIH1cclxuICAgIGxldCBzdGFjayA9IFtdO1xyXG4gICAgbGV0IGN1cnJlbnQ7XHJcbiAgICBjb25zdCBtYXRjaExvb2t1cCA9IHtcclxuICAgICAgXCIoXCI6IFwiKVwiLFxyXG4gICAgICBcIltcIjogXCJdXCIsXHJcbiAgICAgIFwie1wiOiBcIn1cIixcclxuICAgIH07XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGN1cnJlbnQgPSBleHByZXNzaW9uW2ldOyAvL2Vhc2llciB0aGFuIHdyaXRpbmcgaXQgb3ZlciBhbmQgb3ZlclxyXG5cclxuICAgICAgaWYgKGN1cnJlbnQgPT09IFwiKFwiIHx8IGN1cnJlbnQgPT09IFwiW1wiIHx8IGN1cnJlbnQgPT09IFwie1wiKSB7XHJcbiAgICAgICAgc3RhY2sucHVzaChjdXJyZW50KTtcclxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09PSBcIilcIiB8fCBjdXJyZW50ID09PSBcIl1cIiB8fCBjdXJyZW50ID09PSBcIn1cIikge1xyXG4gICAgICAgIGNvbnN0IGxhc3RCcmFja2V0ID0gc3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgIGlmIChtYXRjaExvb2t1cFtsYXN0QnJhY2tldF0gIT09IGN1cnJlbnQpIHtcclxuICAgICAgICAgIC8vaWYgdGhlIHN0YWNrIGlzIGVtcHR5LCAucG9wKCkgcmV0dXJucyB1bmRlZmluZWQsIHNvIHRoaXMgZXhwcmVzc2lvbiBpcyBzdGlsbCBjb3JyZWN0XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlOyAvL3Rlcm1pbmF0ZSBpbW1lZGlhdGVseSAtIG5vIG5lZWQgdG8gY29udGludWUgc2Nhbm5pbmcgdGhlIHN0cmluZ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdGFjay5sZW5ndGggPT09IDA7IC8vYW55IGVsZW1lbnRzIG1lYW4gYnJhY2tldHMgbGVmdCBvcGVuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIGRhdGEgbGEgY29uZmlndXJhemlvbmUgZGkgdW4gZW5kcG9pbnQgY29zdHJ1aXNjZSBsJ3VybCBkYSBjaGlhbWFyZSwgZ2xpIGV2ZW50dWFsaSBwYXJhbWV0cmlcclxuICAgKiBkYSBwYXNzYXJlIChuZWwgYm9keSBvIG5lbGxhIHJvdHRhKSBlZCBlZmZldHR1YSBsYSBjaGlhbWF0YS4gQWwgdGVybWluZSBkZWxsYSBjaGlhbWF0YSBlc2VndWUgbGUgZXZlbnR1YWxpXHJcbiAgICogZnVuemlvbmkgZGkgY2FsbGJhY2sgKHNpYSBpbiBjYXNvIGRpIHN1Y2Nlc3NvIGNoZSBpbiBjYXNvIGRpIGVycm9yZSkgcGFzc2F0ZSBpbiBpbnB1dC5cclxuICAgKiBAcGFyYW0gZW5kUG9pbnREYXRhIENvZmlndXJhemlvbmUgZGVsbCdlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKiBAcGFyYW0gZHluYW1pY01vZHVsZVBhcmFtcyBBcnJheSBkZWkgcGFyYW1ldHJpIGFnZ2l1bnRpIGRhbCBtb2R1bG8gZGluYW1pY28gYSBxdWVsbGkgZ2nDoCBjb25maWd1cmF0aVxyXG4gICAqIChhZCBlc2VtcGlvIGlsIHJlY29yZCBvIGxhIGZvcm0gZGEgc2FsdmFyZSBvcHB1cmUgbCdJRCBwZXIgcmVjdXBlcmFyZSB1bmEgcGFydGljb2xhcmUgZW50aXTDoCkuXHJcbiAgICogQHBhcmFtIGNhbGxiYWNrIE1ldG9kbyBkYSBlc2VndWlyZSBpbiBjYXNvIGRpIHN1Y2Nlc3NvIGRvcG8gbGEgY2hpYW1hdGEgaHR0cC5cclxuICAgKiBOT1RBOiBpbiBpbnB1dCB2aWVuZSBwYXNzYXRhIGxhIHJpc3Bvc3RhIGRlbGxhIGNoaWFtYXRhIHN0ZXNzYS5cclxuICAgKiBAcGFyYW0gZXJyb3JDYWxsQmFjayBNZXRvZG8gZGEgZXNlZ3VpcmUgaW4gY2FzbyBkaSBlcnJvcmUgZG9wbyBsYSBjaGlhbWF0YSBodHRwLlxyXG4gICAqIE5PVEE6IGluIGlucHV0IHZpZW5lIHBhc3NhdG8gbCdlcnJvcmUgZ2VuZXJhdG8gZGVsbGEgY2hpYW1hdGEgc3Rlc3NhLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBSdW5FbmRQb2ludENhbGwoXHJcbiAgICBlbmRQb2ludERhdGE6IEVuZFBvaW50RGF0YSxcclxuICAgIGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPSBudWxsLFxyXG4gICAgY2FsbGJhY2s6IChlOiBGb3JtIHwgUmVjb3JkIHwgQXJyYXk8UmVjb3JkPikgPT4gdm9pZCA9IG51bGwsXHJcbiAgICBlcnJvckNhbGxCYWNrOiAoZXJyOiB1bmtub3duKSA9PiB2b2lkID0gbnVsbFxyXG4gICk6IHZvaWQge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5hZGRSZXF1ZXN0Q291bnRlcigpO1xyXG5cclxuICAgIGxldCB1cmwgPSBgJHtlbmRQb2ludERhdGEuVXJsfWA7XHJcbiAgICBsZXQgcXVlcnlQYXJhbXM6IHN0cmluZyA9IG51bGw7XHJcbiAgICBjb25zdCBib2R5UGFyYW1zID0ge1xyXG4gICAgICBBZGRpdGlvbmFsUGFyYW1zOiB7fSxcclxuICAgIH07XHJcblxyXG4gICAgLy8jcmVnaW9uIG1lcmdlUGFyYW1cclxuICAgIC8vIHVuaXNjbyBpIGRhdGkgZGkgZGVmYXVsdCBkZWZpbml0aSBuZWxsYSBjb25maWd1cmF6aW9uZSBkZWxsYSBjaGlhbWF0YSBjb24gaSBkYXRpIGNoZSBpbXBvc3RvIG5lbGxhIGNoaWFtYXRhIHNwZWNpZmljYVxyXG4gICAgaWYgKGVuZFBvaW50RGF0YS5QYXJhbXMgPT0gdW5kZWZpbmVkIHx8IGVuZFBvaW50RGF0YS5QYXJhbXMgPT0gbnVsbCkge1xyXG4gICAgICBlbmRQb2ludERhdGEuUGFyYW1zID0gW107XHJcbiAgICB9XHJcbiAgICBpZiAoZHluYW1pY01vZHVsZVBhcmFtcyA9PSB1bmRlZmluZWQgfHwgZHluYW1pY01vZHVsZVBhcmFtcyA9PSBudWxsKSB7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtZXJnZWRQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPSBbLi4uZW5kUG9pbnREYXRhLlBhcmFtc107XHJcblxyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5mb3JFYWNoKChvYmopID0+IHtcclxuICAgICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IG1lcmdlZFBhcmFtcy5maW5kSW5kZXgoXHJcbiAgICAgICAgKGl0ZW0pID0+IGl0ZW0uUGFyYW1OYW1lID09PSBvYmouUGFyYW1OYW1lXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBtZXJnZWRQYXJhbXNbZXhpc3RpbmdJbmRleF0uUGFyYW1WYWx1ZSA9IG9iai5QYXJhbVZhbHVlO1xyXG4gICAgICAgIG1lcmdlZFBhcmFtc1tleGlzdGluZ0luZGV4XS5QYXJhbVR5cGUgPSBvYmouUGFyYW1UeXBlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1lcmdlZFBhcmFtcy5wdXNoKG9iaik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChtZXJnZWRQYXJhbXMpIHtcclxuICAgICAgbWVyZ2VkUGFyYW1zLmZvckVhY2goKHBhcmFtKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChwYXJhbS5QYXJhbVR5cGUpIHtcclxuICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdOiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZ1BhcmFtOiBzdHJpbmcgPVxyXG4gICAgICAgICAgICAgIHBhcmFtLlBhcmFtTmFtZSArIFwiPVwiICsgcGFyYW0uUGFyYW1WYWx1ZTtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPVxyXG4gICAgICAgICAgICAgIChxdWVyeVBhcmFtcyA9PSBudWxsID8gXCJcIiA6IHF1ZXJ5UGFyYW1zICsgXCImXCIpICsgc3RyaW5nUGFyYW07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtW1wiSW4gcm91dGVcIl06IHtcclxuICAgICAgICAgICAgdXJsID0gdXJsICsgKHVybC5lbmRzV2l0aChcIi9cIikgPyBcIlwiIDogXCIvXCIpICsgcGFyYW0uUGFyYW1WYWx1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdOiB7XHJcbiAgICAgICAgICAgIGJvZHlQYXJhbXNbcGFyYW0uUGFyYW1OYW1lXSA9IHBhcmFtLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb24gbWVyZ2VQYXJhbVxyXG5cclxuICAgIC8vI3JlZ2lvbiBhZGREZWZhdWx0UGFyYW1zXHJcbiAgICAvLyBTZSBuZWxsYSBjb25maWd1cmF6aW9uZSBzb25vIHN0YXRpIGRlZmluaXRpIHBhcmFtZXRyaSBkYSBhZ2dpdW5nZXJlIGFsbGEgY2hpYW1hdGEgcXVlc3RpIHZlbmdvbm8gY2ljbGF0aVxyXG4gICAgLy8gZSBhZ2dpdW50aSBuZWwgcHVudG8gaW4gY3VpIGRldm9ubyBlc3NlcmUgdXNhdGkuXHJcbiAgICAvLyBpZiAoZW5kUG9pbnREYXRhLlBhcmFtcykge1xyXG4gICAgLy8gICAgIGVuZFBvaW50RGF0YS5QYXJhbXMuZm9yRWFjaChwYXJhbSA9PiB7XHJcbiAgICAvLyAgICAgICAgIHN3aXRjaCAocGFyYW0uUGFyYW1UeXBlKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ1F1ZXJ5IHBhcmFtJ106IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdQYXJhbTogc3RyaW5nID0gcGFyYW0uUGFyYW1OYW1lICsgXCI9XCIgKyBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gKHF1ZXJ5UGFyYW1zID09IG51bGwgPyBcIlwiIDogcXVlcnlQYXJhbXMgKyBcIiZcIikgKyBzdHJpbmdQYXJhbTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnSW4gcm91dGUnXToge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHVybCA9IHVybCArICh1cmwuZW5kc1dpdGgoXCIvXCIpID8gXCJcIiA6IFwiL1wiKSArIHBhcmFtLlBhcmFtVmFsdWU7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXToge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGJvZHlQYXJhbXMuQWRkaXRpb25hbFBhcmFtc1twYXJhbS5QYXJhbU5hbWVdID0gcGFyYW0uUGFyYW1WYWx1ZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gfVxyXG4gICAgLy8jZW5kcmVnaW9uIGFkZERlZmF1bHRQYXJhbXNcclxuXHJcbiAgICAvLyNyZWdpb24gYWRkU3BlY2lmaWNQYXJhbXNcclxuICAgIC8vIFNlIHNvbm8gc3RhdGkgcGFzc2F0aSBwYXJhbWV0cmkgZGEgYWdnaXVuZ2VyZSBhbGxhIGNoaWFtYXRhIGRlZmluaXRpIGFsbCdpbnRlcm5vIGRlbCBtb2R1bG8gZGluYW1pY29cclxuICAgIC8vIHZlbmdvbm8gY2ljbGF0aSBlIGFnZ2l1bnRpIG5lbCBwdW50byBpbiBjdWkgZGV2b25vIGVzc2VyZSB1c2F0aSBkb3BvIHF1ZWxsaSBkZWZpbml0aSBuZWxsYSBjb25maWd1cmF6aW9uZS5cclxuICAgIC8vIGlmIChkeW5hbWljTW9kdWxlUGFyYW1zKSB7XHJcbiAgICAvLyAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5mb3JFYWNoKHBhcmFtID0+IHtcclxuICAgIC8vICAgICAgICAgc3dpdGNoIChwYXJhbS5QYXJhbVR5cGUpIHtcclxuICAgIC8vICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnUXVlcnkgcGFyYW0nXToge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ1BhcmFtOiBzdHJpbmcgPSBwYXJhbS5QYXJhbU5hbWUgKyBcIj1cIiArIHBhcmFtLlBhcmFtVmFsdWU7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSAocXVlcnlQYXJhbXMgPT0gbnVsbCA/IFwiXCIgOiBxdWVyeVBhcmFtcyArIFwiJlwiKSArIHN0cmluZ1BhcmFtO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydJbiByb3V0ZSddOiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdXJsID0gdXJsICsgKHVybC5lbmRzV2l0aChcIi9cIikgPyBcIlwiIDogXCIvXCIpICsgcGFyYW0uUGFyYW1WYWx1ZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnSW4gQm9keSddOiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgYm9keVBhcmFtc1twYXJhbS5QYXJhbU5hbWVdID0gcGFyYW0uUGFyYW1WYWx1ZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH0pXHJcbiAgICAvLyB9XHJcbiAgICAvLyNlbmRyZWdpb24gYWRkU3BlY2lmaWNQYXJhbXNcclxuXHJcbiAgICBpZiAocXVlcnlQYXJhbXMgIT0gbnVsbCkge1xyXG4gICAgICB1cmwgPVxyXG4gICAgICAgICh1cmwuZW5kc1dpdGgoXCIvXCIpID8gdXJsLnN1YnN0cmluZygwLCB1cmwubGVuZ3RoIC0gMSkgOiB1cmwpICtcclxuICAgICAgICBcIj9cIiArXHJcbiAgICAgICAgcXVlcnlQYXJhbXM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5odHRwXHJcbiAgICAgIC5yZXF1ZXN0KGVuZFBvaW50RGF0YS5SZXF1ZXN0TWV0aG9kLCB1cmwsIHtcclxuICAgICAgICBoZWFkZXJzOiBlbmRQb2ludERhdGEuVG9rZW5cclxuICAgICAgICAgID8geyBBdXRob3JpemF0aW9uOiBlbmRQb2ludERhdGEuVG9rZW4gfVxyXG4gICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIGJvZHk6ICFbUmVxdWVzdE1ldGhvZEVudW0uREVMRVRFLCBSZXF1ZXN0TWV0aG9kRW51bS5HRVRdLmluY2x1ZGVzKFxyXG4gICAgICAgICAgZW5kUG9pbnREYXRhLlJlcXVlc3RNZXRob2RcclxuICAgICAgICApXHJcbiAgICAgICAgICA/IGJvZHlQYXJhbXNcclxuICAgICAgICAgIDogbnVsbCxcclxuICAgICAgfSlcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocmVzOiBGb3JtIHwgUmVjb3JkIHwgQXJyYXk8UmVjb3JkPikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5yZW1vdmVSZXF1ZXN0Q291bnRlcigpO1xyXG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKHJlcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UucmVtb3ZlUmVxdWVzdENvdW50ZXIoKTtcclxuICAgICAgICAgIGlmIChlcnJvckNhbGxCYWNrKSB7XHJcbiAgICAgICAgICAgIGVycm9yQ2FsbEJhY2soZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuRXJyb3IoZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIlJ1bkVuZFBvaW50Q2FsbCAtIHN1YnNjcmliZSAtIGVuZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gIH1cclxufVxyXG4iXX0=
|
|
508
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eUhlbHBlci5zZXJ2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsa0JBQWtCLEVBR2xCLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsYUFBYSxHQUNkLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFDTCxxQkFBcUIsRUFHckIsYUFBYSxFQUNiLGlCQUFpQixHQUNsQixNQUFNLHVDQUF1QyxDQUFDO0FBSy9DLE9BQU8sRUFDTCxZQUFZLEVBQ1osU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEdBQ1QsTUFBTSxrQ0FBa0MsQ0FBQztBQUcxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7O0FBTXBGLE1BQU0sT0FBTyxvQkFBb0I7SUFHL0IsWUFDVSxXQUErQixFQUMvQixJQUFnQixFQUNoQixjQUE4QjtRQUY5QixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDckMsQ0FBQztJQUVHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FDaEMsT0FBZSxFQUNmLEdBQVcsRUFDWCxHQUFRO1FBRVIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNoRCxDQUFDO0lBRU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFZO1FBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ3JCLENBQUM7SUFDTSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRO1FBQy9CLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVNLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBZ0I7UUFDekMsUUFBUSxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ3ZCLEtBQUssYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztnQkFDcEMsTUFBTSxDQUFDLEdBQWMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMzRCxPQUFPLENBQUMsQ0FBQztnQkFDVCxNQUFNO2FBQ1A7WUFDRCxPQUFPLENBQUMsQ0FBQztnQkFDUCxNQUFNO2FBQ1A7U0FDRjtJQUNILENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxNQUFNLENBQUMsc0JBQXNCLENBQ2xDLE1BQXdCLEVBQ3hCLFlBQW9CO1FBRXBCLElBQUksbUJBQW1CLEdBQTRDLEVBQUUsQ0FBQztRQUV0RSxrRUFBa0U7UUFDbEUsTUFBTSxzQkFBc0IsR0FBa0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzdELENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FDN0IsQ0FBQztRQUVGLDRIQUE0SDtRQUM1SCx3SUFBd0k7UUFDeEksSUFDRSxDQUFDLFlBQVk7WUFDYixDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7Z0JBQzFCLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FDOUIsWUFBWSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQ3JFLENBQUMsRUFDSjtZQUNBLG1CQUFtQixHQUFHO2dCQUNwQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRTtnQkFDbkUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUU7YUFDcEUsQ0FBQztTQUNIO1FBQ0Qsa0hBQWtIO1FBQ2xILHNIQUFzSDtRQUN0SCx5R0FBeUc7YUFDcEcsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ25DLE1BQU0sYUFBYSxHQUFrQixZQUFZO2lCQUM5QyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQ1YsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELElBQUksYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO2dCQUNyRCxtQkFBbUIsR0FBRyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDckQsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTSxJQUFJLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRTtnQkFDNUQsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQ2pFLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ0osT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsQ0FBQyxDQUNGLENBQUM7YUFDSDtpQkFBTSxJQUNMLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDeEIsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSztnQkFDakQsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUNsRDtnQkFDQSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUMvQixvQkFBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNsQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNWLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO2FBQzFCO1NBQ0Y7UUFDRCx3R0FBd0c7UUFDeEcsc0dBQXNHO1FBQ3RHLHdIQUF3SDtRQUN4SCwrREFBK0Q7YUFDMUQ7WUFDSCxNQUFNLGdCQUFnQixHQUE0QyxFQUFFLENBQUM7WUFFckUsMkRBQTJEO1lBQzNELE1BQU0sZUFBZSxHQUFrQixZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9ELDJEQUEyRDtZQUMzRCxNQUFNLGVBQWUsR0FDbkIsZUFBZSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFOUMsNEZBQTRGO1lBQzVGLHlGQUF5RjtZQUN6RixJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUU7Z0JBQ3ZELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUU1RCxJQUFJLGlCQUFpQixHQUFrQixFQUFFLENBQUM7Z0JBRTFDLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7b0JBQzVCLGlCQUFpQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNwQztxQkFBTSxJQUNMLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFDdkIsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUMvQztvQkFDQSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUMvRDtxQkFBTSxJQUNMLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFDdkIsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSztvQkFDL0MsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUNoRDtvQkFDQSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDcEU7cUJBQU0sSUFDTCxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ3ZCLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFDL0M7b0JBQ0EsaUJBQWlCLEdBQUcsc0JBQXNCLENBQUM7aUJBQzVDO2dCQUVELHlHQUF5RztnQkFDekcscUNBQXFDO2dCQUNyQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDakMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFO3dCQUNsQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7NEJBQ3BCLEtBQUssRUFBRSxJQUFJOzRCQUNYLEtBQUssRUFDSCxZQUFZO2dDQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO3lCQUNwRCxDQUFDLENBQUM7cUJBQ0o7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUVELG1CQUFtQixHQUFHLGdCQUFnQixDQUFDO1NBQ3hDO1FBRUQsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsaUJBQWlCLENBQUMsS0FBZ0I7UUFDaEMsSUFBSSxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDckQsT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3JDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUNsQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVkLFFBQVEsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUN2QixLQUFLLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDbEMsT0FBTyw2QkFBNkIsQ0FBQztZQUN2QyxLQUFLLGFBQWEsQ0FBQyxlQUFlLENBQUM7Z0JBQ2pDLE9BQU8sK0JBQStCLENBQUM7WUFDekMsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDO2dCQUM1QixPQUFPLHVEQUF1RCxDQUFDO1lBQ2pFLEtBQUssYUFBYSxDQUFDLGNBQWMsQ0FBQztnQkFDaEMsT0FBTyw2QkFBNkIsQ0FBQztZQUN2QyxLQUFLLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDbEMsT0FBTyw2QkFBNkIsQ0FBQztZQUN2QyxLQUFLLGFBQWEsQ0FBQyxVQUFVLENBQUM7Z0JBQzVCLElBQ0csS0FBeUIsQ0FBQyxhQUFhO29CQUN4QyxDQUFFLEtBQXlCLENBQUMsY0FBYzt3QkFDdkMsS0FBeUIsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUN2RDtvQkFDQSxPQUFPLCtCQUErQixDQUFDO2lCQUN4QztxQkFBTTtvQkFDTCxPQUFPLDZCQUE2QixDQUFDO2lCQUN0QztZQUNILEtBQUssYUFBYSxDQUFDLFVBQVUsQ0FBQztnQkFDNUIsSUFDRyxLQUFvQixDQUFDLGdCQUFnQixDQUFDLGFBQWE7b0JBQ3BELENBQUUsS0FBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjO3dCQUNuRCxLQUFvQixDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQ25FO29CQUNBLE9BQU8sK0JBQStCLENBQUM7aUJBQ3hDO3FCQUFNO29CQUNMLE9BQU8sNkJBQTZCLENBQUM7aUJBQ3RDO1lBQ0gsS0FBSyxhQUFhLENBQUMsaUJBQWlCLENBQUM7Z0JBQ25DLE9BQU8sNkJBQTZCLENBQUM7WUFDdkMsS0FBSyxhQUFhLENBQUMsUUFBUSxDQUFDO2dCQUMxQixPQUFPLDZCQUE2QixDQUFDO1lBQ3ZDLEtBQUssYUFBYSxDQUFDLG1CQUFtQixDQUFDO2dCQUNyQyxPQUFPLCtCQUErQixDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxtQkFBbUIsQ0FDeEIsVUFBNEIsRUFDNUIsTUFBYyxFQUNkLFFBQVEsR0FBRyxLQUFLLEVBQ2hCLHlCQUF5QixHQUFHLElBQUk7UUFFaEMseUNBQXlDO1FBQ3pDLGlDQUFpQztRQUNqQyxxQ0FBcUM7UUFDckMsdUVBQXVFO1FBRXZFLE1BQU0sUUFBUSxHQUFxQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU5RCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDN0Isd0JBQXdCO1lBQ3RCLFFBQVEsQ0FBQyxVQUFVLENBQ2pCLEtBQUssQ0FBQyxJQUFJLEVBQ1YsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FDM0MsQ0FBQztZQUNGLElBQUkseUJBQXlCLEVBQUU7Z0JBQzdCLHNCQUFzQjtnQkFFdEIsS0FBSyxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7YUFDaEM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksUUFBUSxFQUFFO1lBQ1osUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3BCO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxzQkFBc0IsQ0FDNUIsS0FBZ0IsRUFDaEIsTUFBYztRQUVkLE1BQU0sVUFBVSxHQUF1QixFQUFFLENBQUM7UUFFMUMsSUFBSSxLQUFLLENBQUMsUUFBUTtZQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXpELFFBQVEsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUN2QixLQUFLLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDbEMsSUFBSyxLQUFtQixDQUFDLFNBQVMsRUFBRTtvQkFDbEMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFFLEtBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztpQkFDdkU7Z0JBQ0QsSUFBSyxLQUFtQixDQUFDLFNBQVMsRUFBRTtvQkFDbEMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFFLEtBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztpQkFDdkU7Z0JBQ0QsUUFBUyxLQUFtQixDQUFDLFFBQVEsRUFBRTtvQkFDckMsS0FBSyxZQUFZLENBQUMsR0FBRzt3QkFDbkIsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQzlDLE1BQU07b0JBQ1IsS0FBSyxZQUFZLENBQUMsS0FBSzt3QkFDckIsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2xDLE1BQU07b0JBQ1IsS0FBSyxZQUFZLENBQUMsUUFBUTt3QkFDeEIsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQzlDLE1BQU07aUJBQ1Q7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssYUFBYSxDQUFDLGVBQWUsQ0FBQztnQkFDakMsSUFBSyxLQUF1QixDQUFDLFNBQVMsRUFBRTtvQkFDdEMsVUFBVSxDQUFDLElBQUksQ0FDYixVQUFVLENBQUMsU0FBUyxDQUFFLEtBQXVCLENBQUMsU0FBUyxDQUFDLENBQ3pELENBQUM7aUJBQ0g7Z0JBQ0QsSUFBSyxLQUF1QixDQUFDLFNBQVMsRUFBRTtvQkFDdEMsVUFBVSxDQUFDLElBQUksQ0FDYixVQUFVLENBQUMsU0FBUyxDQUFFLEtBQXVCLENBQUMsU0FBUyxDQUFDLENBQ3pELENBQUM7aUJBQ0g7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssYUFBYSxDQUFDLFFBQVEsQ0FBQztZQUM1QixLQUFLLGFBQWEsQ0FBQyxRQUFRO2dCQUN6QixJQUFJLEtBQUssQ0FBQyxRQUFRO29CQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRSxNQUFNO1lBQ1IsS0FBSyxhQUFhLENBQUMsaUJBQWlCLENBQUM7Z0JBQ25DLElBQUssS0FBd0IsQ0FBQyxjQUFjO29CQUMxQyxJQUFJLEtBQUssQ0FBQyxRQUFRO3dCQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxNQUFNO1NBQ1Q7UUFFRCxPQUFPLElBQUksa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kseUJBQXlCLENBQzlCLGFBQXFCLEVBQ3JCLFNBQWlCO1FBRWpCLElBQUkscUJBQXFCLEdBQ3ZCLElBQUkscUJBQXFCLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXRELG9DQUFvQztRQUNwQywyQkFBMkI7UUFDM0IsNkNBQTZDO1FBQzdDLHdCQUF3QjtRQUN4Qiw0Q0FBNEM7UUFDNUMsT0FBTztRQUNQLG9DQUFvQztRQUNwQyxxREFBcUQ7UUFDckQsd0JBQXdCO1FBQ3hCLDRDQUE0QztRQUM1QyxPQUFPO1FBQ1AsdUJBQXVCO1FBQ3ZCLDhDQUE4QztRQUM5Qyx3QkFBd0I7UUFDeEIsNENBQTRDO1FBQzVDLE9BQU87UUFDUCxvQkFBb0I7UUFDcEIsMkNBQTJDO1FBQzNDLHdCQUF3QjtRQUN4Qiw2Q0FBNkM7UUFDN0MsT0FBTztRQUNQLHlCQUF5QjtRQUN6QixnREFBZ0Q7UUFDaEQsd0JBQXdCO1FBQ3hCLDRDQUE0QztRQUM1QyxPQUFPO1FBQ1Asc0JBQXNCO1FBQ3RCLDZDQUE2QztRQUM3Qyx3QkFBd0I7UUFDeEIsK0NBQStDO1FBQy9DLE9BQU87UUFDUCxLQUFLO1FBQ0wsa0NBQWtDO1FBQ2xDLHVCQUF1QjtRQUN2Qiw2Q0FBNkM7UUFDN0Msd0JBQXdCO1FBQ3hCLDRDQUE0QztRQUM1QyxPQUFPO1FBQ1AsaUNBQWlDO1FBQ2pDLDBEQUEwRDtRQUMxRCx3QkFBd0I7UUFDeEIsNENBQTRDO1FBQzVDLE9BQU87UUFDUCxvQkFBb0I7UUFDcEIsNkNBQTZDO1FBQzdDLHdCQUF3QjtRQUN4Qiw2Q0FBNkM7UUFDN0MsT0FBTztRQUNQLEtBQUs7UUFDTCxPQUFPLHFCQUFxQixDQUFDO0lBQy9CLENBQUM7SUFDRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxHQUFHLEtBQUs7UUFDeEQsSUFBSSxVQUFVLElBQUksU0FBUyxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7WUFDakQsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxPQUFPLENBQUM7UUFDWixNQUFNLFdBQVcsR0FBRztZQUNsQixHQUFHLEVBQUUsR0FBRztZQUNSLEdBQUcsRUFBRSxHQUFHO1lBQ1IsR0FBRyxFQUFFLEdBQUc7U0FDVCxDQUFDO1FBRUYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHNDQUFzQztZQUUvRCxJQUFJLE9BQU8sS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLEdBQUcsSUFBSSxPQUFPLEtBQUssR0FBRyxFQUFFO2dCQUN6RCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3JCO2lCQUFNLElBQUksT0FBTyxLQUFLLEdBQUcsSUFBSSxPQUFPLEtBQUssR0FBRyxJQUFJLE9BQU8sS0FBSyxHQUFHLEVBQUU7Z0JBQ2hFLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFFaEMsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssT0FBTyxFQUFFO29CQUN4QyxzRkFBc0Y7b0JBRXRGLE9BQU8sS0FBSyxDQUFDLENBQUMsaUVBQWlFO2lCQUNoRjthQUNGO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsc0NBQXNDO0lBQ25FLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNJLGVBQWUsQ0FDcEIsWUFBMEIsRUFDMUIsc0JBQWlELElBQUksRUFDckQsV0FBdUQsSUFBSSxFQUMzRCxnQkFBd0MsSUFBSTtRQUU1QyxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFeEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEMsSUFBSSxXQUFXLEdBQVcsSUFBSSxDQUFDO1FBQy9CLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLGdCQUFnQixFQUFFLEVBQUU7U0FDckIsQ0FBQztRQUVGLG9CQUFvQjtRQUNwQix3SEFBd0g7UUFDeEgsSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLFNBQVMsSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtZQUNuRSxZQUFZLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztTQUMxQjtRQUNELElBQUksbUJBQW1CLElBQUksU0FBUyxJQUFJLG1CQUFtQixJQUFJLElBQUksRUFBRTtZQUNuRSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7U0FDMUI7UUFFRCxNQUFNLFlBQVksR0FBOEIsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV6RSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNsQyxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUMxQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxHQUFHLENBQUMsU0FBUyxDQUMzQyxDQUFDO1lBRUYsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3hCLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFDeEQsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO2FBQ3ZEO2lCQUFNO2dCQUNMLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDeEI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksWUFBWSxFQUFFO1lBQ2hCLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDN0IsUUFBUSxLQUFLLENBQUMsU0FBUyxFQUFFO29CQUN2QixLQUFLLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3dCQUNqQyxNQUFNLFdBQVcsR0FDZixLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO3dCQUMzQyxXQUFXOzRCQUNULENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDO3dCQUMvRCxNQUFNO3FCQUNQO29CQUNELEtBQUssYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7d0JBQzlCLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7d0JBQzlELE1BQU07cUJBQ1A7b0JBQ0QsS0FBSyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO3dCQUMvQyxNQUFNO3FCQUNQO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELHVCQUF1QjtRQUV2QiwwQkFBMEI7UUFDMUIsMkdBQTJHO1FBQzNHLG1EQUFtRDtRQUNuRCw2QkFBNkI7UUFDN0IsNkNBQTZDO1FBQzdDLHFDQUFxQztRQUNyQyxtREFBbUQ7UUFDbkQsd0ZBQXdGO1FBQ3hGLDhGQUE4RjtRQUM5Rix5QkFBeUI7UUFDekIsZ0JBQWdCO1FBQ2hCLGdEQUFnRDtRQUNoRCxpRkFBaUY7UUFDakYseUJBQXlCO1FBQ3pCLGdCQUFnQjtRQUNoQiwrQ0FBK0M7UUFDL0MsbUZBQW1GO1FBQ25GLHlCQUF5QjtRQUN6QixnQkFBZ0I7UUFDaEIsWUFBWTtRQUNaLFVBQVU7UUFDVixJQUFJO1FBQ0osNkJBQTZCO1FBRTdCLDJCQUEyQjtRQUMzQix1R0FBdUc7UUFDdkcsNkdBQTZHO1FBQzdHLDZCQUE2QjtRQUM3Qiw2Q0FBNkM7UUFDN0MscUNBQXFDO1FBQ3JDLG1EQUFtRDtRQUNuRCx3RkFBd0Y7UUFDeEYsOEZBQThGO1FBQzlGLHlCQUF5QjtRQUN6QixnQkFBZ0I7UUFDaEIsZ0RBQWdEO1FBQ2hELGlGQUFpRjtRQUNqRix5QkFBeUI7UUFDekIsZ0JBQWdCO1FBQ2hCLCtDQUErQztRQUMvQyxrRUFBa0U7UUFDbEUseUJBQXlCO1FBQ3pCLGdCQUFnQjtRQUNoQixZQUFZO1FBQ1osU0FBUztRQUNULElBQUk7UUFDSiw4QkFBOEI7UUFFOUIsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO1lBQ3ZCLEdBQUc7Z0JBQ0QsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7b0JBQzVELEdBQUc7b0JBQ0gsV0FBVyxDQUFDO1NBQ2Y7UUFFRCxJQUFJLENBQUMsSUFBSTthQUNOLE9BQU8sQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtZQUN4QyxPQUFPLEVBQUUsWUFBWSxDQUFDLEtBQUs7Z0JBQ3pCLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFO2dCQUN2QyxDQUFDLENBQUMsSUFBSTtZQUNSLElBQUksRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FDL0QsWUFBWSxDQUFDLGFBQWEsQ0FDM0I7Z0JBQ0MsQ0FBQyxDQUFDLFVBQVU7Z0JBQ1osQ0FBQyxDQUFDLElBQUk7U0FDVCxDQUFDO2FBQ0QsU0FBUyxDQUNSLENBQUMsR0FBa0MsRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUMzQyxJQUFJLFFBQVEsRUFBRTtnQkFDWixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDZjtRQUNILENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzNDLElBQUksYUFBYSxFQUFFO2dCQUNqQixhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEI7WUFDRCw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQ0YsQ0FBQztJQUVOLENBQUM7O0FBcmtCYSw0QkFBTyxHQUFZLElBQUksT0FBTyxFQUFHLENBQUE7a0hBRHBDLG9CQUFvQjtzSEFBcEIsb0JBQW9CLGNBRm5CLE1BQU07NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcclxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1Hcm91cCxcclxuICBWYWxpZGF0b3JGbixcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGaWVsZCxcclxuICBDb2xTcGFuU2l6ZXNFbnVtLFxyXG4gIEZpZWxkVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uL21vZGVscy9iYXNlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi9tb2RlbHMvY29udGV4dC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEVuZFBvaW50Q29uZmlndXJhdGlvbixcclxuICBFbmRQb2ludERhdGEsXHJcbiAgRW5kUG9pbnREYXRhUGFyYW1zLFxyXG4gIFBhcmFtVHlwZUVudW0sXHJcbiAgUmVxdWVzdE1ldGhvZEVudW0sXHJcbn0gZnJvbSBcIi4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgQXR0YWNobWVudEZpZWxkIH0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvYXR0YWNobWVudEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEltYWdlRmllbGQgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvbGlzdFZhbHVlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgVGV4dGFyZWFGaWVsZCB9IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL3RleHRhcmVhRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBUZXh0TWFza0VudW0sXHJcbiAgVGV4dEZpZWxkLFxyXG4gIFVybFJlZ2V4LFxyXG4gIFRlbFJlZ2V4LFxyXG59IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL3RleHRGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSBcIi4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gXCIuLi9tb2RlbHMvcmVjb3JkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEFycmF5VmFsaWRhdG9ycyB9IGZyb20gXCIuL2N1c3RvbS1mb3JtLXZhbGlkYXRvcnMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZSB9IGZyb20gXCIuL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTcGlubmVyU2VydmljZSB9IGZyb20gXCIuL3NwaW5uZXIuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXRpbGl0eUhlbHBlclNlcnZpY2Uge1xyXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dDogQ29udGV4dCA9IG5ldyBDb250ZXh0KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBzcGlubmVyU2VydmljZTogU3Bpbm5lclNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICBmb3JtdWxhOiBzdHJpbmcsXHJcbiAgICByZWM6IFJlY29yZCxcclxuICAgIGN0eDogYW55XHJcbiAgKTogYW55IHtcclxuICAgIGNvbnN0IGV2YWx1YXRlZFZhbHVlID0gZXZhbChmb3JtdWxhKTtcclxuICAgIHJldHVybiBldmFsdWF0ZWRWYWx1ZSA/IGV2YWx1YXRlZFZhbHVlIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgU2V0Q29udGV4dChjdHg6IENvbnRleHQpIHtcclxuICAgIHRoaXMuY29udGV4dCA9IGN0eDtcclxuICB9XHJcbiAgcHVibGljIHN0YXRpYyBpc051bWVyaWMobikge1xyXG4gICAgcmV0dXJuICFpc05hTihuKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaW5pdFN0eWxlcyhzdHlsZWNzcykge1xyXG4gICAgcmV0dXJuIHN0eWxlY3NzLnNwbGl0KFwiO1wiKS5yZWR1Y2UoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3Qga2V5cGFyID0gYi5zcGxpdChcIjpcIik7XHJcbiAgICAgIGlmIChrZXlwYXIubGVuZ3RoID4gMSkgYVtrZXlwYXJbMF0udHJpbSgpXSA9IGtleXBhclsxXS50cmltKCk7XHJcbiAgICAgIHJldHVybiBhO1xyXG4gICAgfSwge30pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBHZXRGaWVsZFR5cGUoZmllbGQ6IEJhc2VGaWVsZCkge1xyXG4gICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gZGkgdGVzdG9cIl06IHtcclxuICAgICAgICBjb25zdCB0OiBUZXh0RmllbGQgPSBPYmplY3QuYXNzaWduKG5ldyBUZXh0RmllbGQoKSwgZmllbGQpO1xyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIHBlciBpIGNhbXBpIGluIGN1aSBsJ3V0ZW50ZSBkZXZlIHNjcml2ZXJlIGNvbWFuZGkgamF2YXNjcmlwdC5cclxuICAgKiBJbiBiYXNlIGFsbCd1bHRpbW8gY2FyYXR0ZXJlIGRpZ2l0YXRvIHZpZW5lIGltcG9zdGF0byB1biBlbGVuY28gZGkgb2dnZXR0aSBvIHByb3ByaWV0w6AgY2hlIGwndXRlbnRlIGhhIGEgZGlzcG9zaXppb25lIGluIHF1ZWwgbW9tZW50by5cclxuICAgKiBAcGFyYW0gZmllbGRzIEFycmF5IGRpIEJhc2VGaWVsZCBhZ2dpdW50aSBhbGxhIEZvcm1cclxuICAgKiBAcGFyYW0gdHlwZWRGb3JtdWxhIFN0cmluZ2EgZGlnaXRhdGEgZGFsbCd1dGVudGVcclxuICAgKiBAc3VtbWFyeSBJbCBtZXRvZG8gaW1wb3N0YSBpIHN1Z2dlcmltZW50aSBiYXNhbmRvc2kgc3UgMyBjYXNpOlxyXG4gICAqICAxKSBsJ3V0ZW50ZSBub24gaGEgZGlnaXRhdG8gbnVsbGEgbyBsYSBzdHJpbmdhIGRpZ2l0YXRhIGRhbGwndXRlbnRlIGZpbmlzY2UgY29uIHVubyBzcGF6aW8gdnVvdG9cclxuICAgKiAgMikgbGEgc3RyaW5nYSBkaWdpdGF0YSBkYWxsJ3V0ZW50ZSBmaW5pc2NlIGNvbiB1biBcIi5cIlxyXG4gICAqICAzKSBsYSBzdHJpbmdhIGRpZ2l0YXRhIGRhbGwndXRlbnRlIG5vbiBjb2luY2lkZSBjb24gbmVzc3VuIGFsdHJvIGNhc28gc29wcmEgKGZpbmlzY2UgY29uIHVuIGNhcmF0dGVyZSBxdWFsdW5xdWUpXHJcbiAgICovXHJcbiAgcHVibGljIHN0YXRpYyBHZXRBdXRvY29tcGxldGVPcHRpb25zKFxyXG4gICAgZmllbGRzOiBBcnJheTxCYXNlRmllbGQ+LFxyXG4gICAgdHlwZWRGb3JtdWxhOiBzdHJpbmdcclxuICApOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4ge1xyXG4gICAgbGV0IGF1dG9jb21wbGV0ZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiA9IFtdO1xyXG5cclxuICAgIC8vIFJlY3VwZXJvIGkgbm9taSBkaSB0dXR0aSBpIGNhbXBpIGNyZWF0aSBmaW5vIGFkIG9yYSBuZWxsYSBmb3JtLlxyXG4gICAgY29uc3QgYXZhaWxhYmxlUmVjUHJvcGVydGllczogQXJyYXk8c3RyaW5nPiA9IGZpZWxkcy5tYXAoKGYpID0+XHJcbiAgICAgIGYuTGFiZWwuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIE5lbCBjYXNpIGluIGN1aSBsJ3V0ZW50ZSBub24gaGEgaW5zZXJpdG8gbnVsbGEgb3BwdXJlIGxhIHN0cmluZ2EgZmluaXNjZSBjb24gdW5vIHNwYXppbyB2dW90byBvIHVuIHNpbWJvbG8gZGl2ZXJzbyBkYSBcIi5cIlxyXG4gICAgLy8gKHVuIGNhcmF0dGVyZSBub24gYWxmYW51bWVyaWNvKSBpbXBvc3RvIGNvbWUgc3VnZ2VyaW1lbnRpIHNvbG8gXCJyZWNcIiBlIFwiY3R4XCIsIG92dmVybyBnbGkgdW5pY2kgZHVlIG9nZ2V0dGkgYSBjdWkgbCd1dGVudGUgaGEgYWNjZXNzby5cclxuICAgIGlmIChcclxuICAgICAgIXR5cGVkRm9ybXVsYSB8fFxyXG4gICAgICAoIXR5cGVkRm9ybXVsYS5lbmRzV2l0aChcIi5cIikgJiZcclxuICAgICAgICBuZXcgUmVnRXhwKFwiW14wLTlhLXpBLVpfXVwiKS50ZXN0KFxyXG4gICAgICAgICAgdHlwZWRGb3JtdWxhLnN1YnN0cmluZyh0eXBlZEZvcm11bGEubGVuZ3RoIC0gMSwgdHlwZWRGb3JtdWxhLmxlbmd0aClcclxuICAgICAgICApKVxyXG4gICAgKSB7XHJcbiAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXHJcbiAgICAgICAgeyBsYWJlbDogXCJyZWNcIiwgdmFsdWU6ICh0eXBlZEZvcm11bGEgPyB0eXBlZEZvcm11bGEgOiBcIlwiKSArIFwicmVjXCIgfSxcclxuICAgICAgICB7IGxhYmVsOiBcImN0eFwiLCB2YWx1ZTogKHR5cGVkRm9ybXVsYSA/IHR5cGVkRm9ybXVsYSA6IFwiXCIpICsgXCJjdHhcIiB9LFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gICAgLy8gU2UgbGEgc3RyaW5nYSBmaW5pc2NlIGNvbiB1biBcIi5cIiB2dW9sIGRpcmUgY2hlIGwndXRlbnRlIHN0YSBjZXJjYW5kbyBkaSBhY2NlZGVyZSBhZCB1bmEgcHJvcHJpZXTDoCBkaSB1biBvZ2dldHRvXHJcbiAgICAvLyBhIHN1YSBkaXNwb3NpemlvbmUuIFJlY3VwZXJvIGlsIG5vbWUgZGVsbCd1bHRpbW8gb2dnZXR0byBkaWdpdGF0byBkYWxsJ3V0ZW50ZSBlIHNlIGwnb2dnZXR0byBzY2VsdG8gw6ggXCJyZWNcIiBvIFwiY3R4XCJcclxuICAgIC8vIGFsbG9yYSBzdWdnZXJpc2NvIGxlIHByb3ByaWV0w6AgY2hlIGVzaXN0b25vIGFsbCdpbnRlcm5vIGRpIHF1ZXN0aSBvZ2dldHRpIGFsdHJpbWVudGkgbm9uIG1vc3RybyBudWxsYS5cclxuICAgIGVsc2UgaWYgKHR5cGVkRm9ybXVsYS5lbmRzV2l0aChcIi5cIikpIHtcclxuICAgICAgY29uc3QgZm9ybXVsYVBpZWNlczogQXJyYXk8c3RyaW5nPiA9IHR5cGVkRm9ybXVsYVxyXG4gICAgICAgIC5zcGxpdChcIiBcIilcclxuICAgICAgICBbdHlwZWRGb3JtdWxhLnNwbGl0KFwiIFwiKS5sZW5ndGggLSAxXS5zcGxpdChcIi5cIik7XHJcbiAgICAgIGlmIChmb3JtdWxhUGllY2VzW2Zvcm11bGFQaWVjZXMubGVuZ3RoIC0gMl0gPT09IFwicmVjXCIpIHtcclxuICAgICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gYXZhaWxhYmxlUmVjUHJvcGVydGllcy5tYXAoKGYpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7IGxhYmVsOiBmLCB2YWx1ZTogdHlwZWRGb3JtdWxhICsgZiB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAyXSA9PT0gXCJjdHhcIikge1xyXG4gICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBPYmplY3Qua2V5cyhVdGlsaXR5SGVscGVyU2VydmljZS5jb250ZXh0KS5tYXAoXHJcbiAgICAgICAgICAoZikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4geyBsYWJlbDogZiwgdmFsdWU6IHR5cGVkRm9ybXVsYSArIGYgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGZvcm11bGFQaWVjZXMubGVuZ3RoID4gMiAmJlxyXG4gICAgICAgIGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAzXSA9PT0gXCJjdHhcIiAmJlxyXG4gICAgICAgIGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAyXSA9PT0gXCJVc2VyXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgYXV0b2NvbXBsZXRlT3B0aW9ucyA9IE9iamVjdC5rZXlzKFxyXG4gICAgICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dC5Vc2VyXHJcbiAgICAgICAgKS5tYXAoKGYpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7IGxhYmVsOiBmLCB2YWx1ZTogdHlwZWRGb3JtdWxhICsgZiB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gSW4gdHV0dGkgZ2xpIGFsdHJpIGNhc2ksIG92dmVybyBxdWFuZG8gbGEgc3RyaW5nYSBkaWdpdGF0YSBmaW5pc2NlIGNvbiB1biBjYXJhdHRlcmUgZGl2ZXJzbyBkYSBxdWVsbGlcclxuICAgIC8vIGNvbnRyb2xsYXRpIGZpbm9yYSwgdnVvbCBkaXJlIGNoZSBsJ3V0ZW50ZSBzdGEgZGlnaXRhbnRvIGlsIG5vbWUgZGkgdW4gb2dnZXR0bywgdW5hIHByb3ByaWV0w6AgbyB1bmFcclxuICAgIC8vIGZ1bnppb25lIGphdmFzY3JpcHQuIENvbnRyb2xsbyBsYSBwYXJvbGEgY2hlIGwndXRlbnRlIHN0YSBkaWdpdGFuZG8gZSBzZSBmYSBwYXJ0ZSBkaSB1bm8gZGVnbGkgb2dnZXR0aSBhIGRpc3Bvc2l6aW9uZVxyXG4gICAgLy8gbyB1bmEgcHJvcHJpZXTDoCBkaSBlc3NpIGFsbG9yYSBzdWdnZXJpc2NvIGkgcG9zc2liaWxpIG1hdGNoLlxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IGF2YWlsYWJsZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiA9IFtdO1xyXG5cclxuICAgICAgLy8gUHJlbmRvIHR1dHRpIGkgYmxvY2NoaSBkaSBjYXJhdHRlcmkgZGlnaXRhdGkgZGFsbCd1dGVudGVcclxuICAgICAgY29uc3QgYWxsRm9ybXVsYVdvcmRzOiBBcnJheTxzdHJpbmc+ID0gdHlwZWRGb3JtdWxhLnNwbGl0KFwiIFwiKTtcclxuICAgICAgLy8gUHJlbmRvIGwndWx0aW1vIGJsb2NjbyBkaSBjYXJhdHRlcmkgZGlnaXRhdG8gZGFsbCd1dGVudGVcclxuICAgICAgY29uc3QgbGFzdFR5cGVkU3RyaW5nOiBzdHJpbmcgPVxyXG4gICAgICAgIGFsbEZvcm11bGFXb3Jkc1thbGxGb3JtdWxhV29yZHMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAvLyBTZSBsYSBsJ3VsdGltYSBzdHJpbmdhIGRpZ2l0YXRhIG5vbiBjb250aWVuZSBjYXJhdHRlcmkgc3BlY2lhbGkgYWxsb3JhIHNwbGl0dG8gbGEgc3RyaW5nYVxyXG4gICAgICAvLyBzdWkgXCIuXCIgZSBpbXBvc3RvIGkgc3VnZ2VyaW1lbnRpIGluIGJhc2UgYWwgcGF0aCBkZWxsYSBwcm9ycGlldMOgIGNoZSBzaSBzdGEgZGlnaXRhbmRvLlxyXG4gICAgICBpZiAoIW5ldyBSZWdFeHAoXCJbXjAtOWEtekEtWl8uXVwiKS50ZXN0KGxhc3RUeXBlZFN0cmluZykpIHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0eVBhdGggPSBsYXN0VHlwZWRTdHJpbmcuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGxhc3RUeXBlZFdvcmsgPSBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICBsZXQgcHJvcGVydGllc1RvQ2hlY2s6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHByb3BlcnR5UGF0aC5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgcHJvcGVydGllc1RvQ2hlY2sgPSBbXCJyZWNcIiwgXCJjdHhcIl07XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIHByb3BlcnR5UGF0aC5sZW5ndGggPiAxICYmXHJcbiAgICAgICAgICBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDJdID09PSBcImN0eFwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9DaGVjayA9IE9iamVjdC5rZXlzKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmNvbnRleHQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBwcm9wZXJ0eVBhdGgubGVuZ3RoID4gMiAmJlxyXG4gICAgICAgICAgcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAzXSA9PT0gXCJjdHhcIiAmJlxyXG4gICAgICAgICAgcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAyXSA9PT0gXCJVc2VyXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gT2JqZWN0LmtleXMoVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dC5Vc2VyKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgcHJvcGVydHlQYXRoLmxlbmd0aCA+IDEgJiZcclxuICAgICAgICAgIHByb3BlcnR5UGF0aFtwcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMl0gPT09IFwicmVjXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gYXZhaWxhYmxlUmVjUHJvcGVydGllcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEVzZWd1byBpbCBjb250cm9sbG8gc3VsbGUgcHJvcHJpZXTDoCByZWN1cGVyYXRlLCBhZ2dpdW5nbyBhaSBzdWdnZXJpbWVudGkgdHV0dGkgaSBub21pIGNoZSBpbml6aWFubyBjb25cclxuICAgICAgICAvLyBxdWVsbG8gY2hlIHN0YSBkaWdpdGFuZG8gbCd1dGVudGUuXHJcbiAgICAgICAgcHJvcGVydGllc1RvQ2hlY2suZm9yRWFjaCgocHJvcCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHByb3Auc3RhcnRzV2l0aChsYXN0VHlwZWRXb3JrKSkge1xyXG4gICAgICAgICAgICBhdmFpbGFibGVPcHRpb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgIGxhYmVsOiBwcm9wLFxyXG4gICAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgICAgdHlwZWRGb3JtdWxhICtcclxuICAgICAgICAgICAgICAgIHByb3Auc3Vic3RyaW5nKGxhc3RUeXBlZFdvcmsubGVuZ3RoLCBwcm9wLmxlbmd0aCksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gYXZhaWxhYmxlT3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXV0b2NvbXBsZXRlT3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBkYWxsJ2h0bWwgcGVyIGltcG9zdGFyZSBsZSBjbGFzc2kgY3NzIHBlciB2aXN1YWxpenphcmUgaWwgY2FtcG8gYWxsJ2ludGVybm8gZGVsbGEgZm9ybS5cclxuICAgKiBTZSBwZXIgaWwgZmllbGQgc29ubyBzdGF0ZSBzcGVjaWZpY2F0ZSBkZWxsZSBjbGFzc2kgYWxsb3JhIHZlbmdvbm8gYXBwbGNhdGUgcXVlbGxlLCBhbHRyaW1lbnRpIHZlbmdvbm8gdXNhdGVcclxuICAgKiBkZWxsZSBjbGFzc2kgZGkgZGVmYXVsdC5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIGRhIHZpc3VhbGl6emFyZS5cclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1bmEgc3RyaW5nYSBjb250ZW5lbnRlIGxlIGNsYXNzaSBjc3MgZGEgYXBwbGljYXJlLlxyXG4gICAqL1xyXG4gIGdldEZpZWxkU3lsZUNsYXNzKGZpZWxkOiBCYXNlRmllbGQpOiBzdHJpbmcge1xyXG4gICAgaWYgKGZpZWxkLkNvbFNwYW5TaXplcyAmJiBmaWVsZC5Db2xTcGFuU2l6ZXMubGVuZ3RoID4gMClcclxuICAgICAgcmV0dXJuIGZpZWxkLkNvbFNwYW5TaXplcy5tYXAoKHNpemUpID0+XHJcbiAgICAgICAgQ29sU3BhblNpemVzRW51bVtzaXplXS50b1N0cmluZygpXHJcbiAgICAgICkuam9pbihcIiBcIik7XHJcblxyXG4gICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gZGkgdGVzdG9cIl06XHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFyZWEgZGkgdGVzdG9cIl06XHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTJcIjtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQm9vbGVhbm9cIl06XHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIjtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRGF0YSBlL28gb3JhXCJdOlxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXTpcclxuICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTRcIjtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQWxsZWdhdG9cIl06XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuSXNNdWx0aUF0dGFjaCB8fFxyXG4gICAgICAgICAgKChmaWVsZCBhcyBBdHRhY2htZW50RmllbGQpLk1ldGFkYXRhRmllbGRzICYmXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBBdHRhY2htZW50RmllbGQpLk1ldGFkYXRhRmllbGRzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMlwiO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTRcIjtcclxuICAgICAgICB9XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lXCJdOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLklzTXVsdGlBdHRhY2ggfHxcclxuICAgICAgICAgICgoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5NZXRhZGF0YUZpZWxkcyAmJlxyXG4gICAgICAgICAgICAoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5NZXRhZGF0YUZpZWxkcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTJcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkxvb2t1cFwiXTpcclxuICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTRcIjtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl06XHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGlsIEZvcm1Hcm91cCBjaGUgcmFwcHJlc2VudGEgdW5hIEZvcm0gYSBwYXJ0aXJlIGRhaSBzdW9pIEJhc2VGaWVsZC5cclxuICAgKiBAcGFyYW0gZm9ybUZpZWxkcyBMaXN0YSBkZWkgQmFzZUZpZWxkIGNoZSBjb21wb25nb25vIGxhIGZvcm0uXHJcbiAgICogQHBhcmFtIHJlY29yZCBPZ2dldHRvIGRpIHRpcG8gUmVjb3JkIGNoZSBjb250aWVuZSBpIHZhbG9yaSBkZWkgY2FtcGkuXHJcbiAgICogQHBhcmFtIG9ubHlWaWV3IFNlIFRSVUUgZGlzYWJpbGl0YSBsYSBmb3JtIHBlciByZW5kZXJsYSBpbiBzb2xhIGxldHR1cmEuXHJcbiAgICogQHBhcmFtIGluY2x1ZGVDdXJyZW50Rm9ybUluRmllbGQgU2UgVFJVRSBwb3BvbGEgbGEgcHJvcHJpZXTDoCBGb3JtRm9ybUdyb3VwIGFsbCdpbnRlcm5vIGRpIG9nbmkgQmFzZUZpZWxkIGNvbiBpbCBGb3JtR3JvdXAgY29ycmVudGUuXHJcbiAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW4gRm9ybUdyb3VwIHJhcHByZXNlbnRhdGUgbGEgRm9ybSBhIGN1aSBhcHBhcnRlbmdvbm8gaSBCYXNlRmllbGQgcmljZXZ1dGkgaW4gaW5wdXQuXHJcbiAgICovXHJcbiAgcHVibGljIENyZWF0ZUZvcm1Gb3JtR3JvdXAoXHJcbiAgICBmb3JtRmllbGRzOiBBcnJheTxCYXNlRmllbGQ+LFxyXG4gICAgcmVjb3JkOiBSZWNvcmQsXHJcbiAgICBvbmx5VmlldyA9IGZhbHNlLFxyXG4gICAgaW5jbHVkZUN1cnJlbnRGb3JtSW5GaWVsZCA9IHRydWVcclxuICApOiBVbnR5cGVkRm9ybUdyb3VwIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiZm9ybUZpZWxkc1wiLCBmb3JtRmllbGRzKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVjb3JkXCIsIHJlY29yZCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcIm9ubHlWaWV3XCIsIG9ubHlWaWV3KTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiaW5jbHVkZUN1cnJlbnRGb3JtSW5GaWVsZFwiLCBpbmNsdWRlQ3VycmVudEZvcm1JbkZpZWxkKTtcclxuXHJcbiAgICBjb25zdCBmb3JtRm9ybTogVW50eXBlZEZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoW10pO1xyXG5cclxuICAgIGZvcm1GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgIC8vICAgY29uc29sZS5sb2coZmllbGQpO1xyXG4gICAgICBmb3JtRm9ybS5hZGRDb250cm9sKFxyXG4gICAgICAgIGZpZWxkLk5hbWUsXHJcbiAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEZvcm1Db250cm9sKGZpZWxkLCByZWNvcmQpXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbmNsdWRlQ3VycmVudEZvcm1JbkZpZWxkKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmllbGQpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgZmllbGQuRm9ybUZvcm1Hcm91cCA9IGZvcm1Gb3JtO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChvbmx5Vmlldykge1xyXG4gICAgICBmb3JtRm9ybS5kaXNhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcm1Gb3JtO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRnVuemlvbmUgcGVyIGNyZWFyZSBlIGFnZ2l1bmdlcmUgYWwgRm9ybUdyb3VwIHJhcHByZXNlbnRhbnRlIGxhIGZvcm0gdW4gbnVvdm8gRm9ybUNvbnRyb2wgYSBwYXJ0aXJlIGRhIHVuIEZpZWxkLlxyXG4gICAqIEluIG51b3ZvIEZvcm1Db250cm9sIGF2csOgIGlsIG5vbWUgZGVsIGNhbXBvIHBhc3NhdG8gZSB2ZXJyYW5ubyBpbXBvc3RhdGkgaSBWYWxpZGF0b3JzIGluIGJhc2UgYWwgdGlwbyBkZWwgY2FtcG8gc3Rlc3NvLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBCYXNlRmllbGQgcGVyIGN1aSBjcmVhcmUgaWwgRm9ybUNvbnRyb2wgZGEgaW5zZXJpcmUgbmVsIEZvcm1Hcm91cCBkZWxhIGZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWVsZEZvcm1Db250cm9sKFxyXG4gICAgZmllbGQ6IEJhc2VGaWVsZCxcclxuICAgIHJlY29yZDogUmVjb3JkXHJcbiAgKTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgIGNvbnN0IHZhbGlkYXRvcnM6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xyXG5cclxuICAgIGlmIChmaWVsZC5SZXF1aXJlZCkgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgIHN3aXRjaCAoZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIGRpIHRlc3RvXCJdOlxyXG4gICAgICAgIGlmICgoZmllbGQgYXMgVGV4dEZpZWxkKS5NYXhMZW5naHQpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCgoZmllbGQgYXMgVGV4dEZpZWxkKS5NYXhMZW5naHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChmaWVsZCBhcyBUZXh0RmllbGQpLk1pbkxlbmdodCkge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKChmaWVsZCBhcyBUZXh0RmllbGQpLk1pbkxlbmdodCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzd2l0Y2ggKChmaWVsZCBhcyBUZXh0RmllbGQpLlRleHRNYXNrKSB7XHJcbiAgICAgICAgICBjYXNlIFRleHRNYXNrRW51bS5Vcmw6XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oVXJsUmVnZXgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFRleHRNYXNrRW51bS5FbWFpbDpcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMuZW1haWwpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgVGV4dE1hc2tFbnVtLlRlbGVmb25vOlxyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKFRlbFJlZ2V4KSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQXJlYSBkaSB0ZXN0b1wiXTpcclxuICAgICAgICBpZiAoKGZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1heExlbmdodCkge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWF4TGVuZ2h0KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChmaWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NaW5MZW5naHQpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoKGZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1pbkxlbmdodClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW0uQWxsZWdhdG86XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5JbW1hZ2luZTpcclxuICAgICAgICBpZiAoZmllbGQuUmVxdWlyZWQpIHZhbGlkYXRvcnMucHVzaChBcnJheVZhbGlkYXRvcnMubWluTGVuZ2h0KDEpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOlxyXG4gICAgICAgIGlmICgoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLklzTXVsdGlDaG9pY2hlKVxyXG4gICAgICAgICAgaWYgKGZpZWxkLlJlcXVpcmVkKSB2YWxpZGF0b3JzLnB1c2goQXJyYXlWYWxpZGF0b3JzLm1pbkxlbmdodCgxKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wocmVjb3JkW2ZpZWxkLk5hbWVdLCB2YWxpZGF0b3JzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY29uZmlndXJhcmUgZ2xpIGVuZHBvaW50IGRhIHVzYXJlIGRpIGRlZmF1bHQgYSBwYXJ0aXJlIGRhbGwndXJsIGJhc2UgZGVsIHNlcnZlclxyXG4gICAqIGEgY3VpIHNpIGRldmUgY29ubmV0dGVyZSBlIGFsIHRva2VuIGRhIHBhc3NhcmUgcGVyIGF1dGVudGljYXJzaS5cclxuICAgKiBAcGFyYW0gYmFzZVNlcnZlclVybCBTdHJpbmdhIGRlbGwndXJsIGJhc2UgZGVsIHNlcnZlciAoZXM6IFwiaHR0cDovL2xvY2FsaG9zdDo1MDAwXCIpLlxyXG4gICAqIEBwYXJhbSB1c2VyVG9rZW4gVG9rZW4gZGVsbCd1dGVudGUgbG9nZ2F0byBkYSB1c2FyZSBwZXIgYXV0ZW50aWNhcnNpIHNlIG5lY2Vzc2FyaW8uXHJcbiAgICogQHJldHVybnMgUmVzaXR1aXNjZSBsYSBjb25maWd1cmF6aW9uZSBjb21wbGV0YSBkZWdsaSBlbmRQb2ludCBkYSB1c2FyZSBkaSBkZWZhdWx0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBDb25maWd1cmVEZWZhdWx0RW5kUG9pbnRzKFxyXG4gICAgYmFzZVNlcnZlclVybDogc3RyaW5nLFxyXG4gICAgdXNlclRva2VuOiBzdHJpbmdcclxuICApOiBFbmRQb2ludENvbmZpZ3VyYXRpb24ge1xyXG4gICAgbGV0IGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uID1cclxuICAgICAgbmV3IEVuZFBvaW50Q29uZmlndXJhdGlvbihiYXNlU2VydmVyVXJsLCB1c2VyVG9rZW4pO1xyXG5cclxuICAgIC8vIGVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzID0ge1xyXG4gICAgLy8gICBHZXRCeUZvcm1JREVuZFBvaW50OiB7XHJcbiAgICAvLyAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL3YxL2dldGFsbFwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBHZXRBbGxCeUVudEFuZFVzZXJJREVuZFBvaW50OiB7XHJcbiAgICAvLyAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL3YxL0dldEFsbEJ5VXNlcklEXCIsXHJcbiAgICAvLyAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgIC8vICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5HRVQsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIEdldEJ5SURFbmRQb2ludDoge1xyXG4gICAgLy8gICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS92MS9nZXRCeUlEXCIsXHJcbiAgICAvLyAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgIC8vICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5HRVQsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIFNhdmVFbmRQb2ludDoge1xyXG4gICAgLy8gICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS92MS9zYXZlXCIsXHJcbiAgICAvLyAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgIC8vICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5QT1NULFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBEdXBsaWNhdGVFbmRQb2ludDoge1xyXG4gICAgLy8gICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS92MS9kdXBsaWNhdGVcIixcclxuICAgIC8vICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgLy8gICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLkdFVCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgRGVsZXRlRW5kUG9pbnQ6IHtcclxuICAgIC8vICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvZGVsZXRlXCIsXHJcbiAgICAvLyAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgIC8vICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5ERUxFVEUsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyB9O1xyXG4gICAgLy8gZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zID0ge1xyXG4gICAgLy8gICBHZXRCeUlERW5kUG9pbnQ6IHtcclxuICAgIC8vICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvY29uZi9mb3JtXCIsXHJcbiAgICAvLyAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgIC8vICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5HRVQsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIEdldEJ5SURBbmRWZXJzaW9uRW5kUG9pbnQ6IHtcclxuICAgIC8vICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvY29uZi9HZXRCeUlEQW5kVmVyc2lvblwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBTYXZlRW5kUG9pbnQ6IHtcclxuICAgIC8vICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvY29uZi9mb3JtXCIsXHJcbiAgICAvLyAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgIC8vICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5QT1NULFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gfTtcclxuICAgIHJldHVybiBlbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGV4cHJlc3Npb24gcHJlbmRlIHVuYSBzdHJpbmdhIGluIGlucHV0IGUgdmVyaWZpY2EgY2hlIG9nbmkgcGFyZW50ZXNpIGFwZXJ0YSB2ZW5nYSBhbmNoZSBjaGl1c2FcclxuICAgKiBAcmV0dXJucyB0cnVlIHNlIGxlIHBhcmVudGVzaSBzb25vIHBhcmkgZSBvZ25pIHBhcmVudGVzaSBjaGl1ZGUgc2Ugc3Rlc3NhLCBmYWxzZSBzZSBtYW5jYW5vIHBhcmVudGVzaSBvIG5vbiB2ZW5nb25vIGNoaXVzZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgc3RyaW5nU2FuaXRpemVyKGV4cHJlc3Npb24sIHJlcXVpcmVkID0gZmFsc2UpIHtcclxuICAgIGlmIChleHByZXNzaW9uID09IHVuZGVmaW5lZCB8fCBleHByZXNzaW9uID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHJlcXVpcmVkID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgfVxyXG4gICAgbGV0IHN0YWNrID0gW107XHJcbiAgICBsZXQgY3VycmVudDtcclxuICAgIGNvbnN0IG1hdGNoTG9va3VwID0ge1xyXG4gICAgICBcIihcIjogXCIpXCIsXHJcbiAgICAgIFwiW1wiOiBcIl1cIixcclxuICAgICAgXCJ7XCI6IFwifVwiLFxyXG4gICAgfTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY3VycmVudCA9IGV4cHJlc3Npb25baV07IC8vZWFzaWVyIHRoYW4gd3JpdGluZyBpdCBvdmVyIGFuZCBvdmVyXHJcblxyXG4gICAgICBpZiAoY3VycmVudCA9PT0gXCIoXCIgfHwgY3VycmVudCA9PT0gXCJbXCIgfHwgY3VycmVudCA9PT0gXCJ7XCIpIHtcclxuICAgICAgICBzdGFjay5wdXNoKGN1cnJlbnQpO1xyXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT09IFwiKVwiIHx8IGN1cnJlbnQgPT09IFwiXVwiIHx8IGN1cnJlbnQgPT09IFwifVwiKSB7XHJcbiAgICAgICAgY29uc3QgbGFzdEJyYWNrZXQgPSBzdGFjay5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKG1hdGNoTG9va3VwW2xhc3RCcmFja2V0XSAhPT0gY3VycmVudCkge1xyXG4gICAgICAgICAgLy9pZiB0aGUgc3RhY2sgaXMgZW1wdHksIC5wb3AoKSByZXR1cm5zIHVuZGVmaW5lZCwgc28gdGhpcyBleHByZXNzaW9uIGlzIHN0aWxsIGNvcnJlY3RcclxuXHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vdGVybWluYXRlIGltbWVkaWF0ZWx5IC0gbm8gbmVlZCB0byBjb250aW51ZSBzY2FubmluZyB0aGUgc3RyaW5nXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN0YWNrLmxlbmd0aCA9PT0gMDsgLy9hbnkgZWxlbWVudHMgbWVhbiBicmFja2V0cyBsZWZ0IG9wZW5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgZGF0YSBsYSBjb25maWd1cmF6aW9uZSBkaSB1biBlbmRwb2ludCBjb3N0cnVpc2NlIGwndXJsIGRhIGNoaWFtYXJlLCBnbGkgZXZlbnR1YWxpIHBhcmFtZXRyaVxyXG4gICAqIGRhIHBhc3NhcmUgKG5lbCBib2R5IG8gbmVsbGEgcm90dGEpIGVkIGVmZmV0dHVhIGxhIGNoaWFtYXRhLiBBbCB0ZXJtaW5lIGRlbGxhIGNoaWFtYXRhIGVzZWd1ZSBsZSBldmVudHVhbGlcclxuICAgKiBmdW56aW9uaSBkaSBjYWxsYmFjayAoc2lhIGluIGNhc28gZGkgc3VjY2Vzc28gY2hlIGluIGNhc28gZGkgZXJyb3JlKSBwYXNzYXRlIGluIGlucHV0LlxyXG4gICAqIEBwYXJhbSBlbmRQb2ludERhdGEgQ29maWd1cmF6aW9uZSBkZWxsJ2VuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAqIEBwYXJhbSBkeW5hbWljTW9kdWxlUGFyYW1zIEFycmF5IGRlaSBwYXJhbWV0cmkgYWdnaXVudGkgZGFsIG1vZHVsbyBkaW5hbWljbyBhIHF1ZWxsaSBnacOgIGNvbmZpZ3VyYXRpXHJcbiAgICogKGFkIGVzZW1waW8gaWwgcmVjb3JkIG8gbGEgZm9ybSBkYSBzYWx2YXJlIG9wcHVyZSBsJ0lEIHBlciByZWN1cGVyYXJlIHVuYSBwYXJ0aWNvbGFyZSBlbnRpdMOgKS5cclxuICAgKiBAcGFyYW0gY2FsbGJhY2sgTWV0b2RvIGRhIGVzZWd1aXJlIGluIGNhc28gZGkgc3VjY2Vzc28gZG9wbyBsYSBjaGlhbWF0YSBodHRwLlxyXG4gICAqIE5PVEE6IGluIGlucHV0IHZpZW5lIHBhc3NhdGEgbGEgcmlzcG9zdGEgZGVsbGEgY2hpYW1hdGEgc3Rlc3NhLlxyXG4gICAqIEBwYXJhbSBlcnJvckNhbGxCYWNrIE1ldG9kbyBkYSBlc2VndWlyZSBpbiBjYXNvIGRpIGVycm9yZSBkb3BvIGxhIGNoaWFtYXRhIGh0dHAuXHJcbiAgICogTk9UQTogaW4gaW5wdXQgdmllbmUgcGFzc2F0byBsJ2Vycm9yZSBnZW5lcmF0byBkZWxsYSBjaGlhbWF0YSBzdGVzc2EuXHJcbiAgICovXHJcbiAgcHVibGljIFJ1bkVuZFBvaW50Q2FsbChcclxuICAgIGVuZFBvaW50RGF0YTogRW5kUG9pbnREYXRhLFxyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9IG51bGwsXHJcbiAgICBjYWxsYmFjazogKGU6IEZvcm0gfCBSZWNvcmQgfCBBcnJheTxSZWNvcmQ+KSA9PiB2b2lkID0gbnVsbCxcclxuICAgIGVycm9yQ2FsbEJhY2s6IChlcnI6IHVua25vd24pID0+IHZvaWQgPSBudWxsXHJcbiAgKTogdm9pZCB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmFkZFJlcXVlc3RDb3VudGVyKCk7XHJcblxyXG4gICAgbGV0IHVybCA9IGAke2VuZFBvaW50RGF0YS5Vcmx9YDtcclxuICAgIGxldCBxdWVyeVBhcmFtczogc3RyaW5nID0gbnVsbDtcclxuICAgIGNvbnN0IGJvZHlQYXJhbXMgPSB7XHJcbiAgICAgIEFkZGl0aW9uYWxQYXJhbXM6IHt9LFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyNyZWdpb24gbWVyZ2VQYXJhbVxyXG4gICAgLy8gdW5pc2NvIGkgZGF0aSBkaSBkZWZhdWx0IGRlZmluaXRpIG5lbGxhIGNvbmZpZ3VyYXppb25lIGRlbGxhIGNoaWFtYXRhIGNvbiBpIGRhdGkgY2hlIGltcG9zdG8gbmVsbGEgY2hpYW1hdGEgc3BlY2lmaWNhXHJcbiAgICBpZiAoZW5kUG9pbnREYXRhLlBhcmFtcyA9PSB1bmRlZmluZWQgfHwgZW5kUG9pbnREYXRhLlBhcmFtcyA9PSBudWxsKSB7XHJcbiAgICAgIGVuZFBvaW50RGF0YS5QYXJhbXMgPSBbXTtcclxuICAgIH1cclxuICAgIGlmIChkeW5hbWljTW9kdWxlUGFyYW1zID09IHVuZGVmaW5lZCB8fCBkeW5hbWljTW9kdWxlUGFyYW1zID09IG51bGwpIHtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1lcmdlZFBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9IFsuLi5lbmRQb2ludERhdGEuUGFyYW1zXTtcclxuXHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLmZvckVhY2goKG9iaikgPT4ge1xyXG4gICAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gbWVyZ2VkUGFyYW1zLmZpbmRJbmRleChcclxuICAgICAgICAoaXRlbSkgPT4gaXRlbS5QYXJhbU5hbWUgPT09IG9iai5QYXJhbU5hbWVcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIG1lcmdlZFBhcmFtc1tleGlzdGluZ0luZGV4XS5QYXJhbVZhbHVlID0gb2JqLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgbWVyZ2VkUGFyYW1zW2V4aXN0aW5nSW5kZXhdLlBhcmFtVHlwZSA9IG9iai5QYXJhbVR5cGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWVyZ2VkUGFyYW1zLnB1c2gob2JqKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKG1lcmdlZFBhcmFtcykge1xyXG4gICAgICBtZXJnZWRQYXJhbXMuZm9yRWFjaCgocGFyYW0pID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHBhcmFtLlBhcmFtVHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl06IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RyaW5nUGFyYW06IHN0cmluZyA9XHJcbiAgICAgICAgICAgICAgcGFyYW0uUGFyYW1OYW1lICsgXCI9XCIgKyBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9XHJcbiAgICAgICAgICAgICAgKHF1ZXJ5UGFyYW1zID09IG51bGwgPyBcIlwiIDogcXVlcnlQYXJhbXMgKyBcIiZcIikgKyBzdHJpbmdQYXJhbTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bXCJJbiByb3V0ZVwiXToge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAodXJsLmVuZHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIikgKyBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl06IHtcclxuICAgICAgICAgICAgYm9keVBhcmFtc1twYXJhbS5QYXJhbU5hbWVdID0gcGFyYW0uUGFyYW1WYWx1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vI2VuZHJlZ2lvbiBtZXJnZVBhcmFtXHJcblxyXG4gICAgLy8jcmVnaW9uIGFkZERlZmF1bHRQYXJhbXNcclxuICAgIC8vIFNlIG5lbGxhIGNvbmZpZ3VyYXppb25lIHNvbm8gc3RhdGkgZGVmaW5pdGkgcGFyYW1ldHJpIGRhIGFnZ2l1bmdlcmUgYWxsYSBjaGlhbWF0YSBxdWVzdGkgdmVuZ29ubyBjaWNsYXRpXHJcbiAgICAvLyBlIGFnZ2l1bnRpIG5lbCBwdW50byBpbiBjdWkgZGV2b25vIGVzc2VyZSB1c2F0aS5cclxuICAgIC8vIGlmIChlbmRQb2ludERhdGEuUGFyYW1zKSB7XHJcbiAgICAvLyAgICAgZW5kUG9pbnREYXRhLlBhcmFtcy5mb3JFYWNoKHBhcmFtID0+IHtcclxuICAgIC8vICAgICAgICAgc3dpdGNoIChwYXJhbS5QYXJhbVR5cGUpIHtcclxuICAgIC8vICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnUXVlcnkgcGFyYW0nXToge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ1BhcmFtOiBzdHJpbmcgPSBwYXJhbS5QYXJhbU5hbWUgKyBcIj1cIiArIHBhcmFtLlBhcmFtVmFsdWU7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSAocXVlcnlQYXJhbXMgPT0gbnVsbCA/IFwiXCIgOiBxdWVyeVBhcmFtcyArIFwiJlwiKSArIHN0cmluZ1BhcmFtO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydJbiByb3V0ZSddOiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdXJsID0gdXJsICsgKHVybC5lbmRzV2l0aChcIi9cIikgPyBcIlwiIDogXCIvXCIpICsgcGFyYW0uUGFyYW1WYWx1ZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnSW4gQm9keSddOiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgYm9keVBhcmFtcy5BZGRpdGlvbmFsUGFyYW1zW3BhcmFtLlBhcmFtTmFtZV0gPSBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyNlbmRyZWdpb24gYWRkRGVmYXVsdFBhcmFtc1xyXG5cclxuICAgIC8vI3JlZ2lvbiBhZGRTcGVjaWZpY1BhcmFtc1xyXG4gICAgLy8gU2Ugc29ubyBzdGF0aSBwYXNzYXRpIHBhcmFtZXRyaSBkYSBhZ2dpdW5nZXJlIGFsbGEgY2hpYW1hdGEgZGVmaW5pdGkgYWxsJ2ludGVybm8gZGVsIG1vZHVsbyBkaW5hbWljb1xyXG4gICAgLy8gdmVuZ29ubyBjaWNsYXRpIGUgYWdnaXVudGkgbmVsIHB1bnRvIGluIGN1aSBkZXZvbm8gZXNzZXJlIHVzYXRpIGRvcG8gcXVlbGxpIGRlZmluaXRpIG5lbGxhIGNvbmZpZ3VyYXppb25lLlxyXG4gICAgLy8gaWYgKGR5bmFtaWNNb2R1bGVQYXJhbXMpIHtcclxuICAgIC8vICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLmZvckVhY2gocGFyYW0gPT4ge1xyXG4gICAgLy8gICAgICAgICBzd2l0Y2ggKHBhcmFtLlBhcmFtVHlwZSkge1xyXG4gICAgLy8gICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydRdWVyeSBwYXJhbSddOiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nUGFyYW06IHN0cmluZyA9IHBhcmFtLlBhcmFtTmFtZSArIFwiPVwiICsgcGFyYW0uUGFyYW1WYWx1ZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyA9IChxdWVyeVBhcmFtcyA9PSBudWxsID8gXCJcIiA6IHF1ZXJ5UGFyYW1zICsgXCImXCIpICsgc3RyaW5nUGFyYW07XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ0luIHJvdXRlJ106IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyAodXJsLmVuZHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIikgKyBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J106IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBib2R5UGFyYW1zW3BhcmFtLlBhcmFtTmFtZV0gPSBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfSlcclxuICAgIC8vIH1cclxuICAgIC8vI2VuZHJlZ2lvbiBhZGRTcGVjaWZpY1BhcmFtc1xyXG5cclxuICAgIGlmIChxdWVyeVBhcmFtcyAhPSBudWxsKSB7XHJcbiAgICAgIHVybCA9XHJcbiAgICAgICAgKHVybC5lbmRzV2l0aChcIi9cIikgPyB1cmwuc3Vic3RyaW5nKDAsIHVybC5sZW5ndGggLSAxKSA6IHVybCkgK1xyXG4gICAgICAgIFwiP1wiICtcclxuICAgICAgICBxdWVyeVBhcmFtcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmh0dHBcclxuICAgICAgLnJlcXVlc3QoZW5kUG9pbnREYXRhLlJlcXVlc3RNZXRob2QsIHVybCwge1xyXG4gICAgICAgIGhlYWRlcnM6IGVuZFBvaW50RGF0YS5Ub2tlblxyXG4gICAgICAgICAgPyB7IEF1dGhvcml6YXRpb246IGVuZFBvaW50RGF0YS5Ub2tlbiB9XHJcbiAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgYm9keTogIVtSZXF1ZXN0TWV0aG9kRW51bS5ERUxFVEUsIFJlcXVlc3RNZXRob2RFbnVtLkdFVF0uaW5jbHVkZXMoXHJcbiAgICAgICAgICBlbmRQb2ludERhdGEuUmVxdWVzdE1ldGhvZFxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gYm9keVBhcmFtc1xyXG4gICAgICAgICAgOiBudWxsLFxyXG4gICAgICB9KVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXM6IEZvcm0gfCBSZWNvcmQgfCBBcnJheTxSZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnJlbW92ZVJlcXVlc3RDb3VudGVyKCk7XHJcbiAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgY2FsbGJhY2socmVzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5yZW1vdmVSZXF1ZXN0Q291bnRlcigpO1xyXG4gICAgICAgICAgaWYgKGVycm9yQ2FsbEJhY2spIHtcclxuICAgICAgICAgICAgZXJyb3JDYWxsQmFjayhlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5FcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiUnVuRW5kUG9pbnRDYWxsIC0gc3Vic2NyaWJlIC0gZW5kXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgfVxyXG59XHJcbiJdfQ==
|