@eqproject/eqp-dynamic-module 2.10.19 → 2.10.21

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.
@@ -163,10 +163,10 @@ export class GraphComponent {
163
163
  }
164
164
  }
165
165
  GraphComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GraphComponent, deps: [{ token: i1.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
166
- GraphComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GraphComponent, selector: "graph", inputs: { data: "data", title: "title" }, host: { listeners: { "window:resize": "onResize($event)" } }, ngImport: i0, template: "<canvasjs-stockchart *ngIf=\"loaded\" [options]=\"stockChartOptions\"></canvasjs-stockchart>\n<div class=\"error\" *ngIf=\"!loaded\"><b>{{title}}:</b> Nessun dato trovato nell'intervallo specificato!</div>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CanvasJSStockChart, selector: "canvasjs-stockchart", inputs: ["options", "styles"], outputs: ["stockChartInstance"] }] });
166
+ GraphComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GraphComponent, selector: "graph", inputs: { data: "data", title: "title" }, host: { listeners: { "window:resize": "onResize($event)" } }, ngImport: i0, template: "<canvasjs-stockchart *ngIf=\"loaded\" [options]=\"stockChartOptions\"></canvasjs-stockchart>\r\n<div class=\"error\" *ngIf=\"!loaded\"><b>{{title}}:</b> Nessun dato trovato nell'intervallo specificato!</div>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CanvasJSStockChart, selector: "canvasjs-stockchart", inputs: ["options", "styles"], outputs: ["stockChartInstance"] }] });
167
167
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GraphComponent, decorators: [{
168
168
  type: Component,
169
- args: [{ selector: 'graph', template: "<canvasjs-stockchart *ngIf=\"loaded\" [options]=\"stockChartOptions\"></canvasjs-stockchart>\n<div class=\"error\" *ngIf=\"!loaded\"><b>{{title}}:</b> Nessun dato trovato nell'intervallo specificato!</div>" }]
169
+ args: [{ selector: 'graph', template: "<canvasjs-stockchart *ngIf=\"loaded\" [options]=\"stockChartOptions\"></canvasjs-stockchart>\r\n<div class=\"error\" *ngIf=\"!loaded\"><b>{{title}}:</b> Nessun dato trovato nell'intervallo specificato!</div>" }]
170
170
  }], ctorParameters: function () { return [{ type: i1.DatePipe }]; }, propDecorators: { onResize: [{
171
171
  type: HostListener,
172
172
  args: ['window:resize', ['$event']]
@@ -177,4 +177,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
177
177
  type: Input,
178
178
  args: ["title"]
179
179
  }] } });
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2dyYXBocy9ncmFwaC9ncmFwaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZ3JhcGhzL2dyYXBoL2dyYXBoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUd2RSxPQUFPLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7O0FBU3hDLE1BQU0sT0FBTyxjQUFjO0lBR3pCLFFBQVE7UUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFvQkQsWUFDVSxRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBbkJiLFNBQUksR0FBa0IsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUN6QyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBRW5DLGVBQVUsR0FBVyxTQUFTLENBQUM7UUFDL0IsY0FBUyxHQUFXLFNBQVMsQ0FBQztRQVc5QixXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLFlBQU8sR0FBVyxDQUFDLENBQUM7SUFJZixDQUFDO0lBRU4sUUFBUTtRQUVOLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUVoQixpQ0FBaUM7UUFDakMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxD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QUFHLEdBQUcsY0FBYyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxHQUFHLGFBQWEsR0FBSSxHQUFHLEdBQUcsZUFBZSxDQUFDO1FBRTNILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUIsS0FBSyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEtBQUssSUFBSSxHQUFHLENBQUM7UUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVCLEtBQUssSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEI7UUFFRCxvQ0FBb0M7UUFFdEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs0R0F4TFUsY0FBYztnR0FBZCxjQUFjLHFKQ1ozQiwrTUFDMkc7NEZEVzlGLGNBQWM7a0JBTjFCLFNBQVM7K0JBQ0UsT0FBTzsrRkFRakIsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNMUIsSUFBSTtzQkFBbEIsS0FBSzt1QkFBQyxNQUFNO2dCQUNHLEtBQUs7c0JBQXBCLEtBQUs7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvb3JkcyB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9ncmFwaC5tb2RlbCc7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0ICogYXMgc3MgZnJvbSAnc2ltcGxlLXN0YXRpc3RpY3MnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZ3JhcGgnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmFwaC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3JhcGguY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5sb2FkR3JhcGgoTWF0aC5mbG9vcih3aW5kb3cuaW5uZXJXaWR0aC8yKSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoXCJkYXRhXCIpIGRhdGE6IEFycmF5PENvb3Jkcz4gPSBuZXcgQXJyYXk8Q29vcmRzPigpO1xyXG4gIEBJbnB1dChcInRpdGxlXCIpIHRpdGxlOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICB0cmVuZENvbG9yOiBzdHJpbmcgPSAnI0VCMDEwMic7XHJcbiAgbWFpbkNvbG9yOiBzdHJpbmcgPSAnIzAwNmNhZCc7XHJcblxyXG4gIG06IG51bWJlcjsgLy8gbSBvZiB0aGUgbGluZWFyIHJlZ3Jlc3Npb25cclxuICBxOiBudW1iZXI7IC8vIHEgb2YgdGhlIGxpbmVhciByZWdyZXNzaW9uXHJcbiAgdHJlbmQ6IHN0cmluZzsgLy8gdHJlbmQgc3RyaW5nXHJcbiAgbGluZWFyUmVncmVzc2lvbjogQXJyYXk8Q29vcmRzPjsgLy8gdmFyaWFibGUgdXNlZCB0byBzdG9yZSB0aGUgbGluZWFyIHJlZ3Jlc3Npb24gcG9pbnRzIHRvIHBsb3RcclxuXHJcblxyXG5cclxuICBzdG9ja0NoYXJ0T3B0aW9uczogYW55O1xyXG5cclxuICBsb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjb3VudGVyOiBudW1iZXIgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlXHJcbiAgICApIHt9ICBcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIC8vIEFnZ2l1c3RhbWVudG8gZSBzY3JpdHR1cmEgZGF0aVxyXG4gICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKXtcclxuICAgICAgdGhpcy5sb2FkR3JhcGgoTWF0aC5mbG9vcih3aW5kb3cuaW5uZXJXaWR0aC8yKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkR3JhcGgod2lkdGg6IG51bWJlcil7XHJcblxyXG4gICAgdmFyIGxhc3R2YWx1ZSA9IHRoaXMuZGF0YVswXTtcclxuICAgIHZhciBmaXJzdHZhbHVlID0gdGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGgtMV07XHJcblxyXG4gICAgdmFyIHN0b2NrQ2hhcnRNaW5pbXVtID0gbmV3IERhdGUoZmlyc3R2YWx1ZS54KTtcclxuICAgIHZhciBzdG9ja0NoYXJ0TWF4aW11bSA9IG5ldyBEYXRlKGxhc3R2YWx1ZS54KTtcclxuICAgIHZhciBzdG9ja0NoYXJ0VGl0bGVUZXh0ID0gdGhpcy50aXRsZTtcclxuICAgIHZhciBzdG9ja0NoYXJ0ZGF0YVBvaW50cyA9IHRoaXMuZGF0YTtcclxuXHJcbiAgICB0aGlzLmxpbmVhclJlZ3Jlc3Npb24gPSBuZXcgQXJyYXk8Q29vcmRzPigpO1xyXG4gICAgdGhpcy50cmVuZCA9IFwiXCI7XHJcblxyXG4gICAgc3RvY2tDaGFydGRhdGFQb2ludHMucmV2ZXJzZSgpO1xyXG4gICAgaWYgKHN0b2NrQ2hhcnRkYXRhUG9pbnRzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgbGV0IHggPSBbXTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGk8c3RvY2tDaGFydGRhdGFQb2ludHMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgeC5wdXNoKFtpLCBzdG9ja0NoYXJ0ZGF0YVBvaW50c1tpXS55XSk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHBhcmFtZXRlcnMgPSBzcy5saW5lYXJSZWdyZXNzaW9uKHgpO1xyXG4gICAgICB0aGlzLm0gPSBwYXJhbWV0ZXJzLm07XHJcbiAgICAgIHRoaXMucSA9IHBhcmFtZXRlcnMuYjtcclxuICAgICAgaWYgKHRoaXMubSA+IDApIHtcclxuICAgICAgICAgIHRoaXMudHJlbmQgKz0gXCIg4oaXXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm0gPCAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRyZW5kICs9IFwiIOKGmFwiO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHgpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhzdG9ja0NoYXJ0ZGF0YVBvaW50cyk7XHJcbiAgICAgIFxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaTxzdG9ja0NoYXJ0ZGF0YVBvaW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICBpZiAoaSA9PSAwIHx8IGkgPT0gc3RvY2tDaGFydGRhdGFQb2ludHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgdGhpcy5saW5lYXJSZWdyZXNzaW9uLnB1c2goe3g6IHN0b2NrQ2hhcnRkYXRhUG9pbnRzW2ldLngsXHJcbiAgICAgICAgICAgIHk6IHRoaXMubSppICsgdGhpcy5xLFxyXG4gICAgICAgICAgICBsYWJlbDogc3RvY2tDaGFydGRhdGFQb2ludHNbaV0ubGFiZWwsXHJcbiAgICAgICAgICAgIG5hbWU6IHN0b2NrQ2hhcnRkYXRhUG9pbnRzW2ldLm5hbWVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vdGhpcy5saW5lYXJSZWdyZXNzaW9uLnJldmVyc2UoKTtcclxuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5saW5lYXJSZWdyZXNzaW9uKTtcclxuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5tKTtcclxuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5xKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0b2NrQ2hhcnRPcHRpb25zID0ge1xyXG4gICAgICB0aGVtZTogJ2xpZ2h0MicsXHJcbiAgICAgIGFuaW1hdGlvbkVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgaGVpZ2h0OiA1MDAsXHJcbiAgICAgIGNyZWRpdFRleHQ6IFwiXCIsXHJcbiAgICAgIGNyZWRpdEhyZWY6IFwiXCIsXHJcbiAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgdGV4dDogc3RvY2tDaGFydFRpdGxlVGV4dFxyXG4gICAgICB9LFxyXG4gICAgICBjaGFydHM6IFt7XHJcbiAgICAgICAgYXhpc1g6IHtcclxuICAgICAgICAgIGxhYmVsRm9ybWF0dGVyOiB0aGlzLmxhYmVsRm9ybWF0dGVyRnVuY3Rpb24sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRvb2xUaXBDb250ZW50OiBudWxsLFxyXG4gICAgICAgICAgICB0eXBlOiAnbGluZScsXHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGlzLnRyZW5kQ29sb3IsXHJcbiAgICAgICAgICAgIHNob3dJbkxlZ2VuZDogdHJ1ZSxcclxuICAgICAgICAgICAgbGVnZW5kTWFya2VyVHlwZTogXCJub25lXCIsXHJcbiAgICAgICAgICAgIG1hcmtlclR5cGU6IFwibm9uZVwiLFxyXG4gICAgICAgICAgICBsZWdlbmRUZXh0OiBcIlRyZW5kXCIgKyB0aGlzLnRyZW5kLFxyXG4gICAgICAgICAgICBkYXRhUG9pbnRzOiB0aGlzLmxpbmVhclJlZ3Jlc3Npb25cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6IFwic3BsaW5lXCIsXHJcbiAgICAgICAgICAgIGRhdGFQb2ludHM6IHN0b2NrQ2hhcnRkYXRhUG9pbnRzLFxyXG4gICAgICAgICAgICBjb2xvcjogdGhpcy5tYWluQ29sb3IsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSxcclxuICAgICAgICBjdWx0dXJlOiBcIml0XCJcclxuICAgICAgfV0sXHJcbiAgICAgIHJhbmdlU2VsZWN0b3I6IHtcclxuICAgICAgICBlbmFibGVkOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBuYXZpZ2F0b3I6IHtcclxuICAgICAgICBzbGlkZXI6IHtcclxuICAgICAgICAgIG1pbmltdW06IHN0b2NrQ2hhcnRNaW5pbXVtLFxyXG4gICAgICAgICAgbWF4aW11bTogc3RvY2tDaGFydE1heGltdW1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICByZXNwb25zaXZlOiB0cnVlLFxyXG4gICAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbGFiZWxGb3JtYXR0ZXJGdW5jdGlvbihlKSB7XHJcbiAgICBsZXQgbGFiZWwgPSBcIlwiO1xyXG4gICAgbGV0IGRpcnR5TGFiZWw7XHJcbiAgICBsZXQgZGF0ZSA9IGUudmFsdWU7XHJcblxyXG4gICAgICBsZXQgbmV3WWVhcjogbnVtYmVyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICBsZXQgbmV3TW9udGg6IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICAgIGxldCBuZXdNb250aFN0cmluZzogc3RyaW5nO1xyXG4gICAgICBpZiAobmV3TW9udGggPCAxMCkge1xyXG4gICAgICBuZXdNb250aFN0cmluZyA9IFwiMFwiICsgbmV3TW9udGgudG9TdHJpbmcoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgbmV3TW9udGhTdHJpbmcgPSBuZXdNb250aC50b1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBuZXdEYXk6IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xyXG4gICAgICBsZXQgbmV3RGF5U3RyaW5nOiBzdHJpbmc7XHJcbiAgICAgIGlmIChuZXdEYXkgPCAxMCkge1xyXG4gICAgICBuZXdEYXlTdHJpbmcgPSBcIjBcIiArIG5ld0RheS50b1N0cmluZygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdEYXlTdHJpbmcgPSBuZXdEYXkudG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgbmV3SG91cjogbnVtYmVyID0gZGF0ZS5nZXRIb3VycygpO1xyXG4gICAgICBsZXQgbmV3SG91clN0cmluZzogc3RyaW5nO1xyXG4gICAgICBpZiAobmV3SG91ciA8IDEwKSB7XHJcbiAgICAgIG5ld0hvdXJTdHJpbmcgPSBcIjBcIiArIG5ld0hvdXIudG9TdHJpbmcoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgbmV3SG91clN0cmluZyA9IG5ld0hvdXIudG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgbmV3TWludXRlOiBudW1iZXIgPSBkYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgICAgbGV0IG5ld01pbnV0ZVN0cmluZzogc3RyaW5nO1xyXG4gICAgICBpZiAobmV3TWludXRlIDwgMTApIHtcclxuICAgICAgbmV3TWludXRlU3RyaW5nID0gXCIwXCIgKyBuZXdNaW51dGUudG9TdHJpbmcoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgbmV3TWludXRlU3RyaW5nID0gbmV3TWludXRlLnRvU3RyaW5nKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRpcnR5TGFiZWwgPSBuZXdEYXlTdHJpbmcgKyBcIi9cIiArIG5ld01vbnRoU3RyaW5nICsgXCIvXCIgKyBuZXdZZWFyLnRvU3RyaW5nKCkgKyBcIiBcIiArIG5ld0hvdXJTdHJpbmcgICsgXCI6XCIgKyBuZXdNaW51dGVTdHJpbmc7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xyXG4gICAgICAgIGxhYmVsICs9IGRpcnR5TGFiZWxbaV07XHJcbiAgICAgIH1cclxuICAgICAgbGFiZWwgKz0gXCIgXCI7XHJcbiAgICAgIGZvciAobGV0IGkgPSAxMTsgaSA8IDE2OyBpKyspIHtcclxuICAgICAgICBsYWJlbCArPSBkaXJ0eUxhYmVsW2ldO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2xhYmVsID0gbGFiZWwucmVwbGFjZShcIjAwOjAwXCIsXCJcIik7XHJcbiAgICBcclxuICAgIHJldHVybiBsYWJlbDtcclxuICB9ICBcclxuICBcclxuXHJcbn1cclxuIiwiPGNhbnZhc2pzLXN0b2NrY2hhcnQgKm5nSWY9XCJsb2FkZWRcIiBbb3B0aW9uc109XCJzdG9ja0NoYXJ0T3B0aW9uc1wiPjwvY2FudmFzanMtc3RvY2tjaGFydD5cbjxkaXYgY2xhc3M9XCJlcnJvclwiICpuZ0lmPVwiIWxvYWRlZFwiPjxiPnt7dGl0bGV9fTo8L2I+IE5lc3N1biBkYXRvIHRyb3ZhdG8gbmVsbCdpbnRlcnZhbGxvIHNwZWNpZmljYXRvITwvZGl2PiJdfQ==
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2dyYXBocy9ncmFwaC9ncmFwaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZ3JhcGhzL2dyYXBoL2dyYXBoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUd2RSxPQUFPLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7O0FBU3hDLE1BQU0sT0FBTyxjQUFjO0lBR3pCLFFBQVE7UUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFvQkQsWUFDVSxRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBbkJiLFNBQUksR0FBa0IsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUN6QyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBRW5DLGVBQVUsR0FBVyxTQUFTLENBQUM7UUFDL0IsY0FBUyxHQUFXLFNBQVMsQ0FBQztRQVc5QixXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLFlBQU8sR0FBVyxDQUFDLENBQUM7SUFJZixDQUFDO0lBRU4sUUFBUTtRQUVOLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUVoQixpQ0FBaUM7UUFDakMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxD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QUFHLEdBQUcsY0FBYyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxHQUFHLGFBQWEsR0FBSSxHQUFHLEdBQUcsZUFBZSxDQUFDO1FBRTNILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUIsS0FBSyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEtBQUssSUFBSSxHQUFHLENBQUM7UUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVCLEtBQUssSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEI7UUFFRCxvQ0FBb0M7UUFFdEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs0R0F4TFUsY0FBYztnR0FBZCxjQUFjLHFKQ1ozQixpTkFDMkc7NEZEVzlGLGNBQWM7a0JBTjFCLFNBQVM7K0JBQ0UsT0FBTzsrRkFRakIsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNMUIsSUFBSTtzQkFBbEIsS0FBSzt1QkFBQyxNQUFNO2dCQUNHLEtBQUs7c0JBQXBCLEtBQUs7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvb3JkcyB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9ncmFwaC5tb2RlbCc7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0ICogYXMgc3MgZnJvbSAnc2ltcGxlLXN0YXRpc3RpY3MnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZ3JhcGgnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmFwaC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3JhcGguY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyYXBoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5sb2FkR3JhcGgoTWF0aC5mbG9vcih3aW5kb3cuaW5uZXJXaWR0aC8yKSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoXCJkYXRhXCIpIGRhdGE6IEFycmF5PENvb3Jkcz4gPSBuZXcgQXJyYXk8Q29vcmRzPigpO1xyXG4gIEBJbnB1dChcInRpdGxlXCIpIHRpdGxlOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICB0cmVuZENvbG9yOiBzdHJpbmcgPSAnI0VCMDEwMic7XHJcbiAgbWFpbkNvbG9yOiBzdHJpbmcgPSAnIzAwNmNhZCc7XHJcblxyXG4gIG06IG51bWJlcjsgLy8gbSBvZiB0aGUgbGluZWFyIHJlZ3Jlc3Npb25cclxuICBxOiBudW1iZXI7IC8vIHEgb2YgdGhlIGxpbmVhciByZWdyZXNzaW9uXHJcbiAgdHJlbmQ6IHN0cmluZzsgLy8gdHJlbmQgc3RyaW5nXHJcbiAgbGluZWFyUmVncmVzc2lvbjogQXJyYXk8Q29vcmRzPjsgLy8gdmFyaWFibGUgdXNlZCB0byBzdG9yZSB0aGUgbGluZWFyIHJlZ3Jlc3Npb24gcG9pbnRzIHRvIHBsb3RcclxuXHJcblxyXG5cclxuICBzdG9ja0NoYXJ0T3B0aW9uczogYW55O1xyXG5cclxuICBsb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjb3VudGVyOiBudW1iZXIgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlXHJcbiAgICApIHt9ICBcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIC8vIEFnZ2l1c3RhbWVudG8gZSBzY3JpdHR1cmEgZGF0aVxyXG4gICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKXtcclxuICAgICAgdGhpcy5sb2FkR3JhcGgoTWF0aC5mbG9vcih3aW5kb3cuaW5uZXJXaWR0aC8yKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkR3JhcGgod2lkdGg6IG51bWJlcil7XHJcblxyXG4gICAgdmFyIGxhc3R2YWx1ZSA9IHRoaXMuZGF0YVswXTtcclxuICAgIHZhciBmaXJzdHZhbHVlID0gdGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGgtMV07XHJcblxyXG4gICAgdmFyIHN0b2NrQ2hhcnRNaW5pbXVtID0gbmV3IERhdGUoZmlyc3R2YWx1ZS54KTtcclxuICAgIHZhciBzdG9ja0NoYXJ0TWF4aW11bSA9IG5ldyBEYXRlKGxhc3R2YWx1ZS54KTtcclxuICAgIHZhciBzdG9ja0NoYXJ0VGl0bGVUZXh0ID0gdGhpcy50aXRsZTtcclxuICAgIHZhciBzdG9ja0NoYXJ0ZGF0YVBvaW50cyA9IHRoaXMuZGF0YTtcclxuXHJcbiAgICB0aGlzLmxpbmVhclJlZ3Jlc3Npb24gPSBuZXcgQXJyYXk8Q29vcmRzPigpO1xyXG4gICAgdGhpcy50cmVuZCA9IFwiXCI7XHJcblxyXG4gICAgc3RvY2tDaGFydGRhdGFQb2ludHMucmV2ZXJzZSgpO1xyXG4gICAgaWYgKHN0b2NrQ2hhcnRkYXRhUG9pbnRzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgbGV0IHggPSBbXTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGk8c3RvY2tDaGFydGRhdGFQb2ludHMubGVuZ3RoOyBpICsrKSB7XHJcbiAgICAgICAgeC5wdXNoKFtpLCBzdG9ja0NoYXJ0ZGF0YVBvaW50c1tpXS55XSk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHBhcmFtZXRlcnMgPSBzcy5saW5lYXJSZWdyZXNzaW9uKHgpO1xyXG4gICAgICB0aGlzLm0gPSBwYXJhbWV0ZXJzLm07XHJcbiAgICAgIHRoaXMucSA9IHBhcmFtZXRlcnMuYjtcclxuICAgICAgaWYgKHRoaXMubSA+IDApIHtcclxuICAgICAgICAgIHRoaXMudHJlbmQgKz0gXCIg4oaXXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm0gPCAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRyZW5kICs9IFwiIOKGmFwiO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHgpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhzdG9ja0NoYXJ0ZGF0YVBvaW50cyk7XHJcbiAgICAgIFxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaTxzdG9ja0NoYXJ0ZGF0YVBvaW50cy5sZW5ndGg7IGkgKyspIHtcclxuICAgICAgICBpZiAoaSA9PSAwIHx8IGkgPT0gc3RvY2tDaGFydGRhdGFQb2ludHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgdGhpcy5saW5lYXJSZWdyZXNzaW9uLnB1c2goe3g6IHN0b2NrQ2hhcnRkYXRhUG9pbnRzW2ldLngsXHJcbiAgICAgICAgICAgIHk6IHRoaXMubSppICsgdGhpcy5xLFxyXG4gICAgICAgICAgICBsYWJlbDogc3RvY2tDaGFydGRhdGFQb2ludHNbaV0ubGFiZWwsXHJcbiAgICAgICAgICAgIG5hbWU6IHN0b2NrQ2hhcnRkYXRhUG9pbnRzW2ldLm5hbWVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vdGhpcy5saW5lYXJSZWdyZXNzaW9uLnJldmVyc2UoKTtcclxuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5saW5lYXJSZWdyZXNzaW9uKTtcclxuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5tKTtcclxuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5xKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0b2NrQ2hhcnRPcHRpb25zID0ge1xyXG4gICAgICB0aGVtZTogJ2xpZ2h0MicsXHJcbiAgICAgIGFuaW1hdGlvbkVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgaGVpZ2h0OiA1MDAsXHJcbiAgICAgIGNyZWRpdFRleHQ6IFwiXCIsXHJcbiAgICAgIGNyZWRpdEhyZWY6IFwiXCIsXHJcbiAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgdGV4dDogc3RvY2tDaGFydFRpdGxlVGV4dFxyXG4gICAgICB9LFxyXG4gICAgICBjaGFydHM6IFt7XHJcbiAgICAgICAgYXhpc1g6IHtcclxuICAgICAgICAgIGxhYmVsRm9ybWF0dGVyOiB0aGlzLmxhYmVsRm9ybWF0dGVyRnVuY3Rpb24sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRvb2xUaXBDb250ZW50OiBudWxsLFxyXG4gICAgICAgICAgICB0eXBlOiAnbGluZScsXHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGlzLnRyZW5kQ29sb3IsXHJcbiAgICAgICAgICAgIHNob3dJbkxlZ2VuZDogdHJ1ZSxcclxuICAgICAgICAgICAgbGVnZW5kTWFya2VyVHlwZTogXCJub25lXCIsXHJcbiAgICAgICAgICAgIG1hcmtlclR5cGU6IFwibm9uZVwiLFxyXG4gICAgICAgICAgICBsZWdlbmRUZXh0OiBcIlRyZW5kXCIgKyB0aGlzLnRyZW5kLFxyXG4gICAgICAgICAgICBkYXRhUG9pbnRzOiB0aGlzLmxpbmVhclJlZ3Jlc3Npb25cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6IFwic3BsaW5lXCIsXHJcbiAgICAgICAgICAgIGRhdGFQb2ludHM6IHN0b2NrQ2hhcnRkYXRhUG9pbnRzLFxyXG4gICAgICAgICAgICBjb2xvcjogdGhpcy5tYWluQ29sb3IsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSxcclxuICAgICAgICBjdWx0dXJlOiBcIml0XCJcclxuICAgICAgfV0sXHJcbiAgICAgIHJhbmdlU2VsZWN0b3I6IHtcclxuICAgICAgICBlbmFibGVkOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBuYXZpZ2F0b3I6IHtcclxuICAgICAgICBzbGlkZXI6IHtcclxuICAgICAgICAgIG1pbmltdW06IHN0b2NrQ2hhcnRNaW5pbXVtLFxyXG4gICAgICAgICAgbWF4aW11bTogc3RvY2tDaGFydE1heGltdW1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICByZXNwb25zaXZlOiB0cnVlLFxyXG4gICAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbGFiZWxGb3JtYXR0ZXJGdW5jdGlvbihlKSB7XHJcbiAgICBsZXQgbGFiZWwgPSBcIlwiO1xyXG4gICAgbGV0IGRpcnR5TGFiZWw7XHJcbiAgICBsZXQgZGF0ZSA9IGUudmFsdWU7XHJcblxyXG4gICAgICBsZXQgbmV3WWVhcjogbnVtYmVyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICBsZXQgbmV3TW9udGg6IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICAgIGxldCBuZXdNb250aFN0cmluZzogc3RyaW5nO1xyXG4gICAgICBpZiAobmV3TW9udGggPCAxMCkge1xyXG4gICAgICBuZXdNb250aFN0cmluZyA9IFwiMFwiICsgbmV3TW9udGgudG9TdHJpbmcoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgbmV3TW9udGhTdHJpbmcgPSBuZXdNb250aC50b1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBuZXdEYXk6IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xyXG4gICAgICBsZXQgbmV3RGF5U3RyaW5nOiBzdHJpbmc7XHJcbiAgICAgIGlmIChuZXdEYXkgPCAxMCkge1xyXG4gICAgICBuZXdEYXlTdHJpbmcgPSBcIjBcIiArIG5ld0RheS50b1N0cmluZygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdEYXlTdHJpbmcgPSBuZXdEYXkudG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgbmV3SG91cjogbnVtYmVyID0gZGF0ZS5nZXRIb3VycygpO1xyXG4gICAgICBsZXQgbmV3SG91clN0cmluZzogc3RyaW5nO1xyXG4gICAgICBpZiAobmV3SG91ciA8IDEwKSB7XHJcbiAgICAgIG5ld0hvdXJTdHJpbmcgPSBcIjBcIiArIG5ld0hvdXIudG9TdHJpbmcoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgbmV3SG91clN0cmluZyA9IG5ld0hvdXIudG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgbmV3TWludXRlOiBudW1iZXIgPSBkYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgICAgbGV0IG5ld01pbnV0ZVN0cmluZzogc3RyaW5nO1xyXG4gICAgICBpZiAobmV3TWludXRlIDwgMTApIHtcclxuICAgICAgbmV3TWludXRlU3RyaW5nID0gXCIwXCIgKyBuZXdNaW51dGUudG9TdHJpbmcoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgbmV3TWludXRlU3RyaW5nID0gbmV3TWludXRlLnRvU3RyaW5nKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRpcnR5TGFiZWwgPSBuZXdEYXlTdHJpbmcgKyBcIi9cIiArIG5ld01vbnRoU3RyaW5nICsgXCIvXCIgKyBuZXdZZWFyLnRvU3RyaW5nKCkgKyBcIiBcIiArIG5ld0hvdXJTdHJpbmcgICsgXCI6XCIgKyBuZXdNaW51dGVTdHJpbmc7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xyXG4gICAgICAgIGxhYmVsICs9IGRpcnR5TGFiZWxbaV07XHJcbiAgICAgIH1cclxuICAgICAgbGFiZWwgKz0gXCIgXCI7XHJcbiAgICAgIGZvciAobGV0IGkgPSAxMTsgaSA8IDE2OyBpKyspIHtcclxuICAgICAgICBsYWJlbCArPSBkaXJ0eUxhYmVsW2ldO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2xhYmVsID0gbGFiZWwucmVwbGFjZShcIjAwOjAwXCIsXCJcIik7XHJcbiAgICBcclxuICAgIHJldHVybiBsYWJlbDtcclxuICB9ICBcclxuICBcclxuXHJcbn1cclxuIiwiPGNhbnZhc2pzLXN0b2NrY2hhcnQgKm5nSWY9XCJsb2FkZWRcIiBbb3B0aW9uc109XCJzdG9ja0NoYXJ0T3B0aW9uc1wiPjwvY2FudmFzanMtc3RvY2tjaGFydD5cclxuPGRpdiBjbGFzcz1cImVycm9yXCIgKm5nSWY9XCIhbG9hZGVkXCI+PGI+e3t0aXRsZX19OjwvYj4gTmVzc3VuIGRhdG8gdHJvdmF0byBuZWxsJ2ludGVydmFsbG8gc3BlY2lmaWNhdG8hPC9kaXY+Il19
@@ -29,8 +29,17 @@ export class UtilityHelperService {
29
29
  this.debugMode = false;
30
30
  }
31
31
  static EvaluateFieldFormula(formula, rec, ctx) {
32
- const evaluatedValue = eval(formula);
33
- return evaluatedValue ? evaluatedValue : null;
32
+ try {
33
+ // creo una funzione che accetta rec e ctx
34
+ const fn = new Function("rec", "ctx", `return ${formula};`);
35
+ // eseguo passando i valori
36
+ const evaluatedValue = fn(rec, ctx);
37
+ return evaluatedValue ?? null;
38
+ }
39
+ catch (err) {
40
+ console.error("Errore nell'esecuzione:", err.message);
41
+ return null;
42
+ }
34
43
  }
35
44
  static SetContext(ctx) {
36
45
  this.context = ctx;
@@ -670,4 +679,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
670
679
  providedIn: "root",
671
680
  }]
672
681
  }], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }, { type: i2.HttpClient }, { type: i3.SpinnerService }]; } });
673
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eUhlbHBlci5zZXJ2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsa0JBQWtCLEVBR2xCLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGFBQWEsR0FDZCxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQ0wscUJBQXFCLEVBR3JCLGFBQWEsRUFDYixpQkFBaUIsR0FDbEIsTUFBTSx1Q0FBdUMsQ0FBQztBQUsvQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLFNBQVMsRUFDVCxRQUFRLEVBQ1IsUUFBUSxHQUNULE1BQU0sa0NBQWtDLENBQUM7QUFHMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7QUFPakQsTUFBTSxPQUFPLG9CQUFvQjtJQUkvQixRQUFRLENBQUMsT0FBZSxFQUFFLElBQVU7UUFDbEMsSUFBRyxJQUFJLENBQUMsU0FBUyxFQUFDO1lBQ2hCLElBQUcsSUFBSSxFQUFDO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFBO2FBQzNCO2lCQUFJO2dCQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7YUFDckI7U0FDRjtJQUNILENB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LENBQUMsV0FBVyxDQUFDLENBQUM7U0FDOUQ7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztBQTV2QmUsNEJBQU8sR0FBWSxJQUFJLE9BQU8sRUFBRSxDQUFDO2tIQURwQyxvQkFBb0I7c0hBQXBCLG9CQUFvQixjQUZuQixNQUFNOzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIEFic3RyYWN0Q29udHJvbCxcclxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG4gIFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9yRm4sXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtcclxuICBCYXNlRmllbGQsXHJcbiAgQ29sU3BhblNpemVzRW51bSxcclxuICBGaWVsZEludmlzaWJpbGl0eUVudW0sXHJcbiAgRmllbGRUeXBlRW51bSxcclxufSBmcm9tIFwiLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uL21vZGVscy9jb250ZXh0Lm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgRW5kUG9pbnRDb25maWd1cmF0aW9uLFxyXG4gIEVuZFBvaW50RGF0YSxcclxuICBFbmRQb2ludERhdGFQYXJhbXMsXHJcbiAgUGFyYW1UeXBlRW51bSxcclxuICBSZXF1ZXN0TWV0aG9kRW51bSxcclxufSBmcm9tIFwiLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50RmllbGQgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpZWxkcy9hdHRhY2htZW50RmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgSW1hZ2VGaWVsZCB9IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL2ltYWdlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgTGlzdFZhbHVlRmllbGQgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBUZXh0YXJlYUZpZWxkIH0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvdGV4dGFyZWFGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIFRleHRNYXNrRW51bSxcclxuICBUZXh0RmllbGQsXHJcbiAgVXJsUmVnZXgsXHJcbiAgVGVsUmVnZXgsXHJcbn0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvdGV4dEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZvcm0gfSBmcm9tIFwiLi4vbW9kZWxzL2Zvcm0ubW9kZWxcIjtcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSBcIi4uL21vZGVscy9yZWNvcmQubW9kZWxcIjtcclxuaW1wb3J0IHsgQXJyYXlWYWxpZGF0b3JzIH0gZnJvbSBcIi4vY3VzdG9tLWZvcm0tdmFsaWRhdG9ycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4vZXFwLWR5bmFtaWMtbW9kdWxlLWRpYWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSBcIi4vc3Bpbm5lci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tIFwiLi9nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBJbWFnZVNlbGVjdG9yRmllbGQgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluQXR0YWNobWVudCB9IGZyb20gXCIuLi9tb2RlbHMvZHluQXR0YWNobWVudFwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXRpbGl0eUhlbHBlclNlcnZpY2Uge1xyXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dDogQ29udGV4dCA9IG5ldyBDb250ZXh0KCk7XHJcblxyXG4gIGRlYnVnTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRlYnVnTG9nKG1lc3NhZ2U6IHN0cmluZywgaXRlbT86IGFueSl7XHJcbiAgICBpZih0aGlzLmRlYnVnTW9kZSl7XHJcbiAgICAgIGlmKGl0ZW0pe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UsIGl0ZW0pXHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBzcGlubmVyU2VydmljZTogU3Bpbm5lclNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICBmb3JtdWxhOiBzdHJpbmcsXHJcbiAgICByZWM6IFJlY29yZCxcclxuICAgIGN0eDogYW55XHJcbiAgKTogYW55IHtcclxuICAgIGNvbnN0IGV2YWx1YXRlZFZhbHVlID0gZXZhbChmb3JtdWxhKTtcclxuICAgIHJldHVybiBldmFsdWF0ZWRWYWx1ZSA/IGV2YWx1YXRlZFZhbHVlIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgU2V0Q29udGV4dChjdHg6IENvbnRleHQpIHtcclxuICAgIHRoaXMuY29udGV4dCA9IGN0eDtcclxuICB9XHJcbiAgcHVibGljIHN0YXRpYyBpc051bWVyaWMobikge1xyXG4gICAgcmV0dXJuICFpc05hTihuKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaW5pdFN0eWxlcyhzdHlsZWNzcykge1xyXG4gICAgcmV0dXJuIHN0eWxlY3NzLnNwbGl0KFwiO1wiKS5yZWR1Y2UoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3Qga2V5cGFyID0gYi5zcGxpdChcIjpcIik7XHJcbiAgICAgIGlmIChrZXlwYXIubGVuZ3RoID4gMSkgYVtrZXlwYXJbMF0udHJpbSgpXSA9IGtleXBhclsxXS50cmltKCk7XHJcbiAgICAgIHJldHVybiBhO1xyXG4gICAgfSwge30pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBHZXRGaWVsZFR5cGUoZmllbGQ6IEJhc2VGaWVsZCkge1xyXG4gICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gZGkgdGVzdG9cIl06IHtcclxuICAgICAgICBjb25zdCB0OiBUZXh0RmllbGQgPSBPYmplY3QuYXNzaWduKG5ldyBUZXh0RmllbGQoKSwgZmllbGQpO1xyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIHBlciBpIGNhbXBpIGluIGN1aSBsJ3V0ZW50ZSBkZXZlIHNjcml2ZXJlIGNvbWFuZGkgamF2YXNjcmlwdC5cclxuICAgKiBJbiBiYXNlIGFsbCd1bHRpbW8gY2FyYXR0ZXJlIGRpZ2l0YXRvIHZpZW5lIGltcG9zdGF0byB1biBlbGVuY28gZGkgb2dnZXR0aSBvIHByb3ByaWV0w6AgY2hlIGwndXRlbnRlIGhhIGEgZGlzcG9zaXppb25lIGluIHF1ZWwgbW9tZW50by5cclxuICAgKiBAcGFyYW0gZmllbGRzIEFycmF5IGRpIEJhc2VGaWVsZCBhZ2dpdW50aSBhbGxhIEZvcm1cclxuICAgKiBAcGFyYW0gdHlwZWRGb3JtdWxhIFN0cmluZ2EgZGlnaXRhdGEgZGFsbCd1dGVudGVcclxuICAgKiBAc3VtbWFyeSBJbCBtZXRvZG8gaW1wb3N0YSBpIHN1Z2dlcmltZW50aSBiYXNhbmRvc2kgc3UgMyBjYXNpOlxyXG4gICAqICAxKSBsJ3V0ZW50ZSBub24gaGEgZGlnaXRhdG8gbnVsbGEgbyBsYSBzdHJpbmdhIGRpZ2l0YXRhIGRhbGwndXRlbnRlIGZpbmlzY2UgY29uIHVubyBzcGF6aW8gdnVvdG9cclxuICAgKiAgMikgbGEgc3RyaW5nYSBkaWdpdGF0YSBkYWxsJ3V0ZW50ZSBmaW5pc2NlIGNvbiB1biBcIi5cIlxyXG4gICAqICAzKSBsYSBzdHJpbmdhIGRpZ2l0YXRhIGRhbGwndXRlbnRlIG5vbiBjb2luY2lkZSBjb24gbmVzc3VuIGFsdHJvIGNhc28gc29wcmEgKGZpbmlzY2UgY29uIHVuIGNhcmF0dGVyZSBxdWFsdW5xdWUpXHJcbiAgICovXHJcbiAgcHVibGljIHN0YXRpYyBHZXRBdXRvY29tcGxldGVPcHRpb25zKFxyXG4gICAgZmllbGRzOiBBcnJheTxCYXNlRmllbGQ+LFxyXG4gICAgdHlwZWRGb3JtdWxhOiBzdHJpbmdcclxuICApOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4ge1xyXG4gICAgbGV0IGF1dG9jb21wbGV0ZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiA9IFtdO1xyXG5cclxuICAgIC8vIFJlY3VwZXJvIGkgbm9taSBkaSB0dXR0aSBpIGNhbXBpIGNyZWF0aSBmaW5vIGFkIG9yYSBuZWxsYSBmb3JtLlxyXG4gICAgY29uc3QgYXZhaWxhYmxlUmVjUHJvcGVydGllczogQXJyYXk8c3RyaW5nPiA9IGZpZWxkcy5tYXAoKGYpID0+XHJcbiAgICAgIGYuTGFiZWwuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIE5lbCBjYXNpIGluIGN1aSBsJ3V0ZW50ZSBub24gaGEgaW5zZXJpdG8gbnVsbGEgb3BwdXJlIGxhIHN0cmluZ2EgZmluaXNjZSBjb24gdW5vIHNwYXppbyB2dW90byBvIHVuIHNpbWJvbG8gZGl2ZXJzbyBkYSBcIi5cIlxyXG4gICAgLy8gKHVuIGNhcmF0dGVyZSBub24gYWxmYW51bWVyaWNvKSBpbXBvc3RvIGNvbWUgc3VnZ2VyaW1lbnRpIHNvbG8gXCJyZWNcIiBlIFwiY3R4XCIsIG92dmVybyBnbGkgdW5pY2kgZHVlIG9nZ2V0dGkgYSBjdWkgbCd1dGVudGUgaGEgYWNjZXNzby5cclxuICAgIGlmIChcclxuICAgICAgIXR5cGVkRm9ybXVsYSB8fFxyXG4gICAgICAoIXR5cGVkRm9ybXVsYS5lbmRzV2l0aChcIi5cIikgJiZcclxuICAgICAgICBuZXcgUmVnRXhwKFwiW14wLTlhLXpBLVpfXVwiKS50ZXN0KFxyXG4gICAgICAgICAgdHlwZWRGb3JtdWxhLnN1YnN0cmluZyh0eXBlZEZvcm11bGEubGVuZ3RoIC0gMSwgdHlwZWRGb3JtdWxhLmxlbmd0aClcclxuICAgICAgICApKVxyXG4gICAgKSB7XHJcbiAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXHJcbiAgICAgICAgeyBsYWJlbDogXCJyZWNcIiwgdmFsdWU6ICh0eXBlZEZvcm11bGEgPyB0eXBlZEZvcm11bGEgOiBcIlwiKSArIFwicmVjXCIgfSxcclxuICAgICAgICB7IGxhYmVsOiBcImN0eFwiLCB2YWx1ZTogKHR5cGVkRm9ybXVsYSA/IHR5cGVkRm9ybXVsYSA6IFwiXCIpICsgXCJjdHhcIiB9LFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gICAgLy8gU2UgbGEgc3RyaW5nYSBmaW5pc2NlIGNvbiB1biBcIi5cIiB2dW9sIGRpcmUgY2hlIGwndXRlbnRlIHN0YSBjZXJjYW5kbyBkaSBhY2NlZGVyZSBhZCB1bmEgcHJvcHJpZXTDoCBkaSB1biBvZ2dldHRvXHJcbiAgICAvLyBhIHN1YSBkaXNwb3NpemlvbmUuIFJlY3VwZXJvIGlsIG5vbWUgZGVsbCd1bHRpbW8gb2dnZXR0byBkaWdpdGF0byBkYWxsJ3V0ZW50ZSBlIHNlIGwnb2dnZXR0byBzY2VsdG8gw6ggXCJyZWNcIiBvIFwiY3R4XCJcclxuICAgIC8vIGFsbG9yYSBzdWdnZXJpc2NvIGxlIHByb3ByaWV0w6AgY2hlIGVzaXN0b25vIGFsbCdpbnRlcm5vIGRpIHF1ZXN0aSBvZ2dldHRpIGFsdHJpbWVudGkgbm9uIG1vc3RybyBudWxsYS5cclxuICAgIGVsc2UgaWYgKHR5cGVkRm9ybXVsYS5lbmRzV2l0aChcIi5cIikpIHtcclxuICAgICAgY29uc3QgZm9ybXVsYVBpZWNlczogQXJyYXk8c3RyaW5nPiA9IHR5cGVkRm9ybXVsYVxyXG4gICAgICAgIC5zcGxpdChcIiBcIilcclxuICAgICAgICBbdHlwZWRGb3JtdWxhLnNwbGl0KFwiIFwiKS5sZW5ndGggLSAxXS5zcGxpdChcIi5cIik7XHJcbiAgICAgIGlmIChmb3JtdWxhUGllY2VzW2Zvcm11bGFQaWVjZXMubGVuZ3RoIC0gMl0gPT09IFwicmVjXCIpIHtcclxuICAgICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gYXZhaWxhYmxlUmVjUHJvcGVydGllcy5tYXAoKGYpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7IGxhYmVsOiBmLCB2YWx1ZTogdHlwZWRGb3JtdWxhICsgZiB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAyXSA9PT0gXCJjdHhcIikge1xyXG4gICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBPYmplY3Qua2V5cyhVdGlsaXR5SGVscGVyU2VydmljZS5jb250ZXh0KS5tYXAoXHJcbiAgICAgICAgICAoZikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4geyBsYWJlbDogZiwgdmFsdWU6IHR5cGVkRm9ybXVsYSArIGYgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGZvcm11bGFQaWVjZXMubGVuZ3RoID4gMiAmJlxyXG4gICAgICAgIGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAzXSA9PT0gXCJjdHhcIiAmJlxyXG4gICAgICAgIGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAyXSA9PT0gXCJVc2VyXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgYXV0b2NvbXBsZXRlT3B0aW9ucyA9IE9iamVjdC5rZXlzKFxyXG4gICAgICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dC5Vc2VyXHJcbiAgICAgICAgKS5tYXAoKGYpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7IGxhYmVsOiBmLCB2YWx1ZTogdHlwZWRGb3JtdWxhICsgZiB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gSW4gdHV0dGkgZ2xpIGFsdHJpIGNhc2ksIG92dmVybyBxdWFuZG8gbGEgc3RyaW5nYSBkaWdpdGF0YSBmaW5pc2NlIGNvbiB1biBjYXJhdHRlcmUgZGl2ZXJzbyBkYSBxdWVsbGlcclxuICAgIC8vIGNvbnRyb2xsYXRpIGZpbm9yYSwgdnVvbCBkaXJlIGNoZSBsJ3V0ZW50ZSBzdGEgZGlnaXRhbnRvIGlsIG5vbWUgZGkgdW4gb2dnZXR0bywgdW5hIHByb3ByaWV0w6AgbyB1bmFcclxuICAgIC8vIGZ1bnppb25lIGphdmFzY3JpcHQuIENvbnRyb2xsbyBsYSBwYXJvbGEgY2hlIGwndXRlbnRlIHN0YSBkaWdpdGFuZG8gZSBzZSBmYSBwYXJ0ZSBkaSB1bm8gZGVnbGkgb2dnZXR0aSBhIGRpc3Bvc2l6aW9uZVxyXG4gICAgLy8gbyB1bmEgcHJvcHJpZXTDoCBkaSBlc3NpIGFsbG9yYSBzdWdnZXJpc2NvIGkgcG9zc2liaWxpIG1hdGNoLlxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IGF2YWlsYWJsZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiA9IFtdO1xyXG5cclxuICAgICAgLy8gUHJlbmRvIHR1dHRpIGkgYmxvY2NoaSBkaSBjYXJhdHRlcmkgZGlnaXRhdGkgZGFsbCd1dGVudGVcclxuICAgICAgY29uc3QgYWxsRm9ybXVsYVdvcmRzOiBBcnJheTxzdHJpbmc+ID0gdHlwZWRGb3JtdWxhLnNwbGl0KFwiIFwiKTtcclxuICAgICAgLy8gUHJlbmRvIGwndWx0aW1vIGJsb2NjbyBkaSBjYXJhdHRlcmkgZGlnaXRhdG8gZGFsbCd1dGVudGVcclxuICAgICAgY29uc3QgbGFzdFR5cGVkU3RyaW5nOiBzdHJpbmcgPVxyXG4gICAgICAgIGFsbEZvcm11bGFXb3Jkc1thbGxGb3JtdWxhV29yZHMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAvLyBTZSBsYSBsJ3VsdGltYSBzdHJpbmdhIGRpZ2l0YXRhIG5vbiBjb250aWVuZSBjYXJhdHRlcmkgc3BlY2lhbGkgYWxsb3JhIHNwbGl0dG8gbGEgc3RyaW5nYVxyXG4gICAgICAvLyBzdWkgXCIuXCIgZSBpbXBvc3RvIGkgc3VnZ2VyaW1lbnRpIGluIGJhc2UgYWwgcGF0aCBkZWxsYSBwcm9ycGlldMOgIGNoZSBzaSBzdGEgZGlnaXRhbmRvLlxyXG4gICAgICBpZiAoIW5ldyBSZWdFeHAoXCJbXjAtOWEtekEtWl8uXVwiKS50ZXN0KGxhc3RUeXBlZFN0cmluZykpIHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0eVBhdGggPSBsYXN0VHlwZWRTdHJpbmcuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGxhc3RUeXBlZFdvcmsgPSBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICBsZXQgcHJvcGVydGllc1RvQ2hlY2s6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHByb3BlcnR5UGF0aC5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgcHJvcGVydGllc1RvQ2hlY2sgPSBbXCJyZWNcIiwgXCJjdHhcIl07XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIHByb3BlcnR5UGF0aC5sZW5ndGggPiAxICYmXHJcbiAgICAgICAgICBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDJdID09PSBcImN0eFwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9DaGVjayA9IE9iamVjdC5rZXlzKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmNvbnRleHQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBwcm9wZXJ0eVBhdGgubGVuZ3RoID4gMiAmJlxyXG4gICAgICAgICAgcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAzXSA9PT0gXCJjdHhcIiAmJlxyXG4gICAgICAgICAgcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAyXSA9PT0gXCJVc2VyXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gT2JqZWN0LmtleXMoVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dC5Vc2VyKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgcHJvcGVydHlQYXRoLmxlbmd0aCA+IDEgJiZcclxuICAgICAgICAgIHByb3BlcnR5UGF0aFtwcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMl0gPT09IFwicmVjXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gYXZhaWxhYmxlUmVjUHJvcGVydGllcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEVzZWd1byBpbCBjb250cm9sbG8gc3VsbGUgcHJvcHJpZXTDoCByZWN1cGVyYXRlLCBhZ2dpdW5nbyBhaSBzdWdnZXJpbWVudGkgdHV0dGkgaSBub21pIGNoZSBpbml6aWFubyBjb25cclxuICAgICAgICAvLyBxdWVsbG8gY2hlIHN0YSBkaWdpdGFuZG8gbCd1dGVudGUuXHJcbiAgICAgICAgcHJvcGVydGllc1RvQ2hlY2suZm9yRWFjaCgocHJvcCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHByb3Auc3RhcnRzV2l0aChsYXN0VHlwZWRXb3JrKSkge1xyXG4gICAgICAgICAgICBhdmFpbGFibGVPcHRpb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgIGxhYmVsOiBwcm9wLFxyXG4gICAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgICAgdHlwZWRGb3JtdWxhICtcclxuICAgICAgICAgICAgICAgIHByb3Auc3Vic3RyaW5nKGxhc3RUeXBlZFdvcmsubGVuZ3RoLCBwcm9wLmxlbmd0aCksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gYXZhaWxhYmxlT3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXV0b2NvbXBsZXRlT3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBkYWxsJ2h0bWwgcGVyIGltcG9zdGFyZSBsZSBjbGFzc2kgY3NzIHBlciB2aXN1YWxpenphcmUgaWwgY2FtcG8gYWxsJ2ludGVybm8gZGVsbGEgZm9ybS5cclxuICAgKiBTZSBwZXIgaWwgZmllbGQgc29ubyBzdGF0ZSBzcGVjaWZpY2F0ZSBkZWxsZSBjbGFzc2kgYWxsb3JhIHZlbmdvbm8gYXBwbGNhdGUgcXVlbGxlLCBhbHRyaW1lbnRpIHZlbmdvbm8gdXNhdGVcclxuICAgKiBkZWxsZSBjbGFzc2kgZGkgZGVmYXVsdC5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIGRhIHZpc3VhbGl6emFyZS5cclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1bmEgc3RyaW5nYSBjb250ZW5lbnRlIGxlIGNsYXNzaSBjc3MgZGEgYXBwbGljYXJlLlxyXG4gICAqL1xyXG4gIGdldEZpZWxkU3lsZUNsYXNzKGZpZWxkOiBCYXNlRmllbGQsIHNob3dBbGxGaWVsZHM6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgICAgICAgXHJcbiAgICB2YXIgY29sc3BhbnZhbHVlcyA9IFwiXCI7XHJcbiAgICB2YXIgdmlzaWJpbGl0eXZhbHVlcyA9IFwiXCI7XHJcbiAgICBpZiAoZmllbGQuQ29sU3BhblNpemVzICYmIGZpZWxkLkNvbFNwYW5TaXplcy5sZW5ndGggPiAwKXtcclxuICAgICAgY29sc3BhbnZhbHVlcyA9IGZpZWxkLkNvbFNwYW5TaXplcy5tYXAoKHNpemUpID0+XHJcbiAgICAgIENvbFNwYW5TaXplc0VudW1bc2l6ZV0udG9TdHJpbmcoKSkuam9pbihcIiBcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb2xzcGFudmFsdWVzID0gdGhpcy5nZXREZWZhdWx0U3R5bGVDbGFzcyhmaWVsZCwgJ2FsaWduLXNlbGYtZW5kJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmaWVsZC5Jbkxpc3RWaWV3ICYmICFzaG93QWxsRmllbGRzKXtcclxuICAgICAgaWYgKGZpZWxkLkludmlzaWJpbGl0eSA9PSBGaWVsZEludmlzaWJpbGl0eUVudW0uTkFTQ09TVE8peyB2aXNpYmlsaXR5dmFsdWVzID0gXCJ2aXNpYmlsaXR5X2hpZGRlblwiOyB9XHJcbiAgICAgIGlmIChmaWVsZC5JbnZpc2liaWxpdHkgPT0gRmllbGRJbnZpc2liaWxpdHlFbnVtW1wiTkFTQ09TVE8gQ09OIEFSRUEgVklTSUJJTEVcIl0peyB2aXNpYmlsaXR5dmFsdWVzID0gXCJ2aXNpYmlsaXR5X3RyYW5zcGFyZW50XCI7IH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sc3BhbnZhbHVlcyArIFwiIFwiICsgdmlzaWJpbGl0eXZhbHVlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBkYWxsJ2h0bWwgcGVyIGltcG9zdGFyZSBsZSBjbGFzc2kgY3NzIHBlciB2aXN1YWxpenphcmUgaWwgY2FtcG8gYWxsJ2ludGVybm8gZGVsbGEgZm9ybS5cclxuICAgKiBTZSBwZXIgaWwgZmllbGQgc29ubyBzdGF0ZSBzcGVjaWZpY2F0ZSBkZWxsZSBjbGFzc2kgYWxsb3JhIHZlbmdvbm8gYXBwbGNhdGUgcXVlbGxlLCBhbHRyaW1lbnRpIHZlbmdvbm8gdXNhdGVcclxuICAgKiBkZWxsZSBjbGFzc2kgZGkgZGVmYXVsdC5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIGRhIHZpc3VhbGl6emFyZS5cclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1bmEgc3RyaW5nYSBjb250ZW5lbnRlIGxlIGNsYXNzaSBjc3MgZGEgYXBwbGljYXJlLlxyXG4gICAqL1xyXG4gIGdldEZpZWxkQW5zd2VyU3R5bGVDbGFzcyhmaWVsZDogQmFzZUZpZWxkKTogc3RyaW5nIHtcclxuICAgICAgICBcclxuICAgIHZhciBjb2xzcGFudmFsdWVzID0gXCJcIjtcclxuICAgIHZhciB2aXNpYmlsaXR5dmFsdWVzID0gXCJcIjtcclxuXHJcbiAgICBpZiAoZmllbGQuQW5zd2VyU3R5bGUgJiYgZmllbGQuQW5zd2VyU3R5bGUuQ29sU3BhblNpemVzICYmIGZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplcy5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgIGNvbHNwYW52YWx1ZXMgPSBmaWVsZC5BbnN3ZXJTdHlsZS5Db2xTcGFuU2l6ZXMubWFwKChzaXplKSA9PlxyXG4gICAgICAgIENvbFNwYW5TaXplc0VudW1bc2l6ZV0udG9TdHJpbmcoKVxyXG4gICAgICApLmpvaW4oXCIgXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29sc3BhbnZhbHVlcyA9IHRoaXMuZ2V0RGVmYXVsdFN0eWxlQ2xhc3MoZmllbGQsICdhbGlnbi1zZWxmLXN0YXJ0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmaWVsZC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3KXtcclxuICAgICAgaWYgKGZpZWxkLkFuc3dlclN0eWxlLkludmlzaWJpbGl0eSA9PSBGaWVsZEludmlzaWJpbGl0eUVudW0uTkFTQ09TVE8peyB2aXNpYmlsaXR5dmFsdWVzID0gXCJ2aXNpYmlsaXR5X2hpZGRlblwiOyB9XHJcbiAgICAgIGlmIChmaWVsZC5BbnN3ZXJTdHlsZS5JbnZpc2liaWxpdHkgPT0gRmllbGRJbnZpc2liaWxpdHlFbnVtW1wiTkFTQ09TVE8gQ09OIEFSRUEgVklTSUJJTEVcIl0peyB2aXNpYmlsaXR5dmFsdWVzID0gXCJ2aXNpYmlsaXR5X3RyYW5zcGFyZW50XCI7IH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sc3BhbnZhbHVlcyArIFwiIFwiICsgdmlzaWJpbGl0eXZhbHVlcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFN0eWxlQ2xhc3MoZmllbGQ6IEJhc2VGaWVsZCwgZGVmYXVsdEFsaWduOiBzdHJpbmcpOiBzdHJpbmd7XHJcbiAgICBcclxuICAgIHN3aXRjaCAoZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIGRpIHRlc3RvXCJdOlxyXG4gICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnQ2FtcG8gZGkgdGVzdG8nKVxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNCBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQXJlYSBkaSB0ZXN0b1wiXTpcclxuICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0FyZWEgZGkgdGVzdG8nKVxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyIFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJCb29sZWFub1wiXTpcclxuICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0Jvb2xlYW5vJylcclxuICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTQgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0RhdGEgZS9vIG9yYScpXHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00IFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXTpcclxuICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0NhbXBvIG51bWVyaWNvJylcclxuICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTQgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFsbGVnYXRvXCJdOlxyXG4gICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnQWxsZWdhdG8nKVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIChmaWVsZCBhcyBBdHRhY2htZW50RmllbGQpLklzTXVsdGlBdHRhY2ggfHxcclxuICAgICAgICAgICgoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkcyAmJlxyXG4gICAgICAgICAgICAoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTIgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNCBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgICB9XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lXCJdOlxyXG4gICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnSW1tYWdpbmUnKVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uSXNNdWx0aUF0dGFjaCB8fFxyXG4gICAgICAgICAgKChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzICYmXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMiBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00IFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcbiAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdFbGVuY28gZ2VuZXJpY28nKVxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNCBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiTG9va3VwXCJdOlxyXG4gICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnTG9va3VwJylcclxuICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTQgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdOlxyXG4gICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnRm9ybSBkaSBkZXR0YWdsaW8nKVxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyIFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gaW1tYWdpbmlcIl06XHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00IFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFdGljaGV0dGFcIl06XHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00IFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgICBnZXRGaWVsZEZpbHRlclN0eWxlQ2xhc3MoZmllbGQ6IEJhc2VGaWVsZCwgbnVtYmVyT2ZDb2x1bW5zOiBudW1iZXIpOiBzdHJpbmcgeyAgXHJcbiAgICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRTdHlsZUNsYXNzV2l0aE51bWJlckNvbHVtbnMoZmllbGQsICdhbGlnbi1zZWxmLXN0YXJ0JyxudW1iZXJPZkNvbHVtbnMpO1xyXG4gICAgfSAgXHJcblxyXG4gICAgcHJpdmF0ZSBnZXREZWZhdWx0U3R5bGVDbGFzc1dpdGhOdW1iZXJDb2x1bW5zKGZpZWxkOiBCYXNlRmllbGQsIGRlZmF1bHRBbGlnbjogc3RyaW5nLCBudW1iZXJPZkNvbHVtbnM6IG51bWJlcik6IHN0cmluZ3tcclxuICAgIFxyXG4gICAgdmFyIGNvbENsYXNzTnVtID0gTWF0aC5mbG9vcigxMiAvIG51bWJlck9mQ29sdW1ucyk7XHJcblxyXG4gICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gZGkgdGVzdG9cIl06XHJcbiAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdDYW1wbyBkaSB0ZXN0bycpXHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC1cIitjb2xDbGFzc051bStcIiBjb2wtbGctXCIrY29sQ2xhc3NOdW0rXCIgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFyZWEgZGkgdGVzdG9cIl06XHJcbiAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdBcmVhIGRpIHRlc3RvJylcclxuICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMiBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQm9vbGVhbm9cIl06XHJcbiAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdCb29sZWFubycpXHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC1cIitjb2xDbGFzc051bStcIiBjb2wtbGctXCIrY29sQ2xhc3NOdW0rXCIgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0RhdGEgZS9vIG9yYScpXHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC1cIitjb2xDbGFzc051bStcIiBjb2wtbGctXCIrY29sQ2xhc3NOdW0rXCIgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdOlxyXG4gICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnQ2FtcG8gbnVtZXJpY28nKVxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtXCIrY29sQ2xhc3NOdW0rXCIgY29sLWxnLVwiK2NvbENsYXNzTnVtK1wiIFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJBbGxlZ2F0b1wiXTpcclxuICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0FsbGVnYXRvJylcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5Jc011bHRpQXR0YWNoIHx8XHJcbiAgICAgICAgICAoKGZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuTWV0YWRhdGFGaWVsZHMgJiZcclxuICAgICAgICAgICAgKGZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuTWV0YWRhdGFGaWVsZHMubGVuZ3RoID4gMClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyIFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLVwiK2NvbENsYXNzTnVtK1wiIGNvbC1sZy1cIitjb2xDbGFzc051bStcIiBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgICB9XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lXCJdOlxyXG4gICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnSW1tYWdpbmUnKVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uSXNNdWx0aUF0dGFjaCB8fFxyXG4gICAgICAgICAgKChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzICYmXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMiBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00IFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcbiAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdFbGVuY28gZ2VuZXJpY28nKVxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtXCIrY29sQ2xhc3NOdW0rXCIgY29sLWxnLVwiK2NvbENsYXNzTnVtK1wiIFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJMb29rdXBcIl06XHJcbiAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdMb29rdXAnKVxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtXCIrY29sQ2xhc3NOdW0rXCIgY29sLWxnLVwiK2NvbENsYXNzTnVtK1wiIFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXTpcclxuICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0Zvcm0gZGkgZGV0dGFnbGlvJylcclxuICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMiBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGltbWFnaW5pXCJdOlxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtXCIrY29sQ2xhc3NOdW0rXCIgY29sLWxnLVwiK2NvbENsYXNzTnVtK1wiIFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFdGljaGV0dGFcIl06XHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC1cIitjb2xDbGFzc051bStcIiBjb2wtbGctXCIrY29sQ2xhc3NOdW0rXCIgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBpbCBGb3JtR3JvdXAgY2hlIHJhcHByZXNlbnRhIHVuYSBGb3JtIGEgcGFydGlyZSBkYWkgc3VvaSBCYXNlRmllbGQuXHJcbiAgICogQHBhcmFtIGZvcm1GaWVsZHMgTGlzdGEgZGVpIEJhc2VGaWVsZCBjaGUgY29tcG9uZ29ubyBsYSBmb3JtLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgT2dnZXR0byBkaSB0aXBvIFJlY29yZCBjaGUgY29udGllbmUgaSB2YWxvcmkgZGVpIGNhbXBpLlxyXG4gICAqIEBwYXJhbSBvbmx5VmlldyBTZSBUUlVFIGRpc2FiaWxpdGEgbGEgZm9ybSBwZXIgcmVuZGVybGEgaW4gc29sYSBsZXR0dXJhLlxyXG4gICAqIEBwYXJhbSBpbmNsdWRlQ3VycmVudEZvcm1JbkZpZWxkIFNlIFRSVUUgcG9wb2xhIGxhIHByb3ByaWV0w6AgRm9ybUZvcm1Hcm91cCBhbGwnaW50ZXJubyBkaSBvZ25pIEJhc2VGaWVsZCBjb24gaWwgRm9ybUdyb3VwIGNvcnJlbnRlLlxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIEZvcm1Hcm91cCByYXBwcmVzZW50YXRlIGxhIEZvcm0gYSBjdWkgYXBwYXJ0ZW5nb25vIGkgQmFzZUZpZWxkIHJpY2V2dXRpIGluIGlucHV0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBDcmVhdGVGb3JtRm9ybUdyb3VwKFxyXG4gICAgZm9ybUZpZWxkczogQXJyYXk8QmFzZUZpZWxkPixcclxuICAgIHJlY29yZDogUmVjb3JkLFxyXG4gICAgb25seVZpZXcgPSBmYWxzZSxcclxuICAgIGluY2x1ZGVDdXJyZW50Rm9ybUluRmllbGQgPSB0cnVlXHJcbiAgKTogVW50eXBlZEZvcm1Hcm91cCB7XHJcbiAgICAvLyAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJmb3JtRmllbGRzXCIsIGZvcm1GaWVsZHMpO1xyXG4gICAgLy8gLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwicmVjb3JkXCIsIHJlY29yZCk7XHJcbiAgICAvLyAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvbmx5Vmlld1wiLCBvbmx5Vmlldyk7XHJcbiAgICAvLyAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJpbmNsdWRlQ3VycmVudEZvcm1JbkZpZWxkXCIsIGluY2x1ZGVDdXJyZW50Rm9ybUluRmllbGQpO1xyXG5cclxuICAgIGNvbnN0IGZvcm1Gb3JtOiBVbnR5cGVkRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChbXSk7XHJcblxyXG4gICAgZm9ybUZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgLy8gICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coZmllbGQpO1xyXG4gICAgICBmb3JtRm9ybS5hZGRDb250cm9sKFxyXG4gICAgICAgIGZpZWxkLk5hbWUsXHJcbiAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEZvcm1Db250cm9sKGZpZWxkLCByZWNvcmQpXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbmNsdWRlQ3VycmVudEZvcm1JbkZpZWxkKSB7XHJcbiAgICAgICAgLy8gLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKGZpZWxkKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgIGZpZWxkLkZvcm1Gb3JtR3JvdXAgPSBmb3JtRm9ybTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAob25seVZpZXcpIHtcclxuICAgICAgZm9ybUZvcm0uZGlzYWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JtRm9ybTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bnppb25lIHBlciBjcmVhcmUgZSBhZ2dpdW5nZXJlIGFsIEZvcm1Hcm91cCByYXBwcmVzZW50YW50ZSBsYSBmb3JtIHVuIG51b3ZvIEZvcm1Db250cm9sIGEgcGFydGlyZSBkYSB1biBGaWVsZC5cclxuICAgKiBJbiBudW92byBGb3JtQ29udHJvbCBhdnLDoCBpbCBub21lIGRlbCBjYW1wbyBwYXNzYXRvIGUgdmVycmFubm8gaW1wb3N0YXRpIGkgVmFsaWRhdG9ycyBpbiBiYXNlIGFsIHRpcG8gZGVsIGNhbXBvIHN0ZXNzby5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIHBlciBjdWkgY3JlYXJlIGlsIEZvcm1Db250cm9sIGRhIGluc2VyaXJlIG5lbCBGb3JtR3JvdXAgZGVsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRmllbGRGb3JtQ29udHJvbChcclxuICAgIGZpZWxkOiBCYXNlRmllbGQsXHJcbiAgICByZWNvcmQ6IFJlY29yZFxyXG4gICk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JzOiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcclxuXHJcbiAgICBpZiAoZmllbGQuUmVxdWlyZWQpIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBkaSB0ZXN0b1wiXTpcclxuICAgICAgICBpZiAoKGZpZWxkIGFzIFRleHRGaWVsZCkuTWF4TGVuZ2h0KSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgoKGZpZWxkIGFzIFRleHRGaWVsZCkuTWF4TGVuZ2h0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoZmllbGQgYXMgVGV4dEZpZWxkKS5NaW5MZW5naHQpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCgoZmllbGQgYXMgVGV4dEZpZWxkKS5NaW5MZW5naHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoICgoZmllbGQgYXMgVGV4dEZpZWxkKS5UZXh0TWFzaykge1xyXG4gICAgICAgICAgY2FzZSBUZXh0TWFza0VudW0uVXJsOlxyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKFVybFJlZ2V4KSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBUZXh0TWFza0VudW0uRW1haWw6XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLmVtYWlsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFRleHRNYXNrRW51bS5UZWxlZm9ubzpcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihUZWxSZWdleCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFyZWEgZGkgdGVzdG9cIl06XHJcbiAgICAgICAgaWYgKChmaWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NYXhMZW5naHQpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoKGZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1heExlbmdodClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWluTGVuZ2h0KSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKChmaWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NaW5MZW5naHQpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkFsbGVnYXRvOlxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW0uSW1tYWdpbmU6XHJcbiAgICAgICAgaWYgKGZpZWxkLlJlcXVpcmVkKSB2YWxpZGF0b3JzLnB1c2goQXJyYXlWYWxpZGF0b3JzLm1pbkxlbmdodCgxKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuICAgICAgICBpZiAoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Jc011bHRpQ2hvaWNoZSlcclxuICAgICAgICAgIGlmIChmaWVsZC5SZXF1aXJlZCkgdmFsaWRhdG9ycy5wdXNoKEFycmF5VmFsaWRhdG9ycy5taW5MZW5naHQoMSkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gaW1tYWdpbmlcIl06XHJcbiAgICAgICAgaWYgKChmaWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLklzTXVsdGlDaG9pY2hlKVxyXG4gICAgICAgICAgaWYgKGZpZWxkLlJlcXVpcmVkKSB2YWxpZGF0b3JzLnB1c2goQXJyYXlWYWxpZGF0b3JzLm1pbkxlbmdodCgxKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wocmVjb3JkW2ZpZWxkLk5hbWVdLCB2YWxpZGF0b3JzKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGdsaSBlbmRwb2ludCBkYSB1c2FyZSBkaSBkZWZhdWx0IGEgcGFydGlyZSBkYWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXJcclxuICAgKiBhIGN1aSBzaSBkZXZlIGNvbm5ldHRlcmUgZSBhbCB0b2tlbiBkYSBwYXNzYXJlIHBlciBhdXRlbnRpY2Fyc2kuXHJcbiAgICogQHBhcmFtIGJhc2VTZXJ2ZXJVcmwgU3RyaW5nYSBkZWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXIgKGVzOiBcImh0dHA6Ly9sb2NhbGhvc3Q6NTAwMFwiKS5cclxuICAgKiBAcGFyYW0gdXNlclRva2VuIFRva2VuIGRlbGwndXRlbnRlIGxvZ2dhdG8gZGEgdXNhcmUgcGVyIGF1dGVudGljYXJzaSBzZSBuZWNlc3NhcmlvLlxyXG4gICAqIEByZXR1cm5zIFJlc2l0dWlzY2UgbGEgY29uZmlndXJhemlvbmUgY29tcGxldGEgZGVnbGkgZW5kUG9pbnQgZGEgdXNhcmUgZGkgZGVmYXVsdC5cclxuICAgKi9cclxuICBwdWJsaWMgQ29uZmlndXJlRGVmYXVsdEVuZFBvaW50cyhcclxuICAgIGJhc2VTZXJ2ZXJVcmw6IHN0cmluZyxcclxuICAgIHVzZXJUb2tlbjogc3RyaW5nXHJcbiAgKTogRW5kUG9pbnRDb25maWd1cmF0aW9uIHtcclxuICAgIGxldCBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbiA9XHJcbiAgICAgIG5ldyBFbmRQb2ludENvbmZpZ3VyYXRpb24oYmFzZVNlcnZlclVybCwgdXNlclRva2VuKTtcclxuXHJcbiAgICAvLyBlbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyA9IHtcclxuICAgIC8vICAgR2V0QnlGb3JtSURFbmRQb2ludDoge1xyXG4gICAgLy8gICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS92MS9nZXRhbGxcIixcclxuICAgIC8vICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgLy8gICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLkdFVCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludDoge1xyXG4gICAgLy8gICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS92MS9HZXRBbGxCeVVzZXJJRFwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBHZXRCeUlERW5kUG9pbnQ6IHtcclxuICAgIC8vICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvZ2V0QnlJRFwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBTYXZlRW5kUG9pbnQ6IHtcclxuICAgIC8vICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvc2F2ZVwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uUE9TVCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgRHVwbGljYXRlRW5kUG9pbnQ6IHtcclxuICAgIC8vICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvZHVwbGljYXRlXCIsXHJcbiAgICAvLyAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgIC8vICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5HRVQsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIERlbGV0ZUVuZFBvaW50OiB7XHJcbiAgICAvLyAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL3YxL2RlbGV0ZVwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uREVMRVRFLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gfTtcclxuICAgIC8vIGVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3JtcyA9IHtcclxuICAgIC8vICAgR2V0QnlJREVuZFBvaW50OiB7XHJcbiAgICAvLyAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL2NvbmYvZm9ybVwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBHZXRCeUlEQW5kVmVyc2lvbkVuZFBvaW50OiB7XHJcbiAgICAvLyAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL2NvbmYvR2V0QnlJREFuZFZlcnNpb25cIixcclxuICAgIC8vICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgLy8gICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLkdFVCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgU2F2ZUVuZFBvaW50OiB7XHJcbiAgICAvLyAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL2NvbmYvZm9ybVwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uUE9TVCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vIH07XHJcbiAgICByZXR1cm4gZW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIH1cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBleHByZXNzaW9uIHByZW5kZSB1bmEgc3RyaW5nYSBpbiBpbnB1dCBlIHZlcmlmaWNhIGNoZSBvZ25pIHBhcmVudGVzaSBhcGVydGEgdmVuZ2EgYW5jaGUgY2hpdXNhXHJcbiAgICogQHJldHVybnMgdHJ1ZSBzZSBsZSBwYXJlbnRlc2kgc29ubyBwYXJpIGUgb2duaSBwYXJlbnRlc2kgY2hpdWRlIHNlIHN0ZXNzYSwgZmFsc2Ugc2UgbWFuY2FubyBwYXJlbnRlc2kgbyBub24gdmVuZ29ubyBjaGl1c2VcclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIHN0cmluZ0NoZWNrUGFyZW50ZXNpcyhleHByZXNzaW9uLCByZXF1aXJlZCA9IGZhbHNlKSB7XHJcbiAgICBpZiAoZXhwcmVzc2lvbiA9PSB1bmRlZmluZWQgfHwgZXhwcmVzc2lvbiA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiByZXF1aXJlZCA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIH1cclxuICAgIGxldCBzdGFjayA9IFtdO1xyXG4gICAgbGV0IGN1cnJlbnQ7XHJcbiAgICBjb25zdCBtYXRjaExvb2t1cCA9IHtcclxuICAgICAgXCIoXCI6IFwiKVwiLFxyXG4gICAgICBcIltcIjogXCJdXCIsXHJcbiAgICAgIFwie1wiOiBcIn1cIixcclxuICAgIH07XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGN1cnJlbnQgPSBleHByZXNzaW9uW2ldOyAvL2Vhc2llciB0aGFuIHdyaXRpbmcgaXQgb3ZlciBhbmQgb3ZlclxyXG5cclxuICAgICAgaWYgKGN1cnJlbnQgPT09IFwiKFwiIHx8IGN1cnJlbnQgPT09IFwiW1wiIHx8IGN1cnJlbnQgPT09IFwie1wiKSB7XHJcbiAgICAgICAgc3RhY2sucHVzaChjdXJyZW50KTtcclxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09PSBcIilcIiB8fCBjdXJyZW50ID09PSBcIl1cIiB8fCBjdXJyZW50ID09PSBcIn1cIikge1xyXG4gICAgICAgIGNvbnN0IGxhc3RCcmFja2V0ID0gc3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgIGlmIChtYXRjaExvb2t1cFtsYXN0QnJhY2tldF0gIT09IGN1cnJlbnQpIHtcclxuICAgICAgICAgIC8vaWYgdGhlIHN0YWNrIGlzIGVtcHR5LCAucG9wKCkgcmV0dXJucyB1bmRlZmluZWQsIHNvIHRoaXMgZXhwcmVzc2lvbiBpcyBzdGlsbCBjb3JyZWN0XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlOyAvL3Rlcm1pbmF0ZSBpbW1lZGlhdGVseSAtIG5vIG5lZWQgdG8gY29udGludWUgc2Nhbm5pbmcgdGhlIHN0cmluZ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdGFjay5sZW5ndGggPT09IDA7IC8vYW55IGVsZW1lbnRzIG1lYW4gYnJhY2tldHMgbGVmdCBvcGVuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIGRhdGEgbGEgY29uZmlndXJhemlvbmUgZGkgdW4gZW5kcG9pbnQgY29zdHJ1aXNjZSBsJ3VybCBkYSBjaGlhbWFyZSwgZ2xpIGV2ZW50dWFsaSBwYXJhbWV0cmlcclxuICAgKiBkYSBwYXNzYXJlIChuZWwgYm9keSBvIG5lbGxhIHJvdHRhKSBlZCBlZmZldHR1YSBsYSBjaGlhbWF0YS4gQWwgdGVybWluZSBkZWxsYSBjaGlhbWF0YSBlc2VndWUgbGUgZXZlbnR1YWxpXHJcbiAgICogZnVuemlvbmkgZGkgY2FsbGJhY2sgKHNpYSBpbiBjYXNvIGRpIHN1Y2Nlc3NvIGNoZSBpbiBjYXNvIGRpIGVycm9yZSkgcGFzc2F0ZSBpbiBpbnB1dC5cclxuICAgKiBAcGFyYW0gZW5kUG9pbnREYXRhIENvZmlndXJhemlvbmUgZGVsbCdlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKiBAcGFyYW0gZHluYW1pY01vZHVsZVBhcmFtcyBBcnJheSBkZWkgcGFyYW1ldHJpIGFnZ2l1bnRpIGRhbCBtb2R1bG8gZGluYW1pY28gYSBxdWVsbGkgZ2nDoCBjb25maWd1cmF0aVxyXG4gICAqIChhZCBlc2VtcGlvIGlsIHJlY29yZCBvIGxhIGZvcm0gZGEgc2FsdmFyZSBvcHB1cmUgbCdJRCBwZXIgcmVjdXBlcmFyZSB1bmEgcGFydGljb2xhcmUgZW50aXTDoCkuXHJcbiAgICogQHBhcmFtIGNhbGxiYWNrIE1ldG9kbyBkYSBlc2VndWlyZSBpbiBjYXNvIGRpIHN1Y2Nlc3NvIGRvcG8gbGEgY2hpYW1hdGEgaHR0cC5cclxuICAgKiBOT1RBOiBpbiBpbnB1dCB2aWVuZSBwYXNzYXRhIGxhIHJpc3Bvc3RhIGRlbGxhIGNoaWFtYXRhIHN0ZXNzYS5cclxuICAgKiBAcGFyYW0gZXJyb3JDYWxsQmFjayBNZXRvZG8gZGEgZXNlZ3VpcmUgaW4gY2FzbyBkaSBlcnJvcmUgZG9wbyBsYSBjaGlhbWF0YSBodHRwLlxyXG4gICAqIE5PVEE6IGluIGlucHV0IHZpZW5lIHBhc3NhdG8gbCdlcnJvcmUgZ2VuZXJhdG8gZGVsbGEgY2hpYW1hdGEgc3Rlc3NhLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBSdW5FbmRQb2ludENhbGwoXHJcbiAgICBlbmRQb2ludERhdGE6IEVuZFBvaW50RGF0YSxcclxuICAgIGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPSBudWxsLFxyXG4gICAgY2FsbGJhY2s6IChlOiBGb3JtIHwgQXJyYXk8Rm9ybT4gfCBSZWNvcmQgfCBBcnJheTxSZWNvcmQ+IHwgRHluQXR0YWNobWVudCB8IEFycmF5PER5bkF0dGFjaG1lbnQ+IHwgc3RyaW5nKSA9PiB2b2lkID0gbnVsbCxcclxuICAgIGVycm9yQ2FsbEJhY2s6IChlcnI6IHVua25vd24pID0+IHZvaWQgPSBudWxsXHJcbiAgKTogdm9pZCB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmFkZFJlcXVlc3RDb3VudGVyKCk7XHJcblxyXG4gICAgbGV0IHVybCA9IGAke2VuZFBvaW50RGF0YS5Vcmx9YDtcclxuICAgIGxldCBxdWVyeVBhcmFtczogc3RyaW5nID0gbnVsbDtcclxuICAgIGNvbnN0IGJvZHlQYXJhbXMgPSB7XHJcbiAgICAgIEFkZGl0aW9uYWxQYXJhbXM6IHt9LFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyNyZWdpb24gbWVyZ2VQYXJhbVxyXG4gICAgLy8gdW5pc2NvIGkgZGF0aSBkaSBkZWZhdWx0IGRlZmluaXRpIG5lbGxhIGNvbmZpZ3VyYXppb25lIGRlbGxhIGNoaWFtYXRhIGNvbiBpIGRhdGkgY2hlIGltcG9zdG8gbmVsbGEgY2hpYW1hdGEgc3BlY2lmaWNhXHJcbiAgICBpZiAoZW5kUG9pbnREYXRhLlBhcmFtcyA9PSB1bmRlZmluZWQgfHwgZW5kUG9pbnREYXRhLlBhcmFtcyA9PSBudWxsKSB7XHJcbiAgICAgIGVuZFBvaW50RGF0YS5QYXJhbXMgPSBbXTtcclxuICAgIH1cclxuICAgIGlmIChkeW5hbWljTW9kdWxlUGFyYW1zID09IHVuZGVmaW5lZCB8fCBkeW5hbWljTW9kdWxlUGFyYW1zID09IG51bGwpIHtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1lcmdlZFBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9IFsuLi5lbmRQb2ludERhdGEuUGFyYW1zXTtcclxuXHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLmZvckVhY2goKG9iaikgPT4ge1xyXG4gICAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gbWVyZ2VkUGFyYW1zLmZpbmRJbmRleChcclxuICAgICAgICAoaXRlbSkgPT4gaXRlbS5QYXJhbU5hbWUgPT09IG9iai5QYXJhbU5hbWVcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIG1lcmdlZFBhcmFtc1tleGlzdGluZ0luZGV4XS5QYXJhbVZhbHVlID0gb2JqLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgbWVyZ2VkUGFyYW1zW2V4aXN0aW5nSW5kZXhdLlBhcmFtVHlwZSA9IG9iai5QYXJhbVR5cGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWVyZ2VkUGFyYW1zLnB1c2gob2JqKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKG1lcmdlZFBhcmFtcykge1xyXG4gICAgICBtZXJnZWRQYXJhbXMuZm9yRWFjaCgocGFyYW0pID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHBhcmFtLlBhcmFtVHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl06IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RyaW5nUGFyYW06IHN0cmluZyA9XHJcbiAgICAgICAgICAgICAgcGFyYW0uUGFyYW1OYW1lICsgXCI9XCIgKyBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9XHJcbiAgICAgICAgICAgICAgKHF1ZXJ5UGFyYW1zID09IG51bGwgPyBcIlwiIDogcXVlcnlQYXJhbXMgKyBcIiZcIikgKyBzdHJpbmdQYXJhbTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bXCJJbiByb3V0ZVwiXToge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAodXJsLmVuZHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIikgKyBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl06IHtcclxuICAgICAgICAgICAgYm9keVBhcmFtc1twYXJhbS5QYXJhbU5hbWVdID0gcGFyYW0uUGFyYW1WYWx1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vI2VuZHJlZ2lvbiBtZXJnZVBhcmFtXHJcblxyXG4gICAgLy8jcmVnaW9uIGFkZERlZmF1bHRQYXJhbXNcclxuICAgIC8vIFNlIG5lbGxhIGNvbmZpZ3VyYXppb25lIHNvbm8gc3RhdGkgZGVmaW5pdGkgcGFyYW1ldHJpIGRhIGFnZ2l1bmdlcmUgYWxsYSBjaGlhbWF0YSBxdWVzdGkgdmVuZ29ubyBjaWNsYXRpXHJcbiAgICAvLyBlIGFnZ2l1bnRpIG5lbCBwdW50byBpbiBjdWkgZGV2b25vIGVzc2VyZSB1c2F0aS5cclxuICAgIC8vIGlmIChlbmRQb2ludERhdGEuUGFyYW1zKSB7XHJcbiAgICAvLyAgICAgZW5kUG9pbnREYXRhLlBhcmFtcy5mb3JFYWNoKHBhcmFtID0+IHtcclxuICAgIC8vICAgICAgICAgc3dpdGNoIChwYXJhbS5QYXJhbVR5cGUpIHtcclxuICAgIC8vICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnUXVlcnkgcGFyYW0nXToge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ1BhcmFtOiBzdHJpbmcgPSBwYXJhbS5QYXJhbU5hbWUgKyBcIj1cIiArIHBhcmFtLlBhcmFtVmFsdWU7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSAocXVlcnlQYXJhbXMgPT0gbnVsbCA/IFwiXCIgOiBxdWVyeVBhcmFtcyArIFwiJlwiKSArIHN0cmluZ1BhcmFtO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydJbiByb3V0ZSddOiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdXJsID0gdXJsICsgKHVybC5lbmRzV2l0aChcIi9cIikgPyBcIlwiIDogXCIvXCIpICsgcGFyYW0uUGFyYW1WYWx1ZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnSW4gQm9keSddOiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgYm9keVBhcmFtcy5BZGRpdGlvbmFsUGFyYW1zW3BhcmFtLlBhcmFtTmFtZV0gPSBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyNlbmRyZWdpb24gYWRkRGVmYXVsdFBhcmFtc1xyXG5cclxuICAgIC8vI3JlZ2lvbiBhZGRTcGVjaWZpY1BhcmFtc1xyXG4gICAgLy8gU2Ugc29ubyBzdGF0aSBwYXNzYXRpIHBhcmFtZXRyaSBkYSBhZ2dpdW5nZXJlIGFsbGEgY2hpYW1hdGEgZGVmaW5pdGkgYWxsJ2ludGVybm8gZGVsIG1vZHVsbyBkaW5hbWljb1xyXG4gICAgLy8gdmVuZ29ubyBjaWNsYXRpIGUgYWdnaXVudGkgbmVsIHB1bnRvIGluIGN1aSBkZXZvbm8gZXNzZXJlIHVzYXRpIGRvcG8gcXVlbGxpIGRlZmluaXRpIG5lbGxhIGNvbmZpZ3VyYXppb25lLlxyXG4gICAgLy8gaWYgKGR5bmFtaWNNb2R1bGVQYXJhbXMpIHtcclxuICAgIC8vICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLmZvckVhY2gocGFyYW0gPT4ge1xyXG4gICAgLy8gICAgICAgICBzd2l0Y2ggKHBhcmFtLlBhcmFtVHlwZSkge1xyXG4gICAgLy8gICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydRdWVyeSBwYXJhbSddOiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nUGFyYW06IHN0cmluZyA9IHBhcmFtLlBhcmFtTmFtZSArIFwiPVwiICsgcGFyYW0uUGFyYW1WYWx1ZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyA9IChxdWVyeVBhcmFtcyA9PSBudWxsID8gXCJcIiA6IHF1ZXJ5UGFyYW1zICsgXCImXCIpICsgc3RyaW5nUGFyYW07XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ0luIHJvdXRlJ106IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyAodXJsLmVuZHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIikgKyBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J106IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBib2R5UGFyYW1zW3BhcmFtLlBhcmFtTmFtZV0gPSBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfSlcclxuICAgIC8vIH1cclxuICAgIC8vI2VuZHJlZ2lvbiBhZGRTcGVjaWZpY1BhcmFtc1xyXG5cclxuICAgIGlmIChxdWVyeVBhcmFtcyAhPSBudWxsKSB7XHJcbiAgICAgIHVybCA9XHJcbiAgICAgICAgKHVybC5lbmRzV2l0aChcIi9cIikgPyB1cmwuc3Vic3RyaW5nKDAsIHVybC5sZW5ndGggLSAxKSA6IHVybCkgK1xyXG4gICAgICAgIFwiP1wiICtcclxuICAgICAgICBxdWVyeVBhcmFtcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmh0dHBcclxuICAgICAgLnJlcXVlc3QoZW5kUG9pbnREYXRhLlJlcXVlc3RNZXRob2QsIHVybCwge1xyXG4gICAgICAgIGhlYWRlcnM6IGVuZFBvaW50RGF0YS5Ub2tlblxyXG4gICAgICAgICAgPyB7IEF1dGhvcml6YXRpb246IGVuZFBvaW50RGF0YS5Ub2tlbiB9XHJcbiAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgYm9keTogIVtSZXF1ZXN0TWV0aG9kRW51bS5ERUxFVEUsIFJlcXVlc3RNZXRob2RFbnVtLkdFVF0uaW5jbHVkZXMoXHJcbiAgICAgICAgICBlbmRQb2ludERhdGEuUmVxdWVzdE1ldGhvZFxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gYm9keVBhcmFtc1xyXG4gICAgICAgICAgOiBudWxsLFxyXG4gICAgICB9KVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXM6IEZvcm0gfCBSZWNvcmQgfCBBcnJheTxSZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnJlbW92ZVJlcXVlc3RDb3VudGVyKCk7XHJcbiAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgY2FsbGJhY2socmVzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5yZW1vdmVSZXF1ZXN0Q291bnRlcigpO1xyXG4gICAgICAgICAgaWYgKGVycm9yQ2FsbEJhY2spIHtcclxuICAgICAgICAgICAgZXJyb3JDYWxsQmFjayhlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5FcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIlJ1bkVuZFBvaW50Q2FsbCAtIHN1YnNjcmliZSAtIGVuZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgXHJcbiAgc3RhdGljIGJhc2U2NFRvQmxvYihiNjREYXRhLCBjb250ZW50VHlwZT0nJywgc2xpY2VTaXplPTUxMikge1xyXG4gICAgbGV0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiNjREYXRhKTtcclxuICAgIGxldCBieXRlQXJyYXlzID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBvZmZzZXQgKz0gc2xpY2VTaXplKSB7XHJcbiAgICAgIGxldCBzbGljZSA9IGJ5dGVDaGFyYWN0ZXJzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2xpY2VTaXplKTtcclxuXHJcbiAgICAgIGxldCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShzbGljZS5sZW5ndGgpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xyXG4gICAgICBieXRlQXJyYXlzLnB1c2goYnl0ZUFycmF5KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKGJ5dGVBcnJheXMsIHt0eXBlOiBjb250ZW50VHlwZX0pO1xyXG4gICAgcmV0dXJuIGJsb2I7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4vKiB1dGlsaXp6YXRpIGluIFRNRUQgLT4qL1xyXG5cclxucHVibGljIHN0YXRpYyBwYXJzZVZhbHVlU3RyaW5nKGZpZWxkLCByZWNvcmQpe1xyXG4gIHZhciBvdXRwdXQgPSBudWxsO1xyXG4gIGlmIChmaWVsZC5Gb3JtdWxhKSB7XHJcbiAgICBvdXRwdXQgPSB7fTtcclxuICAgIGNvbnN0IHRlbXA6IHN0cmluZyA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKGZpZWxkLkZvcm11bGEsIHJlY29yZCwgbnVsbCk7XHJcbiAgICBvdXRwdXQgPSBHbG9iYWxTZXJ2aWNlLnN0cmluZ1RvVmFsdWVQYWlycyh0ZW1wKTtcclxuICB9IGVsc2UgaWYgKGZpZWxkLlZhbHVlUGFpcnMgIT0gbnVsbCkge1xyXG4gICAgb3V0cHV0ID0gZmllbGQuVmFsdWVQYWlycztcclxuICB9IGVsc2UgaWYgKGZpZWxkLlZhbHVlU3RyaW5nICE9IG51bGwgJiYgZmllbGQuVmFsdWVTdHJpbmcgIT0gXCJcIikge1xyXG4gICAgb3V0cHV0ID0gR2xvYmFsU2VydmljZS5zdHJpbmdUb1ZhbHVlUGFpcnMoZmllbGQuVmFsdWVTdHJpbmcpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuIFxyXG4vKjwtKi9cclxuXHJcbn1cclxuIl19
682
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eUhlbHBlci5zZXJ2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsa0JBQWtCLEVBR2xCLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGFBQWEsR0FDZCxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQ0wscUJBQXFCLEVBR3JCLGFBQWEsRUFDYixpQkFBaUIsR0FDbEIsTUFBTSx1Q0FBdUMsQ0FBQztBQUsvQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLFNBQVMsRUFDVCxRQUFRLEVBQ1IsUUFBUSxHQUNULE1BQU0sa0NBQWtDLENBQUM7QUFHMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7QUFPakQsTUFBTSxPQUFPLG9CQUFvQjtJQUkvQixRQUFRLENBQUMsT0FBZSxFQUFFLElBQVU7UUFDbEMsSUFBRyxJQUFJLENBQUMsU0FBUyxFQUFDO1lBQ2hCLElBQUcsSUFBSSxFQUFDO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFBO2FBQzNCO2lCQUFJO2dCQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7YUFDckI7U0FDRjtJQUNILENB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LENBQUMsQ0FBQztTQUNqRDthQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUU7WUFDbkMsTUFBTSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7U0FDM0I7YUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxFQUFFO1lBQy9ELE1BQU0sR0FBRyxhQUFhLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzlEO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7QUF0d0JlLDRCQUFPLEdBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztrSEFEcEMsb0JBQW9CO3NIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcclxuICBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRvckZuLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUZpZWxkLFxyXG4gIENvbFNwYW5TaXplc0VudW0sXHJcbiAgRmllbGRJbnZpc2liaWxpdHlFbnVtLFxyXG4gIEZpZWxkVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uL21vZGVscy9iYXNlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi9tb2RlbHMvY29udGV4dC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEVuZFBvaW50Q29uZmlndXJhdGlvbixcclxuICBFbmRQb2ludERhdGEsXHJcbiAgRW5kUG9pbnREYXRhUGFyYW1zLFxyXG4gIFBhcmFtVHlwZUVudW0sXHJcbiAgUmVxdWVzdE1ldGhvZEVudW0sXHJcbn0gZnJvbSBcIi4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgQXR0YWNobWVudEZpZWxkIH0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvYXR0YWNobWVudEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEltYWdlRmllbGQgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvbGlzdFZhbHVlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgVGV4dGFyZWFGaWVsZCB9IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL3RleHRhcmVhRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBUZXh0TWFza0VudW0sXHJcbiAgVGV4dEZpZWxkLFxyXG4gIFVybFJlZ2V4LFxyXG4gIFRlbFJlZ2V4LFxyXG59IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL3RleHRGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSBcIi4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gXCIuLi9tb2RlbHMvcmVjb3JkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEFycmF5VmFsaWRhdG9ycyB9IGZyb20gXCIuL2N1c3RvbS1mb3JtLXZhbGlkYXRvcnMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZSB9IGZyb20gXCIuL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTcGlubmVyU2VydmljZSB9IGZyb20gXCIuL3NwaW5uZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSBcIi4vZ2xvYmFsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSW1hZ2VTZWxlY3RvckZpZWxkIH0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvaW1hZ2VTZWxlY3RvckZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bkF0dGFjaG1lbnQgfSBmcm9tIFwiLi4vbW9kZWxzL2R5bkF0dGFjaG1lbnRcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFV0aWxpdHlIZWxwZXJTZXJ2aWNlIHtcclxuICBwdWJsaWMgc3RhdGljIGNvbnRleHQ6IENvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xyXG5cclxuICBkZWJ1Z01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkZWJ1Z0xvZyhtZXNzYWdlOiBzdHJpbmcsIGl0ZW0/OiBhbnkpe1xyXG4gICAgaWYodGhpcy5kZWJ1Z01vZGUpe1xyXG4gICAgICBpZihpdGVtKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlLCBpdGVtKVxyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgc3Bpbm5lclNlcnZpY2U6IFNwaW5uZXJTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEV2YWx1YXRlRmllbGRGb3JtdWxhKFxyXG4gICAgZm9ybXVsYTogc3RyaW5nLFxyXG4gICAgcmVjOiBSZWNvcmQsXHJcbiAgICBjdHg6IGFueVxyXG4gICk6IGFueSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBjcmVvIHVuYSBmdW56aW9uZSBjaGUgYWNjZXR0YSByZWMgZSBjdHhcclxuICAgICAgY29uc3QgZm4gPSBuZXcgRnVuY3Rpb24oXCJyZWNcIiwgXCJjdHhcIiwgYHJldHVybiAke2Zvcm11bGF9O2ApO1xyXG5cclxuICAgICAgLy8gZXNlZ3VvIHBhc3NhbmRvIGkgdmFsb3JpXHJcbiAgICAgIGNvbnN0IGV2YWx1YXRlZFZhbHVlID0gZm4ocmVjLCBjdHgpO1xyXG5cclxuICAgICAgcmV0dXJuIGV2YWx1YXRlZFZhbHVlID8/IG51bGw7XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3JlIG5lbGwnZXNlY3V6aW9uZTpcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgU2V0Q29udGV4dChjdHg6IENvbnRleHQpIHtcclxuICAgIHRoaXMuY29udGV4dCA9IGN0eDtcclxuICB9XHJcbiAgcHVibGljIHN0YXRpYyBpc051bWVyaWMobikge1xyXG4gICAgcmV0dXJuICFpc05hTihuKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaW5pdFN0eWxlcyhzdHlsZWNzcykge1xyXG4gICAgcmV0dXJuIHN0eWxlY3NzLnNwbGl0KFwiO1wiKS5yZWR1Y2UoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3Qga2V5cGFyID0gYi5zcGxpdChcIjpcIik7XHJcbiAgICAgIGlmIChrZXlwYXIubGVuZ3RoID4gMSkgYVtrZXlwYXJbMF0udHJpbSgpXSA9IGtleXBhclsxXS50cmltKCk7XHJcbiAgICAgIHJldHVybiBhO1xyXG4gICAgfSwge30pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBHZXRGaWVsZFR5cGUoZmllbGQ6IEJhc2VGaWVsZCkge1xyXG4gICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gZGkgdGVzdG9cIl06IHtcclxuICAgICAgICBjb25zdCB0OiBUZXh0RmllbGQgPSBPYmplY3QuYXNzaWduKG5ldyBUZXh0RmllbGQoKSwgZmllbGQpO1xyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIHBlciBpIGNhbXBpIGluIGN1aSBsJ3V0ZW50ZSBkZXZlIHNjcml2ZXJlIGNvbWFuZGkgamF2YXNjcmlwdC5cclxuICAgKiBJbiBiYXNlIGFsbCd1bHRpbW8gY2FyYXR0ZXJlIGRpZ2l0YXRvIHZpZW5lIGltcG9zdGF0byB1biBlbGVuY28gZGkgb2dnZXR0aSBvIHByb3ByaWV0w6AgY2hlIGwndXRlbnRlIGhhIGEgZGlzcG9zaXppb25lIGluIHF1ZWwgbW9tZW50by5cclxuICAgKiBAcGFyYW0gZmllbGRzIEFycmF5IGRpIEJhc2VGaWVsZCBhZ2dpdW50aSBhbGxhIEZvcm1cclxuICAgKiBAcGFyYW0gdHlwZWRGb3JtdWxhIFN0cmluZ2EgZGlnaXRhdGEgZGFsbCd1dGVudGVcclxuICAgKiBAc3VtbWFyeSBJbCBtZXRvZG8gaW1wb3N0YSBpIHN1Z2dlcmltZW50aSBiYXNhbmRvc2kgc3UgMyBjYXNpOlxyXG4gICAqICAxKSBsJ3V0ZW50ZSBub24gaGEgZGlnaXRhdG8gbnVsbGEgbyBsYSBzdHJpbmdhIGRpZ2l0YXRhIGRhbGwndXRlbnRlIGZpbmlzY2UgY29uIHVubyBzcGF6aW8gdnVvdG9cclxuICAgKiAgMikgbGEgc3RyaW5nYSBkaWdpdGF0YSBkYWxsJ3V0ZW50ZSBmaW5pc2NlIGNvbiB1biBcIi5cIlxyXG4gICAqICAzKSBsYSBzdHJpbmdhIGRpZ2l0YXRhIGRhbGwndXRlbnRlIG5vbiBjb2luY2lkZSBjb24gbmVzc3VuIGFsdHJvIGNhc28gc29wcmEgKGZpbmlzY2UgY29uIHVuIGNhcmF0dGVyZSBxdWFsdW5xdWUpXHJcbiAgICovXHJcbiAgcHVibGljIHN0YXRpYyBHZXRBdXRvY29tcGxldGVPcHRpb25zKFxyXG4gICAgZmllbGRzOiBBcnJheTxCYXNlRmllbGQ+LFxyXG4gICAgdHlwZWRGb3JtdWxhOiBzdHJpbmdcclxuICApOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4ge1xyXG4gICAgbGV0IGF1dG9jb21wbGV0ZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiA9IFtdO1xyXG5cclxuICAgIC8vIFJlY3VwZXJvIGkgbm9taSBkaSB0dXR0aSBpIGNhbXBpIGNyZWF0aSBmaW5vIGFkIG9yYSBuZWxsYSBmb3JtLlxyXG4gICAgY29uc3QgYXZhaWxhYmxlUmVjUHJvcGVydGllczogQXJyYXk8c3RyaW5nPiA9IGZpZWxkcy5tYXAoKGYpID0+XHJcbiAgICAgIGYuTGFiZWwuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIE5lbCBjYXNpIGluIGN1aSBsJ3V0ZW50ZSBub24gaGEgaW5zZXJpdG8gbnVsbGEgb3BwdXJlIGxhIHN0cmluZ2EgZmluaXNjZSBjb24gdW5vIHNwYXppbyB2dW90byBvIHVuIHNpbWJvbG8gZGl2ZXJzbyBkYSBcIi5cIlxyXG4gICAgLy8gKHVuIGNhcmF0dGVyZSBub24gYWxmYW51bWVyaWNvKSBpbXBvc3RvIGNvbWUgc3VnZ2VyaW1lbnRpIHNvbG8gXCJyZWNcIiBlIFwiY3R4XCIsIG92dmVybyBnbGkgdW5pY2kgZHVlIG9nZ2V0dGkgYSBjdWkgbCd1dGVudGUgaGEgYWNjZXNzby5cclxuICAgIGlmIChcclxuICAgICAgIXR5cGVkRm9ybXVsYSB8fFxyXG4gICAgICAoIXR5cGVkRm9ybXVsYS5lbmRzV2l0aChcIi5cIikgJiZcclxuICAgICAgICBuZXcgUmVnRXhwKFwiW14wLTlhLXpBLVpfXVwiKS50ZXN0KFxyXG4gICAgICAgICAgdHlwZWRGb3JtdWxhLnN1YnN0cmluZyh0eXBlZEZvcm11bGEubGVuZ3RoIC0gMSwgdHlwZWRGb3JtdWxhLmxlbmd0aClcclxuICAgICAgICApKVxyXG4gICAgKSB7XHJcbiAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXHJcbiAgICAgICAgeyBsYWJlbDogXCJyZWNcIiwgdmFsdWU6ICh0eXBlZEZvcm11bGEgPyB0eXBlZEZvcm11bGEgOiBcIlwiKSArIFwicmVjXCIgfSxcclxuICAgICAgICB7IGxhYmVsOiBcImN0eFwiLCB2YWx1ZTogKHR5cGVkRm9ybXVsYSA/IHR5cGVkRm9ybXVsYSA6IFwiXCIpICsgXCJjdHhcIiB9LFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gICAgLy8gU2UgbGEgc3RyaW5nYSBmaW5pc2NlIGNvbiB1biBcIi5cIiB2dW9sIGRpcmUgY2hlIGwndXRlbnRlIHN0YSBjZXJjYW5kbyBkaSBhY2NlZGVyZSBhZCB1bmEgcHJvcHJpZXTDoCBkaSB1biBvZ2dldHRvXHJcbiAgICAvLyBhIHN1YSBkaXNwb3NpemlvbmUuIFJlY3VwZXJvIGlsIG5vbWUgZGVsbCd1bHRpbW8gb2dnZXR0byBkaWdpdGF0byBkYWxsJ3V0ZW50ZSBlIHNlIGwnb2dnZXR0byBzY2VsdG8gw6ggXCJyZWNcIiBvIFwiY3R4XCJcclxuICAgIC8vIGFsbG9yYSBzdWdnZXJpc2NvIGxlIHByb3ByaWV0w6AgY2hlIGVzaXN0b25vIGFsbCdpbnRlcm5vIGRpIHF1ZXN0aSBvZ2dldHRpIGFsdHJpbWVudGkgbm9uIG1vc3RybyBudWxsYS5cclxuICAgIGVsc2UgaWYgKHR5cGVkRm9ybXVsYS5lbmRzV2l0aChcIi5cIikpIHtcclxuICAgICAgY29uc3QgZm9ybXVsYVBpZWNlczogQXJyYXk8c3RyaW5nPiA9IHR5cGVkRm9ybXVsYVxyXG4gICAgICAgIC5zcGxpdChcIiBcIilcclxuICAgICAgICBbdHlwZWRGb3JtdWxhLnNwbGl0KFwiIFwiKS5sZW5ndGggLSAxXS5zcGxpdChcIi5cIik7XHJcbiAgICAgIGlmIChmb3JtdWxhUGllY2VzW2Zvcm11bGFQaWVjZXMubGVuZ3RoIC0gMl0gPT09IFwicmVjXCIpIHtcclxuICAgICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gYXZhaWxhYmxlUmVjUHJvcGVydGllcy5tYXAoKGYpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7IGxhYmVsOiBmLCB2YWx1ZTogdHlwZWRGb3JtdWxhICsgZiB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAyXSA9PT0gXCJjdHhcIikge1xyXG4gICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBPYmplY3Qua2V5cyhVdGlsaXR5SGVscGVyU2VydmljZS5jb250ZXh0KS5tYXAoXHJcbiAgICAgICAgICAoZikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4geyBsYWJlbDogZiwgdmFsdWU6IHR5cGVkRm9ybXVsYSArIGYgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGZvcm11bGFQaWVjZXMubGVuZ3RoID4gMiAmJlxyXG4gICAgICAgIGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAzXSA9PT0gXCJjdHhcIiAmJlxyXG4gICAgICAgIGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAyXSA9PT0gXCJVc2VyXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgYXV0b2NvbXBsZXRlT3B0aW9ucyA9IE9iamVjdC5rZXlzKFxyXG4gICAgICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dC5Vc2VyXHJcbiAgICAgICAgKS5tYXAoKGYpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7IGxhYmVsOiBmLCB2YWx1ZTogdHlwZWRGb3JtdWxhICsgZiB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gSW4gdHV0dGkgZ2xpIGFsdHJpIGNhc2ksIG92dmVybyBxdWFuZG8gbGEgc3RyaW5nYSBkaWdpdGF0YSBmaW5pc2NlIGNvbiB1biBjYXJhdHRlcmUgZGl2ZXJzbyBkYSBxdWVsbGlcclxuICAgIC8vIGNvbnRyb2xsYXRpIGZpbm9yYSwgdnVvbCBkaXJlIGNoZSBsJ3V0ZW50ZSBzdGEgZGlnaXRhbnRvIGlsIG5vbWUgZGkgdW4gb2dnZXR0bywgdW5hIHByb3ByaWV0w6AgbyB1bmFcclxuICAgIC8vIGZ1bnppb25lIGphdmFzY3JpcHQuIENvbnRyb2xsbyBsYSBwYXJvbGEgY2hlIGwndXRlbnRlIHN0YSBkaWdpdGFuZG8gZSBzZSBmYSBwYXJ0ZSBkaSB1bm8gZGVnbGkgb2dnZXR0aSBhIGRpc3Bvc2l6aW9uZVxyXG4gICAgLy8gbyB1bmEgcHJvcHJpZXTDoCBkaSBlc3NpIGFsbG9yYSBzdWdnZXJpc2NvIGkgcG9zc2liaWxpIG1hdGNoLlxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IGF2YWlsYWJsZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiA9IFtdO1xyXG5cclxuICAgICAgLy8gUHJlbmRvIHR1dHRpIGkgYmxvY2NoaSBkaSBjYXJhdHRlcmkgZGlnaXRhdGkgZGFsbCd1dGVudGVcclxuICAgICAgY29uc3QgYWxsRm9ybXVsYVdvcmRzOiBBcnJheTxzdHJpbmc+ID0gdHlwZWRGb3JtdWxhLnNwbGl0KFwiIFwiKTtcclxuICAgICAgLy8gUHJlbmRvIGwndWx0aW1vIGJsb2NjbyBkaSBjYXJhdHRlcmkgZGlnaXRhdG8gZGFsbCd1dGVudGVcclxuICAgICAgY29uc3QgbGFzdFR5cGVkU3RyaW5nOiBzdHJpbmcgPVxyXG4gICAgICAgIGFsbEZvcm11bGFXb3Jkc1thbGxGb3JtdWxhV29yZHMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAvLyBTZSBsYSBsJ3VsdGltYSBzdHJpbmdhIGRpZ2l0YXRhIG5vbiBjb250aWVuZSBjYXJhdHRlcmkgc3BlY2lhbGkgYWxsb3JhIHNwbGl0dG8gbGEgc3RyaW5nYVxyXG4gICAgICAvLyBzdWkgXCIuXCIgZSBpbXBvc3RvIGkgc3VnZ2VyaW1lbnRpIGluIGJhc2UgYWwgcGF0aCBkZWxsYSBwcm9ycGlldMOgIGNoZSBzaSBzdGEgZGlnaXRhbmRvLlxyXG4gICAgICBpZiAoIW5ldyBSZWdFeHAoXCJbXjAtOWEtekEtWl8uXVwiKS50ZXN0KGxhc3RUeXBlZFN0cmluZykpIHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0eVBhdGggPSBsYXN0VHlwZWRTdHJpbmcuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGxhc3RUeXBlZFdvcmsgPSBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICBsZXQgcHJvcGVydGllc1RvQ2hlY2s6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHByb3BlcnR5UGF0aC5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgcHJvcGVydGllc1RvQ2hlY2sgPSBbXCJyZWNcIiwgXCJjdHhcIl07XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIHByb3BlcnR5UGF0aC5sZW5ndGggPiAxICYmXHJcbiAgICAgICAgICBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDJdID09PSBcImN0eFwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9DaGVjayA9IE9iamVjdC5rZXlzKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmNvbnRleHQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBwcm9wZXJ0eVBhdGgubGVuZ3RoID4gMiAmJlxyXG4gICAgICAgICAgcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAzXSA9PT0gXCJjdHhcIiAmJlxyXG4gICAgICAgICAgcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAyXSA9PT0gXCJVc2VyXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gT2JqZWN0LmtleXMoVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dC5Vc2VyKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgcHJvcGVydHlQYXRoLmxlbmd0aCA+IDEgJiZcclxuICAgICAgICAgIHByb3BlcnR5UGF0aFtwcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMl0gPT09IFwicmVjXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gYXZhaWxhYmxlUmVjUHJvcGVydGllcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEVzZWd1byBpbCBjb250cm9sbG8gc3VsbGUgcHJvcHJpZXTDoCByZWN1cGVyYXRlLCBhZ2dpdW5nbyBhaSBzdWdnZXJpbWVudGkgdHV0dGkgaSBub21pIGNoZSBpbml6aWFubyBjb25cclxuICAgICAgICAvLyBxdWVsbG8gY2hlIHN0YSBkaWdpdGFuZG8gbCd1dGVudGUuXHJcbiAgICAgICAgcHJvcGVydGllc1RvQ2hlY2suZm9yRWFjaCgocHJvcCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHByb3Auc3RhcnRzV2l0aChsYXN0VHlwZWRXb3JrKSkge1xyXG4gICAgICAgICAgICBhdmFpbGFibGVPcHRpb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgIGxhYmVsOiBwcm9wLFxyXG4gICAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgICAgdHlwZWRGb3JtdWxhICtcclxuICAgICAgICAgICAgICAgIHByb3Auc3Vic3RyaW5nKGxhc3RUeXBlZFdvcmsubGVuZ3RoLCBwcm9wLmxlbmd0aCksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gYXZhaWxhYmxlT3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXV0b2NvbXBsZXRlT3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBkYWxsJ2h0bWwgcGVyIGltcG9zdGFyZSBsZSBjbGFzc2kgY3NzIHBlciB2aXN1YWxpenphcmUgaWwgY2FtcG8gYWxsJ2ludGVybm8gZGVsbGEgZm9ybS5cclxuICAgKiBTZSBwZXIgaWwgZmllbGQgc29ubyBzdGF0ZSBzcGVjaWZpY2F0ZSBkZWxsZSBjbGFzc2kgYWxsb3JhIHZlbmdvbm8gYXBwbGNhdGUgcXVlbGxlLCBhbHRyaW1lbnRpIHZlbmdvbm8gdXNhdGVcclxuICAgKiBkZWxsZSBjbGFzc2kgZGkgZGVmYXVsdC5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIGRhIHZpc3VhbGl6emFyZS5cclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1bmEgc3RyaW5nYSBjb250ZW5lbnRlIGxlIGNsYXNzaSBjc3MgZGEgYXBwbGljYXJlLlxyXG4gICAqL1xyXG4gIGdldEZpZWxkU3lsZUNsYXNzKGZpZWxkOiBCYXNlRmllbGQsIHNob3dBbGxGaWVsZHM6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgICAgICAgXHJcbiAgICB2YXIgY29sc3BhbnZhbHVlcyA9IFwiXCI7XHJcbiAgICB2YXIgdmlzaWJpbGl0eXZhbHVlcyA9IFwiXCI7XHJcbiAgICBpZiAoZmllbGQuQ29sU3BhblNpemVzICYmIGZpZWxkLkNvbFNwYW5TaXplcy5sZW5ndGggPiAwKXtcclxuICAgICAgY29sc3BhbnZhbHVlcyA9IGZpZWxkLkNvbFNwYW5TaXplcy5tYXAoKHNpemUpID0+XHJcbiAgICAgIENvbFNwYW5TaXplc0VudW1bc2l6ZV0udG9TdHJpbmcoKSkuam9pbihcIiBcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb2xzcGFudmFsdWVzID0gdGhpcy5nZXREZWZhdWx0U3R5bGVDbGFzcyhmaWVsZCwgJ2FsaWduLXNlbGYtZW5kJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmaWVsZC5Jbkxpc3RWaWV3ICYmICFzaG93QWxsRmllbGRzKXtcclxuICAgICAgaWYgKGZpZWxkLkludmlzaWJpbGl0eSA9PSBGaWVsZEludmlzaWJpbGl0eUVudW0uTkFTQ09TVE8peyB2aXNpYmlsaXR5dmFsdWVzID0gXCJ2aXNpYmlsaXR5X2hpZGRlblwiOyB9XHJcbiAgICAgIGlmIChmaWVsZC5JbnZpc2liaWxpdHkgPT0gRmllbGRJbnZpc2liaWxpdHlFbnVtW1wiTkFTQ09TVE8gQ09OIEFSRUEgVklTSUJJTEVcIl0peyB2aXNpYmlsaXR5dmFsdWVzID0gXCJ2aXNpYmlsaXR5X3RyYW5zcGFyZW50XCI7IH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sc3BhbnZhbHVlcyArIFwiIFwiICsgdmlzaWJpbGl0eXZhbHVlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBkYWxsJ2h0bWwgcGVyIGltcG9zdGFyZSBsZSBjbGFzc2kgY3NzIHBlciB2aXN1YWxpenphcmUgaWwgY2FtcG8gYWxsJ2ludGVybm8gZGVsbGEgZm9ybS5cclxuICAgKiBTZSBwZXIgaWwgZmllbGQgc29ubyBzdGF0ZSBzcGVjaWZpY2F0ZSBkZWxsZSBjbGFzc2kgYWxsb3JhIHZlbmdvbm8gYXBwbGNhdGUgcXVlbGxlLCBhbHRyaW1lbnRpIHZlbmdvbm8gdXNhdGVcclxuICAgKiBkZWxsZSBjbGFzc2kgZGkgZGVmYXVsdC5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIGRhIHZpc3VhbGl6emFyZS5cclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1bmEgc3RyaW5nYSBjb250ZW5lbnRlIGxlIGNsYXNzaSBjc3MgZGEgYXBwbGljYXJlLlxyXG4gICAqL1xyXG4gIGdldEZpZWxkQW5zd2VyU3R5bGVDbGFzcyhmaWVsZDogQmFzZUZpZWxkKTogc3RyaW5nIHtcclxuICAgICAgICBcclxuICAgIHZhciBjb2xzcGFudmFsdWVzID0gXCJcIjtcclxuICAgIHZhciB2aXNpYmlsaXR5dmFsdWVzID0gXCJcIjtcclxuXHJcbiAgICBpZiAoZmllbGQuQW5zd2VyU3R5bGUgJiYgZmllbGQuQW5zd2VyU3R5bGUuQ29sU3BhblNpemVzICYmIGZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplcy5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgIGNvbHNwYW52YWx1ZXMgPSBmaWVsZC5BbnN3ZXJTdHlsZS5Db2xTcGFuU2l6ZXMubWFwKChzaXplKSA9PlxyXG4gICAgICAgIENvbFNwYW5TaXplc0VudW1bc2l6ZV0udG9TdHJpbmcoKVxyXG4gICAgICApLmpvaW4oXCIgXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29sc3BhbnZhbHVlcyA9IHRoaXMuZ2V0RGVmYXVsdFN0eWxlQ2xhc3MoZmllbGQsICdhbGlnbi1zZWxmLXN0YXJ0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmaWVsZC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3KXtcclxuICAgICAgaWYgKGZpZWxkLkFuc3dlclN0eWxlLkludmlzaWJpbGl0eSA9PSBGaWVsZEludmlzaWJpbGl0eUVudW0uTkFTQ09TVE8peyB2aXNpYmlsaXR5dmFsdWVzID0gXCJ2aXNpYmlsaXR5X2hpZGRlblwiOyB9XHJcbiAgICAgIGlmIChmaWVsZC5BbnN3ZXJTdHlsZS5JbnZpc2liaWxpdHkgPT0gRmllbGRJbnZpc2liaWxpdHlFbnVtW1wiTkFTQ09TVE8gQ09OIEFSRUEgVklTSUJJTEVcIl0peyB2aXNpYmlsaXR5dmFsdWVzID0gXCJ2aXNpYmlsaXR5X3RyYW5zcGFyZW50XCI7IH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sc3BhbnZhbHVlcyArIFwiIFwiICsgdmlzaWJpbGl0eXZhbHVlcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFN0eWxlQ2xhc3MoZmllbGQ6IEJhc2VGaWVsZCwgZGVmYXVsdEFsaWduOiBzdHJpbmcpOiBzdHJpbmd7XHJcbiAgICBcclxuICAgIHN3aXRjaCAoZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIGRpIHRlc3RvXCJdOlxyXG4gICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnQ2FtcG8gZGkgdGVzdG8nKVxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNCBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQXJlYSBkaSB0ZXN0b1wiXTpcclxuICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0FyZWEgZGkgdGVzdG8nKVxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyIFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJCb29sZWFub1wiXTpcclxuICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0Jvb2xlYW5vJylcclxuICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTQgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0RhdGEgZS9vIG9yYScpXHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00IFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXTpcclxuICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0NhbXBvIG51bWVyaWNvJylcclxuICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTQgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFsbGVnYXRvXCJdOlxyXG4gICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnQWxsZWdhdG8nKVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIChmaWVsZCBhcyBBdHRhY2htZW50RmllbGQpLklzTXVsdGlBdHRhY2ggfHxcclxuICAgICAgICAgICgoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkcyAmJlxyXG4gICAgICAgICAgICAoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTIgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNCBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgICB9XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lXCJdOlxyXG4gICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnSW1tYWdpbmUnKVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uSXNNdWx0aUF0dGFjaCB8fFxyXG4gICAgICAgICAgKChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzICYmXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMiBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00IFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcbiAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdFbGVuY28gZ2VuZXJpY28nKVxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNCBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiTG9va3VwXCJdOlxyXG4gICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnTG9va3VwJylcclxuICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTQgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdOlxyXG4gICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnRm9ybSBkaSBkZXR0YWdsaW8nKVxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyIFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gaW1tYWdpbmlcIl06XHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00IFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFdGljaGV0dGFcIl06XHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00IFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgICBnZXRGaWVsZEZpbHRlclN0eWxlQ2xhc3MoZmllbGQ6IEJhc2VGaWVsZCwgbnVtYmVyT2ZDb2x1bW5zOiBudW1iZXIpOiBzdHJpbmcgeyAgXHJcbiAgICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRTdHlsZUNsYXNzV2l0aE51bWJlckNvbHVtbnMoZmllbGQsICdhbGlnbi1zZWxmLXN0YXJ0JyxudW1iZXJPZkNvbHVtbnMpO1xyXG4gICAgfSAgXHJcblxyXG4gICAgcHJpdmF0ZSBnZXREZWZhdWx0U3R5bGVDbGFzc1dpdGhOdW1iZXJDb2x1bW5zKGZpZWxkOiBCYXNlRmllbGQsIGRlZmF1bHRBbGlnbjogc3RyaW5nLCBudW1iZXJPZkNvbHVtbnM6IG51bWJlcik6IHN0cmluZ3tcclxuICAgIFxyXG4gICAgdmFyIGNvbENsYXNzTnVtID0gTWF0aC5mbG9vcigxMiAvIG51bWJlck9mQ29sdW1ucyk7XHJcblxyXG4gICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gZGkgdGVzdG9cIl06XHJcbiAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdDYW1wbyBkaSB0ZXN0bycpXHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC1cIitjb2xDbGFzc051bStcIiBjb2wtbGctXCIrY29sQ2xhc3NOdW0rXCIgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFyZWEgZGkgdGVzdG9cIl06XHJcbiAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdBcmVhIGRpIHRlc3RvJylcclxuICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMiBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQm9vbGVhbm9cIl06XHJcbiAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdCb29sZWFubycpXHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC1cIitjb2xDbGFzc051bStcIiBjb2wtbGctXCIrY29sQ2xhc3NOdW0rXCIgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0RhdGEgZS9vIG9yYScpXHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC1cIitjb2xDbGFzc051bStcIiBjb2wtbGctXCIrY29sQ2xhc3NOdW0rXCIgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdOlxyXG4gICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnQ2FtcG8gbnVtZXJpY28nKVxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtXCIrY29sQ2xhc3NOdW0rXCIgY29sLWxnLVwiK2NvbENsYXNzTnVtK1wiIFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJBbGxlZ2F0b1wiXTpcclxuICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0FsbGVnYXRvJylcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5Jc011bHRpQXR0YWNoIHx8XHJcbiAgICAgICAgICAoKGZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuTWV0YWRhdGFGaWVsZHMgJiZcclxuICAgICAgICAgICAgKGZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuTWV0YWRhdGFGaWVsZHMubGVuZ3RoID4gMClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyIFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLVwiK2NvbENsYXNzTnVtK1wiIGNvbC1sZy1cIitjb2xDbGFzc051bStcIiBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgICB9XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lXCJdOlxyXG4gICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnSW1tYWdpbmUnKVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uSXNNdWx0aUF0dGFjaCB8fFxyXG4gICAgICAgICAgKChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzICYmXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMiBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00IFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcbiAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdFbGVuY28gZ2VuZXJpY28nKVxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtXCIrY29sQ2xhc3NOdW0rXCIgY29sLWxnLVwiK2NvbENsYXNzTnVtK1wiIFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJMb29rdXBcIl06XHJcbiAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdMb29rdXAnKVxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtXCIrY29sQ2xhc3NOdW0rXCIgY29sLWxnLVwiK2NvbENsYXNzTnVtK1wiIFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXTpcclxuICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0Zvcm0gZGkgZGV0dGFnbGlvJylcclxuICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMiBcIiArIGRlZmF1bHRBbGlnbjtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGltbWFnaW5pXCJdOlxyXG4gICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtXCIrY29sQ2xhc3NOdW0rXCIgY29sLWxnLVwiK2NvbENsYXNzTnVtK1wiIFwiICsgZGVmYXVsdEFsaWduO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFdGljaGV0dGFcIl06XHJcbiAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC1cIitjb2xDbGFzc051bStcIiBjb2wtbGctXCIrY29sQ2xhc3NOdW0rXCIgXCIgKyBkZWZhdWx0QWxpZ247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBpbCBGb3JtR3JvdXAgY2hlIHJhcHByZXNlbnRhIHVuYSBGb3JtIGEgcGFydGlyZSBkYWkgc3VvaSBCYXNlRmllbGQuXHJcbiAgICogQHBhcmFtIGZvcm1GaWVsZHMgTGlzdGEgZGVpIEJhc2VGaWVsZCBjaGUgY29tcG9uZ29ubyBsYSBmb3JtLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgT2dnZXR0byBkaSB0aXBvIFJlY29yZCBjaGUgY29udGllbmUgaSB2YWxvcmkgZGVpIGNhbXBpLlxyXG4gICAqIEBwYXJhbSBvbmx5VmlldyBTZSBUUlVFIGRpc2FiaWxpdGEgbGEgZm9ybSBwZXIgcmVuZGVybGEgaW4gc29sYSBsZXR0dXJhLlxyXG4gICAqIEBwYXJhbSBpbmNsdWRlQ3VycmVudEZvcm1JbkZpZWxkIFNlIFRSVUUgcG9wb2xhIGxhIHByb3ByaWV0w6AgRm9ybUZvcm1Hcm91cCBhbGwnaW50ZXJubyBkaSBvZ25pIEJhc2VGaWVsZCBjb24gaWwgRm9ybUdyb3VwIGNvcnJlbnRlLlxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIEZvcm1Hcm91cCByYXBwcmVzZW50YXRlIGxhIEZvcm0gYSBjdWkgYXBwYXJ0ZW5nb25vIGkgQmFzZUZpZWxkIHJpY2V2dXRpIGluIGlucHV0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBDcmVhdGVGb3JtRm9ybUdyb3VwKFxyXG4gICAgZm9ybUZpZWxkczogQXJyYXk8QmFzZUZpZWxkPixcclxuICAgIHJlY29yZDogUmVjb3JkLFxyXG4gICAgb25seVZpZXcgPSBmYWxzZSxcclxuICAgIGluY2x1ZGVDdXJyZW50Rm9ybUluRmllbGQgPSB0cnVlXHJcbiAgKTogVW50eXBlZEZvcm1Hcm91cCB7XHJcbiAgICAvLyAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJmb3JtRmllbGRzXCIsIGZvcm1GaWVsZHMpO1xyXG4gICAgLy8gLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwicmVjb3JkXCIsIHJlY29yZCk7XHJcbiAgICAvLyAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvbmx5Vmlld1wiLCBvbmx5Vmlldyk7XHJcbiAgICAvLyAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJpbmNsdWRlQ3VycmVudEZvcm1JbkZpZWxkXCIsIGluY2x1ZGVDdXJyZW50Rm9ybUluRmllbGQpO1xyXG5cclxuICAgIGNvbnN0IGZvcm1Gb3JtOiBVbnR5cGVkRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChbXSk7XHJcblxyXG4gICAgZm9ybUZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgLy8gICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coZmllbGQpO1xyXG4gICAgICBmb3JtRm9ybS5hZGRDb250cm9sKFxyXG4gICAgICAgIGZpZWxkLk5hbWUsXHJcbiAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEZvcm1Db250cm9sKGZpZWxkLCByZWNvcmQpXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbmNsdWRlQ3VycmVudEZvcm1JbkZpZWxkKSB7XHJcbiAgICAgICAgLy8gLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKGZpZWxkKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgIGZpZWxkLkZvcm1Gb3JtR3JvdXAgPSBmb3JtRm9ybTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAob25seVZpZXcpIHtcclxuICAgICAgZm9ybUZvcm0uZGlzYWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JtRm9ybTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bnppb25lIHBlciBjcmVhcmUgZSBhZ2dpdW5nZXJlIGFsIEZvcm1Hcm91cCByYXBwcmVzZW50YW50ZSBsYSBmb3JtIHVuIG51b3ZvIEZvcm1Db250cm9sIGEgcGFydGlyZSBkYSB1biBGaWVsZC5cclxuICAgKiBJbiBudW92byBGb3JtQ29udHJvbCBhdnLDoCBpbCBub21lIGRlbCBjYW1wbyBwYXNzYXRvIGUgdmVycmFubm8gaW1wb3N0YXRpIGkgVmFsaWRhdG9ycyBpbiBiYXNlIGFsIHRpcG8gZGVsIGNhbXBvIHN0ZXNzby5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIHBlciBjdWkgY3JlYXJlIGlsIEZvcm1Db250cm9sIGRhIGluc2VyaXJlIG5lbCBGb3JtR3JvdXAgZGVsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRmllbGRGb3JtQ29udHJvbChcclxuICAgIGZpZWxkOiBCYXNlRmllbGQsXHJcbiAgICByZWNvcmQ6IFJlY29yZFxyXG4gICk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JzOiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcclxuXHJcbiAgICBpZiAoZmllbGQuUmVxdWlyZWQpIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBkaSB0ZXN0b1wiXTpcclxuICAgICAgICBpZiAoKGZpZWxkIGFzIFRleHRGaWVsZCkuTWF4TGVuZ2h0KSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgoKGZpZWxkIGFzIFRleHRGaWVsZCkuTWF4TGVuZ2h0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoZmllbGQgYXMgVGV4dEZpZWxkKS5NaW5MZW5naHQpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCgoZmllbGQgYXMgVGV4dEZpZWxkKS5NaW5MZW5naHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoICgoZmllbGQgYXMgVGV4dEZpZWxkKS5UZXh0TWFzaykge1xyXG4gICAgICAgICAgY2FzZSBUZXh0TWFza0VudW0uVXJsOlxyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKFVybFJlZ2V4KSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBUZXh0TWFza0VudW0uRW1haWw6XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLmVtYWlsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFRleHRNYXNrRW51bS5UZWxlZm9ubzpcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihUZWxSZWdleCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFyZWEgZGkgdGVzdG9cIl06XHJcbiAgICAgICAgaWYgKChmaWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NYXhMZW5naHQpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoKGZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1heExlbmdodClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWluTGVuZ2h0KSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKChmaWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NaW5MZW5naHQpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkFsbGVnYXRvOlxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW0uSW1tYWdpbmU6XHJcbiAgICAgICAgaWYgKGZpZWxkLlJlcXVpcmVkKSB2YWxpZGF0b3JzLnB1c2goQXJyYXlWYWxpZGF0b3JzLm1pbkxlbmdodCgxKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuICAgICAgICBpZiAoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Jc011bHRpQ2hvaWNoZSlcclxuICAgICAgICAgIGlmIChmaWVsZC5SZXF1aXJlZCkgdmFsaWRhdG9ycy5wdXNoKEFycmF5VmFsaWRhdG9ycy5taW5MZW5naHQoMSkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gaW1tYWdpbmlcIl06XHJcbiAgICAgICAgaWYgKChmaWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLklzTXVsdGlDaG9pY2hlKVxyXG4gICAgICAgICAgaWYgKGZpZWxkLlJlcXVpcmVkKSB2YWxpZGF0b3JzLnB1c2goQXJyYXlWYWxpZGF0b3JzLm1pbkxlbmdodCgxKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wocmVjb3JkW2ZpZWxkLk5hbWVdLCB2YWxpZGF0b3JzKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGdsaSBlbmRwb2ludCBkYSB1c2FyZSBkaSBkZWZhdWx0IGEgcGFydGlyZSBkYWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXJcclxuICAgKiBhIGN1aSBzaSBkZXZlIGNvbm5ldHRlcmUgZSBhbCB0b2tlbiBkYSBwYXNzYXJlIHBlciBhdXRlbnRpY2Fyc2kuXHJcbiAgICogQHBhcmFtIGJhc2VTZXJ2ZXJVcmwgU3RyaW5nYSBkZWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXIgKGVzOiBcImh0dHA6Ly9sb2NhbGhvc3Q6NTAwMFwiKS5cclxuICAgKiBAcGFyYW0gdXNlclRva2VuIFRva2VuIGRlbGwndXRlbnRlIGxvZ2dhdG8gZGEgdXNhcmUgcGVyIGF1dGVudGljYXJzaSBzZSBuZWNlc3NhcmlvLlxyXG4gICAqIEByZXR1cm5zIFJlc2l0dWlzY2UgbGEgY29uZmlndXJhemlvbmUgY29tcGxldGEgZGVnbGkgZW5kUG9pbnQgZGEgdXNhcmUgZGkgZGVmYXVsdC5cclxuICAgKi9cclxuICBwdWJsaWMgQ29uZmlndXJlRGVmYXVsdEVuZFBvaW50cyhcclxuICAgIGJhc2VTZXJ2ZXJVcmw6IHN0cmluZyxcclxuICAgIHVzZXJUb2tlbjogc3RyaW5nXHJcbiAgKTogRW5kUG9pbnRDb25maWd1cmF0aW9uIHtcclxuICAgIGxldCBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbiA9XHJcbiAgICAgIG5ldyBFbmRQb2ludENvbmZpZ3VyYXRpb24oYmFzZVNlcnZlclVybCwgdXNlclRva2VuKTtcclxuXHJcbiAgICAvLyBlbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyA9IHtcclxuICAgIC8vICAgR2V0QnlGb3JtSURFbmRQb2ludDoge1xyXG4gICAgLy8gICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS92MS9nZXRhbGxcIixcclxuICAgIC8vICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgLy8gICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLkdFVCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludDoge1xyXG4gICAgLy8gICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS92MS9HZXRBbGxCeVVzZXJJRFwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBHZXRCeUlERW5kUG9pbnQ6IHtcclxuICAgIC8vICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvZ2V0QnlJRFwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBTYXZlRW5kUG9pbnQ6IHtcclxuICAgIC8vICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvc2F2ZVwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uUE9TVCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgRHVwbGljYXRlRW5kUG9pbnQ6IHtcclxuICAgIC8vICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvZHVwbGljYXRlXCIsXHJcbiAgICAvLyAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgIC8vICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5HRVQsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIERlbGV0ZUVuZFBvaW50OiB7XHJcbiAgICAvLyAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL3YxL2RlbGV0ZVwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uREVMRVRFLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gfTtcclxuICAgIC8vIGVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3JtcyA9IHtcclxuICAgIC8vICAgR2V0QnlJREVuZFBvaW50OiB7XHJcbiAgICAvLyAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL2NvbmYvZm9ybVwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBHZXRCeUlEQW5kVmVyc2lvbkVuZFBvaW50OiB7XHJcbiAgICAvLyAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL2NvbmYvR2V0QnlJREFuZFZlcnNpb25cIixcclxuICAgIC8vICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgLy8gICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLkdFVCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgU2F2ZUVuZFBvaW50OiB7XHJcbiAgICAvLyAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL2NvbmYvZm9ybVwiLFxyXG4gICAgLy8gICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAvLyAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uUE9TVCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vIH07XHJcbiAgICByZXR1cm4gZW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIH1cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBleHByZXNzaW9uIHByZW5kZSB1bmEgc3RyaW5nYSBpbiBpbnB1dCBlIHZlcmlmaWNhIGNoZSBvZ25pIHBhcmVudGVzaSBhcGVydGEgdmVuZ2EgYW5jaGUgY2hpdXNhXHJcbiAgICogQHJldHVybnMgdHJ1ZSBzZSBsZSBwYXJlbnRlc2kgc29ubyBwYXJpIGUgb2duaSBwYXJlbnRlc2kgY2hpdWRlIHNlIHN0ZXNzYSwgZmFsc2Ugc2UgbWFuY2FubyBwYXJlbnRlc2kgbyBub24gdmVuZ29ubyBjaGl1c2VcclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIHN0cmluZ0NoZWNrUGFyZW50ZXNpcyhleHByZXNzaW9uLCByZXF1aXJlZCA9IGZhbHNlKSB7XHJcbiAgICBpZiAoZXhwcmVzc2lvbiA9PSB1bmRlZmluZWQgfHwgZXhwcmVzc2lvbiA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiByZXF1aXJlZCA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIH1cclxuICAgIGxldCBzdGFjayA9IFtdO1xyXG4gICAgbGV0IGN1cnJlbnQ7XHJcbiAgICBjb25zdCBtYXRjaExvb2t1cCA9IHtcclxuICAgICAgXCIoXCI6IFwiKVwiLFxyXG4gICAgICBcIltcIjogXCJdXCIsXHJcbiAgICAgIFwie1wiOiBcIn1cIixcclxuICAgIH07XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGN1cnJlbnQgPSBleHByZXNzaW9uW2ldOyAvL2Vhc2llciB0aGFuIHdyaXRpbmcgaXQgb3ZlciBhbmQgb3ZlclxyXG5cclxuICAgICAgaWYgKGN1cnJlbnQgPT09IFwiKFwiIHx8IGN1cnJlbnQgPT09IFwiW1wiIHx8IGN1cnJlbnQgPT09IFwie1wiKSB7XHJcbiAgICAgICAgc3RhY2sucHVzaChjdXJyZW50KTtcclxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09PSBcIilcIiB8fCBjdXJyZW50ID09PSBcIl1cIiB8fCBjdXJyZW50ID09PSBcIn1cIikge1xyXG4gICAgICAgIGNvbnN0IGxhc3RCcmFja2V0ID0gc3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgIGlmIChtYXRjaExvb2t1cFtsYXN0QnJhY2tldF0gIT09IGN1cnJlbnQpIHtcclxuICAgICAgICAgIC8vaWYgdGhlIHN0YWNrIGlzIGVtcHR5LCAucG9wKCkgcmV0dXJucyB1bmRlZmluZWQsIHNvIHRoaXMgZXhwcmVzc2lvbiBpcyBzdGlsbCBjb3JyZWN0XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlOyAvL3Rlcm1pbmF0ZSBpbW1lZGlhdGVseSAtIG5vIG5lZWQgdG8gY29udGludWUgc2Nhbm5pbmcgdGhlIHN0cmluZ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdGFjay5sZW5ndGggPT09IDA7IC8vYW55IGVsZW1lbnRzIG1lYW4gYnJhY2tldHMgbGVmdCBvcGVuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIGRhdGEgbGEgY29uZmlndXJhemlvbmUgZGkgdW4gZW5kcG9pbnQgY29zdHJ1aXNjZSBsJ3VybCBkYSBjaGlhbWFyZSwgZ2xpIGV2ZW50dWFsaSBwYXJhbWV0cmlcclxuICAgKiBkYSBwYXNzYXJlIChuZWwgYm9keSBvIG5lbGxhIHJvdHRhKSBlZCBlZmZldHR1YSBsYSBjaGlhbWF0YS4gQWwgdGVybWluZSBkZWxsYSBjaGlhbWF0YSBlc2VndWUgbGUgZXZlbnR1YWxpXHJcbiAgICogZnVuemlvbmkgZGkgY2FsbGJhY2sgKHNpYSBpbiBjYXNvIGRpIHN1Y2Nlc3NvIGNoZSBpbiBjYXNvIGRpIGVycm9yZSkgcGFzc2F0ZSBpbiBpbnB1dC5cclxuICAgKiBAcGFyYW0gZW5kUG9pbnREYXRhIENvZmlndXJhemlvbmUgZGVsbCdlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKiBAcGFyYW0gZHluYW1pY01vZHVsZVBhcmFtcyBBcnJheSBkZWkgcGFyYW1ldHJpIGFnZ2l1bnRpIGRhbCBtb2R1bG8gZGluYW1pY28gYSBxdWVsbGkgZ2nDoCBjb25maWd1cmF0aVxyXG4gICAqIChhZCBlc2VtcGlvIGlsIHJlY29yZCBvIGxhIGZvcm0gZGEgc2FsdmFyZSBvcHB1cmUgbCdJRCBwZXIgcmVjdXBlcmFyZSB1bmEgcGFydGljb2xhcmUgZW50aXTDoCkuXHJcbiAgICogQHBhcmFtIGNhbGxiYWNrIE1ldG9kbyBkYSBlc2VndWlyZSBpbiBjYXNvIGRpIHN1Y2Nlc3NvIGRvcG8gbGEgY2hpYW1hdGEgaHR0cC5cclxuICAgKiBOT1RBOiBpbiBpbnB1dCB2aWVuZSBwYXNzYXRhIGxhIHJpc3Bvc3RhIGRlbGxhIGNoaWFtYXRhIHN0ZXNzYS5cclxuICAgKiBAcGFyYW0gZXJyb3JDYWxsQmFjayBNZXRvZG8gZGEgZXNlZ3VpcmUgaW4gY2FzbyBkaSBlcnJvcmUgZG9wbyBsYSBjaGlhbWF0YSBodHRwLlxyXG4gICAqIE5PVEE6IGluIGlucHV0IHZpZW5lIHBhc3NhdG8gbCdlcnJvcmUgZ2VuZXJhdG8gZGVsbGEgY2hpYW1hdGEgc3Rlc3NhLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBSdW5FbmRQb2ludENhbGwoXHJcbiAgICBlbmRQb2ludERhdGE6IEVuZFBvaW50RGF0YSxcclxuICAgIGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPSBudWxsLFxyXG4gICAgY2FsbGJhY2s6IChlOiBGb3JtIHwgQXJyYXk8Rm9ybT4gfCBSZWNvcmQgfCBBcnJheTxSZWNvcmQ+IHwgRHluQXR0YWNobWVudCB8IEFycmF5PER5bkF0dGFjaG1lbnQ+IHwgc3RyaW5nKSA9PiB2b2lkID0gbnVsbCxcclxuICAgIGVycm9yQ2FsbEJhY2s6IChlcnI6IHVua25vd24pID0+IHZvaWQgPSBudWxsXHJcbiAgKTogdm9pZCB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmFkZFJlcXVlc3RDb3VudGVyKCk7XHJcblxyXG4gICAgbGV0IHVybCA9IGAke2VuZFBvaW50RGF0YS5Vcmx9YDtcclxuICAgIGxldCBxdWVyeVBhcmFtczogc3RyaW5nID0gbnVsbDtcclxuICAgIGNvbnN0IGJvZHlQYXJhbXMgPSB7XHJcbiAgICAgIEFkZGl0aW9uYWxQYXJhbXM6IHt9LFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyNyZWdpb24gbWVyZ2VQYXJhbVxyXG4gICAgLy8gdW5pc2NvIGkgZGF0aSBkaSBkZWZhdWx0IGRlZmluaXRpIG5lbGxhIGNvbmZpZ3VyYXppb25lIGRlbGxhIGNoaWFtYXRhIGNvbiBpIGRhdGkgY2hlIGltcG9zdG8gbmVsbGEgY2hpYW1hdGEgc3BlY2lmaWNhXHJcbiAgICBpZiAoZW5kUG9pbnREYXRhLlBhcmFtcyA9PSB1bmRlZmluZWQgfHwgZW5kUG9pbnREYXRhLlBhcmFtcyA9PSBudWxsKSB7XHJcbiAgICAgIGVuZFBvaW50RGF0YS5QYXJhbXMgPSBbXTtcclxuICAgIH1cclxuICAgIGlmIChkeW5hbWljTW9kdWxlUGFyYW1zID09IHVuZGVmaW5lZCB8fCBkeW5hbWljTW9kdWxlUGFyYW1zID09IG51bGwpIHtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1lcmdlZFBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9IFsuLi5lbmRQb2ludERhdGEuUGFyYW1zXTtcclxuXHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLmZvckVhY2goKG9iaikgPT4ge1xyXG4gICAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gbWVyZ2VkUGFyYW1zLmZpbmRJbmRleChcclxuICAgICAgICAoaXRlbSkgPT4gaXRlbS5QYXJhbU5hbWUgPT09IG9iai5QYXJhbU5hbWVcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIG1lcmdlZFBhcmFtc1tleGlzdGluZ0luZGV4XS5QYXJhbVZhbHVlID0gb2JqLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgbWVyZ2VkUGFyYW1zW2V4aXN0aW5nSW5kZXhdLlBhcmFtVHlwZSA9IG9iai5QYXJhbVR5cGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWVyZ2VkUGFyYW1zLnB1c2gob2JqKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKG1lcmdlZFBhcmFtcykge1xyXG4gICAgICBtZXJnZWRQYXJhbXMuZm9yRWFjaCgocGFyYW0pID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHBhcmFtLlBhcmFtVHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl06IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RyaW5nUGFyYW06IHN0cmluZyA9XHJcbiAgICAgICAgICAgICAgcGFyYW0uUGFyYW1OYW1lICsgXCI9XCIgKyBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9XHJcbiAgICAgICAgICAgICAgKHF1ZXJ5UGFyYW1zID09IG51bGwgPyBcIlwiIDogcXVlcnlQYXJhbXMgKyBcIiZcIikgKyBzdHJpbmdQYXJhbTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bXCJJbiByb3V0ZVwiXToge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAodXJsLmVuZHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIikgKyBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl06IHtcclxuICAgICAgICAgICAgYm9keVBhcmFtc1twYXJhbS5QYXJhbU5hbWVdID0gcGFyYW0uUGFyYW1WYWx1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vI2VuZHJlZ2lvbiBtZXJnZVBhcmFtXHJcblxyXG4gICAgLy8jcmVnaW9uIGFkZERlZmF1bHRQYXJhbXNcclxuICAgIC8vIFNlIG5lbGxhIGNvbmZpZ3VyYXppb25lIHNvbm8gc3RhdGkgZGVmaW5pdGkgcGFyYW1ldHJpIGRhIGFnZ2l1bmdlcmUgYWxsYSBjaGlhbWF0YSBxdWVzdGkgdmVuZ29ubyBjaWNsYXRpXHJcbiAgICAvLyBlIGFnZ2l1bnRpIG5lbCBwdW50byBpbiBjdWkgZGV2b25vIGVzc2VyZSB1c2F0aS5cclxuICAgIC8vIGlmIChlbmRQb2ludERhdGEuUGFyYW1zKSB7XHJcbiAgICAvLyAgICAgZW5kUG9pbnREYXRhLlBhcmFtcy5mb3JFYWNoKHBhcmFtID0+IHtcclxuICAgIC8vICAgICAgICAgc3dpdGNoIChwYXJhbS5QYXJhbVR5cGUpIHtcclxuICAgIC8vICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnUXVlcnkgcGFyYW0nXToge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ1BhcmFtOiBzdHJpbmcgPSBwYXJhbS5QYXJhbU5hbWUgKyBcIj1cIiArIHBhcmFtLlBhcmFtVmFsdWU7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSAocXVlcnlQYXJhbXMgPT0gbnVsbCA/IFwiXCIgOiBxdWVyeVBhcmFtcyArIFwiJlwiKSArIHN0cmluZ1BhcmFtO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydJbiByb3V0ZSddOiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdXJsID0gdXJsICsgKHVybC5lbmRzV2l0aChcIi9cIikgPyBcIlwiIDogXCIvXCIpICsgcGFyYW0uUGFyYW1WYWx1ZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnSW4gQm9keSddOiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgYm9keVBhcmFtcy5BZGRpdGlvbmFsUGFyYW1zW3BhcmFtLlBhcmFtTmFtZV0gPSBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyNlbmRyZWdpb24gYWRkRGVmYXVsdFBhcmFtc1xyXG5cclxuICAgIC8vI3JlZ2lvbiBhZGRTcGVjaWZpY1BhcmFtc1xyXG4gICAgLy8gU2Ugc29ubyBzdGF0aSBwYXNzYXRpIHBhcmFtZXRyaSBkYSBhZ2dpdW5nZXJlIGFsbGEgY2hpYW1hdGEgZGVmaW5pdGkgYWxsJ2ludGVybm8gZGVsIG1vZHVsbyBkaW5hbWljb1xyXG4gICAgLy8gdmVuZ29ubyBjaWNsYXRpIGUgYWdnaXVudGkgbmVsIHB1bnRvIGluIGN1aSBkZXZvbm8gZXNzZXJlIHVzYXRpIGRvcG8gcXVlbGxpIGRlZmluaXRpIG5lbGxhIGNvbmZpZ3VyYXppb25lLlxyXG4gICAgLy8gaWYgKGR5bmFtaWNNb2R1bGVQYXJhbXMpIHtcclxuICAgIC8vICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLmZvckVhY2gocGFyYW0gPT4ge1xyXG4gICAgLy8gICAgICAgICBzd2l0Y2ggKHBhcmFtLlBhcmFtVHlwZSkge1xyXG4gICAgLy8gICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydRdWVyeSBwYXJhbSddOiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nUGFyYW06IHN0cmluZyA9IHBhcmFtLlBhcmFtTmFtZSArIFwiPVwiICsgcGFyYW0uUGFyYW1WYWx1ZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyA9IChxdWVyeVBhcmFtcyA9PSBudWxsID8gXCJcIiA6IHF1ZXJ5UGFyYW1zICsgXCImXCIpICsgc3RyaW5nUGFyYW07XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ0luIHJvdXRlJ106IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyAodXJsLmVuZHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIikgKyBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J106IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBib2R5UGFyYW1zW3BhcmFtLlBhcmFtTmFtZV0gPSBwYXJhbS5QYXJhbVZhbHVlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfSlcclxuICAgIC8vIH1cclxuICAgIC8vI2VuZHJlZ2lvbiBhZGRTcGVjaWZpY1BhcmFtc1xyXG5cclxuICAgIGlmIChxdWVyeVBhcmFtcyAhPSBudWxsKSB7XHJcbiAgICAgIHVybCA9XHJcbiAgICAgICAgKHVybC5lbmRzV2l0aChcIi9cIikgPyB1cmwuc3Vic3RyaW5nKDAsIHVybC5sZW5ndGggLSAxKSA6IHVybCkgK1xyXG4gICAgICAgIFwiP1wiICtcclxuICAgICAgICBxdWVyeVBhcmFtcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmh0dHBcclxuICAgICAgLnJlcXVlc3QoZW5kUG9pbnREYXRhLlJlcXVlc3RNZXRob2QsIHVybCwge1xyXG4gICAgICAgIGhlYWRlcnM6IGVuZFBvaW50RGF0YS5Ub2tlblxyXG4gICAgICAgICAgPyB7IEF1dGhvcml6YXRpb246IGVuZFBvaW50RGF0YS5Ub2tlbiB9XHJcbiAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgYm9keTogIVtSZXF1ZXN0TWV0aG9kRW51bS5ERUxFVEUsIFJlcXVlc3RNZXRob2RFbnVtLkdFVF0uaW5jbHVkZXMoXHJcbiAgICAgICAgICBlbmRQb2ludERhdGEuUmVxdWVzdE1ldGhvZFxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gYm9keVBhcmFtc1xyXG4gICAgICAgICAgOiBudWxsLFxyXG4gICAgICB9KVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXM6IEZvcm0gfCBSZWNvcmQgfCBBcnJheTxSZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnJlbW92ZVJlcXVlc3RDb3VudGVyKCk7XHJcbiAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgY2FsbGJhY2socmVzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5yZW1vdmVSZXF1ZXN0Q291bnRlcigpO1xyXG4gICAgICAgICAgaWYgKGVycm9yQ2FsbEJhY2spIHtcclxuICAgICAgICAgICAgZXJyb3JDYWxsQmFjayhlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5FcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIlJ1bkVuZFBvaW50Q2FsbCAtIHN1YnNjcmliZSAtIGVuZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgXHJcbiAgc3RhdGljIGJhc2U2NFRvQmxvYihiNjREYXRhLCBjb250ZW50VHlwZT0nJywgc2xpY2VTaXplPTUxMikge1xyXG4gICAgbGV0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiNjREYXRhKTtcclxuICAgIGxldCBieXRlQXJyYXlzID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBvZmZzZXQgKz0gc2xpY2VTaXplKSB7XHJcbiAgICAgIGxldCBzbGljZSA9IGJ5dGVDaGFyYWN0ZXJzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2xpY2VTaXplKTtcclxuXHJcbiAgICAgIGxldCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShzbGljZS5sZW5ndGgpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xyXG4gICAgICBieXRlQXJyYXlzLnB1c2goYnl0ZUFycmF5KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKGJ5dGVBcnJheXMsIHt0eXBlOiBjb250ZW50VHlwZX0pO1xyXG4gICAgcmV0dXJuIGJsb2I7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4vKiB1dGlsaXp6YXRpIGluIFRNRUQgLT4qL1xyXG5cclxucHVibGljIHN0YXRpYyBwYXJzZVZhbHVlU3RyaW5nKGZpZWxkLCByZWNvcmQpe1xyXG4gIHZhciBvdXRwdXQgPSBudWxsO1xyXG4gIGlmIChmaWVsZC5Gb3JtdWxhKSB7XHJcbiAgICBvdXRwdXQgPSB7fTtcclxuICAgIGNvbnN0IHRlbXA6IHN0cmluZyA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKGZpZWxkLkZvcm11bGEsIHJlY29yZCwgbnVsbCk7XHJcbiAgICBvdXRwdXQgPSBHbG9iYWxTZXJ2aWNlLnN0cmluZ1RvVmFsdWVQYWlycyh0ZW1wKTtcclxuICB9IGVsc2UgaWYgKGZpZWxkLlZhbHVlUGFpcnMgIT0gbnVsbCkge1xyXG4gICAgb3V0cHV0ID0gZmllbGQuVmFsdWVQYWlycztcclxuICB9IGVsc2UgaWYgKGZpZWxkLlZhbHVlU3RyaW5nICE9IG51bGwgJiYgZmllbGQuVmFsdWVTdHJpbmcgIT0gXCJcIikge1xyXG4gICAgb3V0cHV0ID0gR2xvYmFsU2VydmljZS5zdHJpbmdUb1ZhbHVlUGFpcnMoZmllbGQuVmFsdWVTdHJpbmcpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuIFxyXG4vKjwtKi9cclxuXHJcbn1cclxuIl19