@gloww/gloww 0.9.0-beta.38 → 0.9.0-beta.40

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.
@@ -27,7 +27,7 @@ export class DatetimeComponent {
27
27
  this._value = val;
28
28
  let dt = this._value;
29
29
  if (typeof (this._value) === 'string') {
30
- dt = moment(this._value);
30
+ dt = moment(this._value).toISOString();
31
31
  }
32
32
  this.onChange(dt);
33
33
  this.onTouched();
@@ -81,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
81
81
  }], disableMinute: [{
82
82
  type: Input
83
83
  }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2xvd3cvc3JjL2xpYi9Db21wb25lbnRzL2RhdGV0aW1lL2RhdGV0aW1lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9kYXRldGltZS9kYXRldGltZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7Ozs7Ozs7O0FBY2pDLE1BQU0sT0FBTyxpQkFBaUI7SUFZNUI7UUFYZ0IsV0FBTSxHQUFRLElBQUksQ0FBQztRQUNqQixZQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ2hCLGdCQUFXLEdBQVEsSUFBSSxDQUFDO1FBQy9CLFNBQUksR0FBVyxNQUFNLENBQUM7UUFDNUIsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFDN0IsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0Isa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFFeEMsYUFBUSxHQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQixjQUFTLEdBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRVgsQ0FBQztJQUdqQixJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLEdBQUc7UUFDWCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNsQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDckMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFRLENBQUM7U0FDakM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBQ0QsVUFBVSxDQUFDLEdBQVE7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUNELGdCQUFnQixDQUFFLFVBQW1CO1FBQ25DLDZDQUE2QztJQUMvQyxDQUFDOzs4R0F4Q1UsaUJBQWlCO2tHQUFqQixpQkFBaUIsME9BUmpCO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLEtBQUssRUFBRSxJQUFJO1lBQ1gsV0FBVyxFQUFFLGlCQUFpQjtTQUMvQjtLQUNGLDBCQ2RILGc1QkFnQkE7MkZEQWEsaUJBQWlCO2tCQVo3QixTQUFTOytCQUNFLGdCQUFnQixhQUdmO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsbUJBQW1CO3lCQUMvQjtxQkFDRjswRUFHZSxNQUFNO3NCQUFyQixLQUFLO3VCQUFDLE9BQU87Z0JBQ0ksT0FBTztzQkFBeEIsS0FBSzt1QkFBQyxTQUFTO2dCQUNNLFdBQVc7c0JBQWhDLEtBQUs7dUJBQUMsYUFBYTtnQkFDTCxJQUFJO3NCQUFsQixLQUFLO3VCQUFDLE1BQU07Z0JBQ0osWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnbG93dy1kYXRldGltZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRldGltZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGV0aW1lLmNvbXBvbmVudC5jc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBEYXRldGltZUNvbXBvbmVudFxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRldGltZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCd2YWx1ZScpIF92YWx1ZTogYW55ID0gbnVsbDtcbiAgQElucHV0KCdkaXNwbGF5JykgZGlzcGxheTogYW55ID0gbnVsbDtcbiAgQElucHV0KCdwbGFjZUhvbGRlcicpIHBsYWNlSG9sZGVyOiBhbnkgPSBudWxsO1xuICBASW5wdXQoJ21vZGUnKSBtb2RlOiBzdHJpbmcgPSAnZGF0ZSc7XG4gIEBJbnB1dCgpIHNob3dTcGlubmVyczogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dTZWNvbmRzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVNaW51dGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWwpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbDtcbiAgICBsZXQgZHQgPSB0aGlzLl92YWx1ZTtcbiAgICBpZiAodHlwZW9mICh0aGlzLl92YWx1ZSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkdCA9IG1vbWVudCh0aGlzLl92YWx1ZSkgYXMgYW55O1xuICAgIH1cbiAgICB0aGlzLm9uQ2hhbmdlKGR0KTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvL3Rocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxufVxuIiwiPGRpdiBzdHlsZT1cIndpZHRoOjEwMCVcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJtb2RlPT09J2RhdGUnXCI+XG4gICAgICAgIDxtYXQtbGFiZWw+e3tkaXNwbGF5fX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZUhvbGRlclwiIFsobmdNb2RlbCldPVwidmFsdWVcIj5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwibW9kZT09PSdkYXRldGltZSdcIj5cbiAgICAgICAgPG1hdC1sYWJlbD57e2Rpc3BsYXl9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW25neE1hdERhdGV0aW1lUGlja2VyXT1cInBpY2tlckRUXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiPlxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cIiRhbnkocGlja2VyRFQpXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICAgIDxuZ3gtbWF0LWRhdGV0aW1lLXBpY2tlciAjcGlja2VyRFQgW3Nob3dTcGlubmVyc109XCJzaG93U3Bpbm5lcnNcIiBbc2hvd1NlY29uZHNdPVwic2hvd1NlY29uZHNcIiBbdG91Y2hVaV09XCJ0cnVlXCIgW2Rpc2FibGVNaW51dGVdPVwiZGlzYWJsZU1pbnV0ZVwiPlxuICAgICAgICA8L25neC1tYXQtZGF0ZXRpbWUtcGlja2VyPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Rpdj5cbiJdfQ==
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2xvd3cvc3JjL2xpYi9Db21wb25lbnRzL2RhdGV0aW1lL2RhdGV0aW1lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9kYXRldGltZS9kYXRldGltZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7Ozs7Ozs7O0FBY2pDLE1BQU0sT0FBTyxpQkFBaUI7SUFZNUI7UUFYZ0IsV0FBTSxHQUFRLElBQUksQ0FBQztRQUNqQixZQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ2hCLGdCQUFXLEdBQVEsSUFBSSxDQUFDO1FBQy9CLFNBQUksR0FBVyxNQUFNLENBQUM7UUFDNUIsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFDN0IsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0Isa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFFeEMsYUFBUSxHQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQixjQUFTLEdBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRVgsQ0FBQztJQUdqQixJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLEdBQUc7UUFDWCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNsQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDckMsRUFBRSxHQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzNEO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUNELFVBQVUsQ0FBQyxHQUFRO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxnQkFBZ0IsQ0FBRSxVQUFtQjtRQUNuQyw2Q0FBNkM7SUFDL0MsQ0FBQzs7OEdBeENVLGlCQUFpQjtrR0FBakIsaUJBQWlCLDBPQVJqQjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixLQUFLLEVBQUUsSUFBSTtZQUNYLFdBQVcsRUFBRSxpQkFBaUI7U0FDL0I7S0FDRiwwQkNkSCxnNUJBZ0JBOzJGREFhLGlCQUFpQjtrQkFaN0IsU0FBUzsrQkFDRSxnQkFBZ0IsYUFHZjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLG1CQUFtQjt5QkFDL0I7cUJBQ0Y7MEVBR2UsTUFBTTtzQkFBckIsS0FBSzt1QkFBQyxPQUFPO2dCQUNJLE9BQU87c0JBQXhCLEtBQUs7dUJBQUMsU0FBUztnQkFDTSxXQUFXO3NCQUFoQyxLQUFLO3VCQUFDLGFBQWE7Z0JBQ0wsSUFBSTtzQkFBbEIsS0FBSzt1QkFBQyxNQUFNO2dCQUNKLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ2xvd3ctZGF0ZXRpbWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXRpbWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRldGltZS5jb21wb25lbnQuY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogRGF0ZXRpbWVDb21wb25lbnRcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXRpbWVDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgndmFsdWUnKSBfdmFsdWU6IGFueSA9IG51bGw7XG4gIEBJbnB1dCgnZGlzcGxheScpIGRpc3BsYXk6IGFueSA9IG51bGw7XG4gIEBJbnB1dCgncGxhY2VIb2xkZXInKSBwbGFjZUhvbGRlcjogYW55ID0gbnVsbDtcbiAgQElucHV0KCdtb2RlJykgbW9kZTogc3RyaW5nID0gJ2RhdGUnO1xuICBASW5wdXQoKSBzaG93U3Bpbm5lcnM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93U2Vjb25kczogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlTWludXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHsgfTtcbiAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7IH07XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWw7XG4gICAgbGV0IGR0ID0gdGhpcy5fdmFsdWU7XG4gICAgaWYgKHR5cGVvZiAodGhpcy5fdmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgZHQgPSAobW9tZW50KHRoaXMuX3ZhbHVlKSBhcyBtb21lbnQuTW9tZW50KS50b0lTT1N0cmluZygpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2hhbmdlKGR0KTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvL3Rocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxufVxuIiwiPGRpdiBzdHlsZT1cIndpZHRoOjEwMCVcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJtb2RlPT09J2RhdGUnXCI+XG4gICAgICAgIDxtYXQtbGFiZWw+e3tkaXNwbGF5fX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZUhvbGRlclwiIFsobmdNb2RlbCldPVwidmFsdWVcIj5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwibW9kZT09PSdkYXRldGltZSdcIj5cbiAgICAgICAgPG1hdC1sYWJlbD57e2Rpc3BsYXl9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW25neE1hdERhdGV0aW1lUGlja2VyXT1cInBpY2tlckRUXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiPlxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cIiRhbnkocGlja2VyRFQpXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICAgIDxuZ3gtbWF0LWRhdGV0aW1lLXBpY2tlciAjcGlja2VyRFQgW3Nob3dTcGlubmVyc109XCJzaG93U3Bpbm5lcnNcIiBbc2hvd1NlY29uZHNdPVwic2hvd1NlY29uZHNcIiBbdG91Y2hVaV09XCJ0cnVlXCIgW2Rpc2FibGVNaW51dGVdPVwiZGlzYWJsZU1pbnV0ZVwiPlxuICAgICAgICA8L25neC1tYXQtZGF0ZXRpbWUtcGlja2VyPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Rpdj5cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { SearchFormComponent } from '../search-form/search-form.component';
2
- import { Component, ContentChild, ViewChild, Input } from '@angular/core';
2
+ import { Component, ContentChild, ViewChild, Input, Inject } from '@angular/core';
3
3
  import { FormControl } from '@angular/forms';
4
4
  import { MatPaginator } from '@angular/material/paginator';
5
5
  import { MatSort } from '@angular/material/sort';
@@ -26,9 +26,10 @@ import * as i12 from "@angular/material/table";
26
26
  import * as i13 from "@angular/material/paginator";
27
27
  import * as i14 from "@angular/material/progress-spinner";
28
28
  import * as i15 from "@angular/material/sort";
29
+ import * as i16 from "../../Services/gloww.service";
29
30
  ;
30
31
  export class DisplayObjectsComponent {
31
- constructor(changeDetectorRef, dialog, router, location, authenticationService, formBuilder, route) {
32
+ constructor(glowwService, changeDetectorRef, dialog, router, location, authenticationService, formBuilder, route) {
32
33
  this.changeDetectorRef = changeDetectorRef;
33
34
  this.dialog = dialog;
34
35
  this.router = router;
@@ -47,6 +48,7 @@ export class DisplayObjectsComponent {
47
48
  this.displayform = true;
48
49
  this.displayresult = false;
49
50
  this.queryParams = {};
51
+ this.glowwService = glowwService;
50
52
  const component = this;
51
53
  this.currentUser = this.authenticationService.currentUserValue.UserInfo;
52
54
  this.form2 = this.formBuilder.group({
@@ -63,7 +65,7 @@ export class DisplayObjectsComponent {
63
65
  }
64
66
  ngOnChanges(changes) {
65
67
  }
66
- ngAfterViewInit() {
68
+ InitRequest() {
67
69
  if (!this.searchRequest) {
68
70
  this.searchRequest = this.glowwService[`search${this.objectName}`];
69
71
  }
@@ -76,6 +78,14 @@ export class DisplayObjectsComponent {
76
78
  if (!this.putRequest) {
77
79
  this.putRequest = this.glowwService[`put${this.objectName}`];
78
80
  }
81
+ }
82
+ ngAfterViewInit() {
83
+ this.objectName = this.parent.objectName;
84
+ this.actions = this.parent.actions;
85
+ this.primaryKey = this.parent.primaryKey;
86
+ this.columns = this.parent.columnsToDisplay;
87
+ this.Editor = this.parent.editor;
88
+ this.InitRequest();
79
89
  if (this.maxrows?.length > 0) {
80
90
  this.form.addControl("_MaxRow_", new FormControl(null));
81
91
  }
@@ -86,7 +96,8 @@ export class DisplayObjectsComponent {
86
96
  this.displayresult = true;
87
97
  }
88
98
  this.glowwService.basePathChange.subscribe(newUrl => {
89
- console.log(`basePathChange : fromLayout:${this.formLayout}-displayform:${this.displayform}`);
99
+ console.log(`basePathChange ${newUrl}: fromLayout:${this.formLayout}-displayform:${this.displayform}`);
100
+ this.parent.form?.reset();
90
101
  if (!this.formLayout && this.resultLayout) {
91
102
  this.displayform = false;
92
103
  this.displayresult = true;
@@ -109,6 +120,7 @@ export class DisplayObjectsComponent {
109
120
  }
110
121
  }
111
122
  Search(data) {
123
+ console.log(`Search ${this.glowwService.InternalBasePath}`);
112
124
  if (data)
113
125
  this.data = data;
114
126
  this.displayresult = true;
@@ -153,14 +165,7 @@ export class DisplayObjectsComponent {
153
165
  if (searchData) {
154
166
  Object.keys(searchData).forEach(name => {
155
167
  const val = searchData[name];
156
- if (val) {
157
- if (val.constructor.name === 'Moment') {
158
- this.queryParams[name] = val.toISOString();
159
- }
160
- else {
161
- this.queryParams[name] = val;
162
- }
163
- }
168
+ this.queryParams[name] = val;
164
169
  });
165
170
  }
166
171
  if (this.form2.value._MaxRow_) {
@@ -455,12 +460,15 @@ export class DisplayObjectsComponent {
455
460
  });
456
461
  }
457
462
  }
458
- DisplayObjectsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DisplayObjectsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.MatDialog }, { token: i2.Router }, { token: i3.Location }, { token: i4.AuthenticationService }, { token: i5.FormBuilder }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
459
- DisplayObjectsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: DisplayObjectsComponent, selector: "glw-display-objects", inputs: { configuration: "configuration", displayObjLink: "displayObjLink", canDisplayObj: "canDisplayObj", canEdit: "canEdit", canDelete: "canDelete", canAdd: "canAdd", form: "form", Editor: "Editor", SearchForm: "SearchForm", searchRequest: "searchRequest", postRequest: "postRequest", deleteRequest: "deleteRequest", putRequest: "putRequest", columns: "columns", glowwService: "glowwService", objectName: "objectName", primaryKey: "primaryKey", maxrows: "maxrows", mandatoryParams: "mandatoryParams", actions: "actions", dialogConfig: "dialogConfig", fileFields: "fileFields", parent: "parent" }, queries: [{ propertyName: "header", first: true, predicate: HeaderComponent, descendants: true }, { propertyName: "formLayout", first: true, predicate: SearchFormComponent, descendants: true }, { propertyName: "resultLayout", first: true, predicate: ResultTableComponent, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div>\r\n <ng-content select=\"glw-header\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"displayform\">\r\n <mat-card>\r\n <mat-card-content>\r\n <mat-error *ngIf=\"resultException\">\r\n Unable to query : {{resultException}}\r\n </mat-error>\r\n <ng-content select=\"glw-search-form\"></ng-content>\r\n <!--<ng-container *ngComponentOutlet=\"SearchForm; injector: objInjector\"></ng-container>-->\r\n <div *ngIf=\"maxrows\" [formGroup]=\"form2\">\r\n <br />\r\n <mat-form-field>\r\n <mat-select placeholder=\"MaxRow\" formControlName=\"_MaxRow_\">\r\n <mat-option *ngFor=\"let maxrow of maxrows\" [value]=\"maxrow\">\r\n <span *ngIf=\"maxrow\">{{maxrow}} objects</span>\r\n <span *ngIf=\"!maxrow\"> Default</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <button mat-stroked-button color=\"accent\" (click)=\"onSearch()\">\r\n <mat-icon>search</mat-icon>\r\n Search\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n</div>\r\n\r\n<div *ngIf=\"displayresult\">\r\n <div class=\"mat-elevation-z8\" *ngIf=\"dataSource; else Spinner\">\r\n <table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <i class=\"fal fa-plus\" (click)=\"AddObj()\" *ngIf=\"canAddThis()\">\r\n </i>\r\n </th>\r\n <td mat-cell *matCellDef=\"let obj\">\r\n <i class=\"fal fa-eye\" [routerLink]=\"displayObjLinkThis(obj)\" *ngIf=\"canDisplayObjThis(obj)\">\r\n </i>\r\n <ng-container *ngFor=\"let action of actions\">\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"action.icon.icon && (!action.display || action.display(obj, action.name))\">\r\n </i>\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"!action.icon.icon && (!action.display || action.display(obj, action.name))\"></i>\r\n </ng-container>\r\n <i class=\"fal fa-trash-alt\" (click)=\"DeleteObj(obj)\" *ngIf=\"canDeleteThis(obj)\">\r\n </i>\r\n <i class=\"fal fa-pencil\" (click)=\"EditObj(obj)\" *ngIf=\"canEditThis(obj)\">\r\n </i>\r\n </td>\r\n </ng-container>\r\n <ng-content select=\"glw-result-table\"></ng-content>\r\n <tr mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></tr>\r\n <tr mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></tr>\r\n </table>\r\n <mat-paginator pageSize=\"10\"></mat-paginator>\r\n </div>\r\n <ng-template #Spinner>\r\n <mat-spinner></mat-spinner>\r\n </ng-template>\r\n</div>", styles: ["table{width:100%}i{cursor:pointer;padding:5px}\n"], components: [{ type: i6.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i12.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i12.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i12.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i13.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i14.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i7.MatError, selector: "mat-error", inputs: ["id"] }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i15.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i12.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i12.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i12.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i12.MatCellDef, selector: "[matCellDef]" }, { type: i12.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i2.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i12.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i12.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }] });
463
+ DisplayObjectsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DisplayObjectsComponent, deps: [{ token: 'glowwService' }, { token: i0.ChangeDetectorRef }, { token: i1.MatDialog }, { token: i2.Router }, { token: i3.Location }, { token: i4.AuthenticationService }, { token: i5.FormBuilder }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
464
+ DisplayObjectsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: DisplayObjectsComponent, selector: "glw-display-objects", inputs: { configuration: "configuration", displayObjLink: "displayObjLink", canDisplayObj: "canDisplayObj", canEdit: "canEdit", canDelete: "canDelete", canAdd: "canAdd", form: "form", SearchForm: "SearchForm", searchRequest: "searchRequest", postRequest: "postRequest", deleteRequest: "deleteRequest", putRequest: "putRequest", maxrows: "maxrows", mandatoryParams: "mandatoryParams", dialogConfig: "dialogConfig", fileFields: "fileFields", parent: "parent" }, queries: [{ propertyName: "header", first: true, predicate: HeaderComponent, descendants: true }, { propertyName: "formLayout", first: true, predicate: SearchFormComponent, descendants: true }, { propertyName: "resultLayout", first: true, predicate: ResultTableComponent, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div>\r\n <ng-content select=\"glw-header\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"displayform\">\r\n <mat-card>\r\n <mat-card-content>\r\n <mat-error *ngIf=\"resultException\">\r\n Unable to query : {{resultException}}\r\n </mat-error>\r\n <ng-content select=\"glw-search-form\"></ng-content>\r\n <!--<ng-container *ngComponentOutlet=\"SearchForm; injector: objInjector\"></ng-container>-->\r\n <div *ngIf=\"maxrows\" [formGroup]=\"form2\">\r\n <br />\r\n <mat-form-field>\r\n <mat-select placeholder=\"MaxRow\" formControlName=\"_MaxRow_\">\r\n <mat-option *ngFor=\"let maxrow of maxrows\" [value]=\"maxrow\">\r\n <span *ngIf=\"maxrow\">{{maxrow}} objects</span>\r\n <span *ngIf=\"!maxrow\"> Default</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <button mat-stroked-button color=\"accent\" (click)=\"onSearch()\">\r\n <mat-icon>search</mat-icon>\r\n Search\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n</div>\r\n\r\n<div *ngIf=\"displayresult\">\r\n <div class=\"mat-elevation-z8\" *ngIf=\"dataSource; else Spinner\">\r\n <table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <i class=\"fal fa-plus\" (click)=\"AddObj()\" *ngIf=\"canAddThis()\">\r\n </i>\r\n </th>\r\n <td mat-cell *matCellDef=\"let obj\">\r\n <i class=\"fal fa-eye\" [routerLink]=\"displayObjLinkThis(obj)\" *ngIf=\"canDisplayObjThis(obj)\">\r\n </i>\r\n <ng-container *ngFor=\"let action of actions\">\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"action.icon.icon && (!action.display || action.display(obj, action.name))\">\r\n </i>\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"!action.icon.icon && (!action.display || action.display(obj, action.name))\"></i>\r\n </ng-container>\r\n <i class=\"fal fa-trash-alt\" (click)=\"DeleteObj(obj)\" *ngIf=\"canDeleteThis(obj)\">\r\n </i>\r\n <i class=\"fal fa-pencil\" (click)=\"EditObj(obj)\" *ngIf=\"canEditThis(obj)\">\r\n </i>\r\n </td>\r\n </ng-container>\r\n <ng-content select=\"glw-result-table\"></ng-content>\r\n <tr mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></tr>\r\n <tr mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></tr>\r\n </table>\r\n <mat-paginator pageSize=\"10\"></mat-paginator>\r\n </div>\r\n <ng-template #Spinner>\r\n <mat-spinner></mat-spinner>\r\n </ng-template>\r\n</div>", styles: ["table{width:100%}i{cursor:pointer;padding:5px}\n"], components: [{ type: i6.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i12.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i12.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i12.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i13.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i14.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i7.MatError, selector: "mat-error", inputs: ["id"] }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i15.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i12.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i12.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i12.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i12.MatCellDef, selector: "[matCellDef]" }, { type: i12.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i2.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i12.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i12.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }] });
460
465
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DisplayObjectsComponent, decorators: [{
461
466
  type: Component,
462
467
  args: [{ selector: 'glw-display-objects', template: "<div>\r\n <ng-content select=\"glw-header\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"displayform\">\r\n <mat-card>\r\n <mat-card-content>\r\n <mat-error *ngIf=\"resultException\">\r\n Unable to query : {{resultException}}\r\n </mat-error>\r\n <ng-content select=\"glw-search-form\"></ng-content>\r\n <!--<ng-container *ngComponentOutlet=\"SearchForm; injector: objInjector\"></ng-container>-->\r\n <div *ngIf=\"maxrows\" [formGroup]=\"form2\">\r\n <br />\r\n <mat-form-field>\r\n <mat-select placeholder=\"MaxRow\" formControlName=\"_MaxRow_\">\r\n <mat-option *ngFor=\"let maxrow of maxrows\" [value]=\"maxrow\">\r\n <span *ngIf=\"maxrow\">{{maxrow}} objects</span>\r\n <span *ngIf=\"!maxrow\"> Default</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <button mat-stroked-button color=\"accent\" (click)=\"onSearch()\">\r\n <mat-icon>search</mat-icon>\r\n Search\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n</div>\r\n\r\n<div *ngIf=\"displayresult\">\r\n <div class=\"mat-elevation-z8\" *ngIf=\"dataSource; else Spinner\">\r\n <table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <i class=\"fal fa-plus\" (click)=\"AddObj()\" *ngIf=\"canAddThis()\">\r\n </i>\r\n </th>\r\n <td mat-cell *matCellDef=\"let obj\">\r\n <i class=\"fal fa-eye\" [routerLink]=\"displayObjLinkThis(obj)\" *ngIf=\"canDisplayObjThis(obj)\">\r\n </i>\r\n <ng-container *ngFor=\"let action of actions\">\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"action.icon.icon && (!action.display || action.display(obj, action.name))\">\r\n </i>\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"!action.icon.icon && (!action.display || action.display(obj, action.name))\"></i>\r\n </ng-container>\r\n <i class=\"fal fa-trash-alt\" (click)=\"DeleteObj(obj)\" *ngIf=\"canDeleteThis(obj)\">\r\n </i>\r\n <i class=\"fal fa-pencil\" (click)=\"EditObj(obj)\" *ngIf=\"canEditThis(obj)\">\r\n </i>\r\n </td>\r\n </ng-container>\r\n <ng-content select=\"glw-result-table\"></ng-content>\r\n <tr mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></tr>\r\n <tr mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></tr>\r\n </table>\r\n <mat-paginator pageSize=\"10\"></mat-paginator>\r\n </div>\r\n <ng-template #Spinner>\r\n <mat-spinner></mat-spinner>\r\n </ng-template>\r\n</div>", styles: ["table{width:100%}i{cursor:pointer;padding:5px}\n"] }]
463
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.MatDialog }, { type: i2.Router }, { type: i3.Location }, { type: i4.AuthenticationService }, { type: i5.FormBuilder }, { type: i2.ActivatedRoute }]; }, propDecorators: { header: [{
468
+ }], ctorParameters: function () { return [{ type: i16.GlowwService, decorators: [{
469
+ type: Inject,
470
+ args: ['glowwService']
471
+ }] }, { type: i0.ChangeDetectorRef }, { type: i1.MatDialog }, { type: i2.Router }, { type: i3.Location }, { type: i4.AuthenticationService }, { type: i5.FormBuilder }, { type: i2.ActivatedRoute }]; }, propDecorators: { header: [{
464
472
  type: ContentChild,
465
473
  args: [HeaderComponent]
466
474
  }], formLayout: [{
@@ -492,8 +500,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
492
500
  type: Input
493
501
  }], form: [{
494
502
  type: Input
495
- }], Editor: [{
496
- type: Input
497
503
  }], SearchForm: [{
498
504
  type: Input
499
505
  }], searchRequest: [{
@@ -504,20 +510,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
504
510
  type: Input
505
511
  }], putRequest: [{
506
512
  type: Input
507
- }], columns: [{
508
- type: Input
509
- }], glowwService: [{
510
- type: Input
511
- }], objectName: [{
512
- type: Input
513
- }], primaryKey: [{
514
- type: Input
515
513
  }], maxrows: [{
516
514
  type: Input
517
515
  }], mandatoryParams: [{
518
516
  type: Input
519
- }], actions: [{
520
- type: Input
521
517
  }], dialogConfig: [{
522
518
  type: Input
523
519
  }], fileFields: [{
@@ -525,4 +521,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
525
521
  }], parent: [{
526
522
  type: Input
527
523
  }] } });
528
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9kaXNwbGF5LW9iamVjdHMvZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9kaXNwbGF5LW9iamVjdHMvZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFVLFNBQVMsRUFBc0ssS0FBSyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ25RLE9BQU8sRUFBRSxXQUFXLEVBQTBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFtRCxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU5RSxPQUFPLEVBQWdDLGFBQWEsRUFBRSxVQUFVLEVBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFHN0csT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSXRFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFB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QUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlzcGxheU9iamVjdHNDb25maWd1cmF0aW9uIH0gZnJvbSAnLi8uLi9kaXNwbGF5LW9iamVjdHMtY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IFNlYXJjaEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZm9ybS9zZWFyY2gtZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZWZlcmVuY2UgfSBmcm9tICdAYW5ndWxhci9jb21waWxlci9zcmMvcmVuZGVyMy9yM19hc3QnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgT25Jbml0LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIEVsZW1lbnRSZWYsIERpcmVjdGl2ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEluamVjdG9yLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQWZ0ZXJDb250ZW50SW5pdCwgUXVlcnlMaXN0LCBDb250ZW50Q2hpbGRyZW4sIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IE1hdENvbHVtbkRlZiwgTWF0VGFibGUsIE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZm9ya0pvaW4sIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yLCBvYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJlc3VsdFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVzdWx0LXRhYmxlL3Jlc3VsdC10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwRXZlbnRUeXBlLCBIdHRwUGFyYW1zLCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIERhdGEsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgR2xvd3dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vU2VydmljZXMvZ2xvd3cuc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2dsb3d3LXNlY3VyaXR5L1NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBtYXAsIGNhdGNoRXJyb3IsIG1lcmdlTWFwLCB0YXAsIGZpbHRlciwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb24ge1xyXG4gIGljb246IGFueTtcclxuICBuYW1lPzogc3RyaW5nO1xyXG4gIHJvdXRlckxpbmtGY3Q/OiAob2JqKSA9PiBzdHJpbmdbXTtcclxuICBkaXNwbGF5PzogKG9iaikgPT4gYm9vbGVhbjtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZ2x3LWRpc3BsYXktb2JqZWN0cycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Rpc3BsYXktb2JqZWN0cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIERpc3BsYXlPYmplY3RzQ29tcG9uZW50PFRPYmo+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xyXG5cclxuICBAQ29udGVudENoaWxkKEhlYWRlckNvbXBvbmVudCkgaGVhZGVyOiBIZWFkZXJDb21wb25lbnQ7XHJcbiAgQENvbnRlbnRDaGlsZChTZWFyY2hGb3JtQ29tcG9uZW50KSBmb3JtTGF5b3V0OiBTZWFyY2hGb3JtQ29tcG9uZW50O1xyXG4gIEBDb250ZW50Q2hpbGQoUmVzdWx0VGFibGVDb21wb25lbnQpIHJlc3VsdExheW91dDogUmVzdWx0VGFibGVDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChNYXRUYWJsZSwgeyBzdGF0aWM6IGZhbHNlIH0pIHRhYmxlOiBNYXRUYWJsZTxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogZmFsc2UgfSkgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogZmFsc2UgfSkgc29ydDogTWF0U29ydDtcclxuXHJcbiAgLy8gYWZ0ZXIgdGhlIDxuZy1jb250ZW50PiBoYXMgYmVlbiBpbml0aWFsaXplZCwgdGhlIGNvbHVtbiBkZWZpbml0aW9ucyBhcmUgYXZhaWxhYmxlLlxyXG4gIC8vIEFsbCB0aGF0J3MgbGVmdCBpcyB0byBhZGQgdGhlbSB0byB0aGUgdGFibGUgb3Vyc2VsdmVzOlxyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb246IERpc3BsYXlPYmplY3RzQ29uZmlndXJhdGlvbjxUT2JqPjtcclxuICBASW5wdXQoKSBkaXNwbGF5T2JqTGluazogKG9iajogVE9iaiwgYWN0aW9uPzogc3RyaW5nKSA9PiAoc3RyaW5nIHwgc3RyaW5nW10pO1xyXG4gIEBJbnB1dCgpIGNhbkRpc3BsYXlPYmo6ICgodXNlcjogYW55LCBvYmo6IFRPYmosIGFjdGlvbj86IHN0cmluZykgPT4gYm9vbGVhbikgfCBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY2FuRWRpdDogKCh1c2VyOiBhbnksIG9iajogVE9iaikgPT4gYm9vbGVhbikgfCBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjYW5EZWxldGU6ICgodXNlcjogYW55LCBvYmo6IFRPYmopID0+IGJvb2xlYW4pIHwgYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgY2FuQWRkOiAoKHVzZXI6IGFueSkgPT4gYm9vbGVhbikgfCBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgRWRpdG9yOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIFNlYXJjaEZvcm06IGFueTtcclxuICBASW5wdXQoKSBzZWFyY2hSZXF1ZXN0OiAob2JqPzogVE9iaiB8IGFueSkgPT4gT2JzZXJ2YWJsZTxUT2JqW10+O1xyXG4gIEBJbnB1dCgpIHBvc3RSZXF1ZXN0OiAob2JqPzogVE9iaiB8IGFueSkgPT4gT2JzZXJ2YWJsZTxUT2JqPjtcclxuICBASW5wdXQoKSBkZWxldGVSZXF1ZXN0OiAob2JqPzogVE9iaiB8IGFueSkgPT4gT2JzZXJ2YWJsZTxUT2JqW10+O1xyXG4gIEBJbnB1dCgpIHB1dFJlcXVlc3Q6IChvYmo/OiBUT2JqIHwgYW55KSA9PiBPYnNlcnZhYmxlPFRPYmpbXT47XHJcbiAgQElucHV0KCkgY29sdW1uczogKCkgPT4gc3RyaW5nW107XHJcbiAgQElucHV0KCkgZ2xvd3dTZXJ2aWNlOiBHbG93d1NlcnZpY2U7XHJcbiAgQElucHV0KCkgb2JqZWN0TmFtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHByaW1hcnlLZXk6IHN0cmluZyB8IHN0cmluZ1tdO1xyXG4gIEBJbnB1dCgpIG1heHJvd3M6IHN0cmluZ1tdO1xyXG4gIEBJbnB1dCgpIG1hbmRhdG9yeVBhcmFtczogb2JqZWN0ID0ge307XHJcbiAgQElucHV0KCkgYWN0aW9ucyA9IFtdO1xyXG4gIEBJbnB1dCgpIGRpYWxvZ0NvbmZpZzogb2JqZWN0ID0ge307XHJcbiAgQElucHV0KCkgZmlsZUZpZWxkczogc3RyaW5nW107XHJcbiAgQElucHV0KCkgcGFyZW50OiBhbnk7XHJcblxyXG4gIGNvbHVtbnNUb0Rpc3BsYXkgPSBbXTtcclxuICBkYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8VE9iaj47XHJcbiAgZGlzcGxheWZvcm0gPSB0cnVlO1xyXG4gIGRpc3BsYXlyZXN1bHQgPSBmYWxzZTtcclxuICBxdWVyeVBhcmFtczogYW55ID0ge307XHJcbiAgcmVzdWx0RXhjZXB0aW9uOiBzdHJpbmc7XHJcbiAgY3VycmVudFVzZXI6IGFueTtcclxuICBmb3JtMjogRm9ybUdyb3VwO1xyXG4gIGRhdGE6IG9iamVjdDtcclxuICByb3V0ZVBhcmFtczogb2JqZWN0O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sIHByaXZhdGUgYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xyXG4gICAgY29uc3QgY29tcG9uZW50ID0gdGhpcztcclxuICAgIHRoaXMuY3VycmVudFVzZXIgPSAodGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UuY3VycmVudFVzZXJWYWx1ZSBhcyBhbnkpLlVzZXJJbmZvO1xyXG4gICAgdGhpcy5mb3JtMiA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBfTWF4Um93XzogW251bGxdXHJcbiAgICB9KTtcclxuICAgIC8vZGVidWdnZXI7XHJcbiAgICB0aGlzLmRhdGEgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGE7XHJcbiAgICB0aGlzLnJvdXRlUGFyYW1zID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXM7XHJcbiAgICByb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHJvdXRlUGFyYW1zID0+IHtcclxuICAgICAgdGhpcy5yb3V0ZVBhcmFtcyA9IHJvdXRlUGFyYW1zO1xyXG4gICAgICBpZiAodGhpcy5kaXNwbGF5cmVzdWx0KSB0aGlzLlNlYXJjaCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2VhcmNoUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFJlcXVlc3QgPSB0aGlzLmdsb3d3U2VydmljZVtgc2VhcmNoJHt0aGlzLm9iamVjdE5hbWV9YF07XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucG9zdFJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5wb3N0UmVxdWVzdCA9IHRoaXMuZ2xvd3dTZXJ2aWNlW2Bwb3N0JHt0aGlzLm9iamVjdE5hbWV9YF07XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGVsZXRlUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLmRlbGV0ZVJlcXVlc3QgPSB0aGlzLmdsb3d3U2VydmljZVtgZGVsZXRlJHt0aGlzLm9iamVjdE5hbWV9YF07XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucHV0UmVxdWVzdCkge1xyXG4gICAgICB0aGlzLnB1dFJlcXVlc3QgPSB0aGlzLmdsb3d3U2VydmljZVtgcHV0JHt0aGlzLm9iamVjdE5hbWV9YF07XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tYXhyb3dzPy5sZW5ndGggPiAwKSB7IHRoaXMuZm9ybS5hZGRDb250cm9sKFwiX01heFJvd19cIiwgbmV3IEZvcm1Db250cm9sKG51bGwpKTsgfVxyXG4gICAgLy9kZWJ1Z2dlcjtcclxuICAgIGNvbnNvbGUubG9nKGBJTklUIDogZm9ybUxheW91dDoke3RoaXMuZm9ybUxheW91dH0tZGlzcGxheWZvcm06JHt0aGlzLmRpc3BsYXlmb3JtfWApXHJcbiAgICBpZiAoIXRoaXMuZm9ybUxheW91dCAmJiB0aGlzLnJlc3VsdExheW91dCkge1xyXG4gICAgICB0aGlzLmRpc3BsYXlmb3JtID0gZmFsc2U7IHRoaXMuZGlzcGxheXJlc3VsdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdsb3d3U2VydmljZS5iYXNlUGF0aENoYW5nZS5zdWJzY3JpYmUobmV3VXJsID0+IHtcclxuICAgICAgY29uc29sZS5sb2coYGJhc2VQYXRoQ2hhbmdlIDogZnJvbUxheW91dDoke3RoaXMuZm9ybUxheW91dH0tZGlzcGxheWZvcm06JHt0aGlzLmRpc3BsYXlmb3JtfWApXHJcbiAgICAgIGlmICghdGhpcy5mb3JtTGF5b3V0ICYmIHRoaXMucmVzdWx0TGF5b3V0KSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5Zm9ybSA9IGZhbHNlOyB0aGlzLmRpc3BsYXlyZXN1bHQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRpc3BsYXlyZXN1bHQpIHsgdGhpcy5TZWFyY2goKTsgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5kaXNwbGF5cmVzdWx0KSB7IHRoaXMuU2VhcmNoKCk7IH1cclxuICB9XHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgSW5pdChkYXRhPzogRGF0YSkge1xyXG4gICAgaWYgKChkYXRhICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA+IDApIHx8IHRoaXMuZGlzcGxheXJlc3VsdCkge1xyXG4gICAgICB0aGlzLlNlYXJjaChkYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFNlYXJjaChkYXRhPzogRGF0YSkge1xyXG4gICAgaWYgKGRhdGEpIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICB0aGlzLmRpc3BsYXlyZXN1bHQgPSB0cnVlO1xyXG4gICAgdGhpcy5kaXNwbGF5Zm9ybSA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZXN1bHRFeGNlcHRpb24gPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLmRhdGEpIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5kYXRhKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlQYXJhbXNbbmFtZV0gPSB0aGlzLmRhdGFbbmFtZV07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucm91dGVQYXJhbXMpIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5yb3V0ZVBhcmFtcykuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zW25hbWVdID0gdGhpcy5yb3V0ZVBhcmFtc1tuYW1lXTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubWFuZGF0b3J5UGFyYW1zKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMubWFuZGF0b3J5UGFyYW1zKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlQYXJhbXNbbmFtZV0gPSB0aGlzLnF1ZXJ5UGFyYW1zW25hbWVdO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL2RlYnVnZ2VyO1xyXG4gICAgdGhpcy5zZWFyY2hSZXF1ZXN0LmNhbGwodGhpcy5nbG93d1NlcnZpY2UsIHRoaXMucXVlcnlQYXJhbXMpLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxUT2JqPihyKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuVXBkYXRlVGFibGUoKTtcclxuICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlyZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRpc3BsYXlmb3JtID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc3VsdEV4Y2VwdGlvbiA9IGVycm9yO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFuKG9iaikge1xyXG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBpbiBvYmopIHtcclxuICAgICAgaWYgKG9ialtwcm9wTmFtZV0gPT09IG51bGwgfHwgb2JqW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZGVsZXRlIG9ialtwcm9wTmFtZV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKCkge1xyXG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHt9O1xyXG4gICAgY29uc3Qgc2VhcmNoRGF0YSA9IHRoaXMucGFyZW50LmZvcm0udmFsdWUuc2VhcmNoRGF0YTtcclxuICAgIGlmIChzZWFyY2hEYXRhKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHNlYXJjaERhdGEpLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gc2VhcmNoRGF0YVtuYW1lXTtcclxuICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICBpZiAodmFsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdNb21lbnQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlcnlQYXJhbXNbbmFtZV0gPSAodmFsIGFzIE1vbWVudCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5xdWVyeVBhcmFtc1tuYW1lXSA9IHZhbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZm9ybTIudmFsdWUuX01heFJvd18pIHsgdGhpcy5xdWVyeVBhcmFtcy5fTWF4Um93XyA9IHRoaXMuZm9ybTIudmFsdWUuX01heFJvd187IH1cclxuICAgIHRoaXMuY2xlYW4odGhpcy5xdWVyeVBhcmFtcyk7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcyh7IGZyb21PYmplY3Q6IHRoaXMucXVlcnlQYXJhbXMgfSk7XHJcbiAgICBjb25zdCBjdXJyZW50c3RhdGUgPSB0aGlzLmxvY2F0aW9uLmdldFN0YXRlKCk7XHJcbiAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnJvdXRlci51cmwsIHBhcmFtcy50b1N0cmluZygpKTtcclxuICAgIHRoaXMuU2VhcmNoKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgVXBkYXRlRGF0YVNvdXJjZShyOiBUT2JqW10pIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8VE9iaj4ocik7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB0aGlzLlVwZGF0ZVRhYmxlKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgVXBkYXRlVGFibGUoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XHJcbiAgICAgIGlmICghdGhpcy50YWJsZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCchdGhpcy50YWJsZScpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlc3VsdExheW91dC5jb2x1bW5EZWZzLmZvckVhY2goY29sdW1uRGVmID0+IHRoaXMudGFibGUuYWRkQ29sdW1uRGVmKGNvbHVtbkRlZikpO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG4gICAgICB0aGlzLmNvbHVtbnNUb0Rpc3BsYXkgPSB0aGlzLmNvbHVtbnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbkRpc3BsYXlPYmpUaGlzKG9iaiwgYWN0aW9uPykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLmRpc3BsYXlPYmpMaW5rKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuY2FuRGlzcGxheU9iaiA9PT0gJ2Jvb2xlYW4nKSB7IHJldHVybiB0aGlzLmNhbkRpc3BsYXlPYmo7IH1cclxuICAgICAgcmV0dXJuIHRoaXMuY2FuRGlzcGxheU9iaih0aGlzLmN1cnJlbnRVc2VyLCBvYmosIGFjdGlvbik7XHJcbiAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICBjYW5BZGRUaGlzKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLmNhbkFkZCkgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbkFkZCA9PT0gJ2Jvb2xlYW4nKSB7IHJldHVybiB0aGlzLmNhbkFkZDsgfVxyXG4gICAgICByZXR1cm4gdGhpcy5jYW5BZGQodGhpcy5jdXJyZW50VXNlcik7XHJcbiAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuRWRpdFRoaXMob2JqKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY2FuRWRpdCkgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbkVkaXQgPT09ICdib29sZWFuJykgeyByZXR1cm4gdGhpcy5jYW5FZGl0OyB9XHJcbiAgICAgIHJldHVybiB0aGlzLmNhbkVkaXQodGhpcy5jdXJyZW50VXNlciwgb2JqKTtcclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGV4KTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5EZWxldGVUaGlzKG9iaikge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLmNhbkRlbGV0ZSkgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbkRlbGV0ZSA9PT0gJ2Jvb2xlYW4nKSB7IHJldHVybiB0aGlzLmNhbkRlbGV0ZTsgfVxyXG4gICAgICByZXR1cm4gdGhpcy5jYW5EZWxldGUodGhpcy5jdXJyZW50VXNlciwgb2JqKTtcclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGV4KTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzcGxheU9iakxpbmtUaGlzKG9iaiwgYWN0aW9uPykge1xyXG4gICAgaWYgKCF0aGlzLmRpc3BsYXlPYmpMaW5rKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5T2JqTGluayhvYmosIGFjdGlvbik7XHJcbiAgfVxyXG5cclxuXHJcbiAgaXNTdHJpbmcodmFsdWUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nO1xyXG4gIH1cclxuICBnZXRQcmltYXJ5S2V5KG9iajogb2JqZWN0IHwgVE9iaik6IG9iamVjdFtdIHtcclxuICAgIGxldCByZXMgPSBbXTtcclxuICAgIGlmICh0aGlzLmlzU3RyaW5nKHRoaXMucHJpbWFyeUtleSkpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJzdHJpbmdcIik7XHJcbiAgICAgIHJlcy5wdXNoKG9ialt0aGlzLnByaW1hcnlLZXkgYXMgc3RyaW5nXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZyhcInN0cmluZ1tdXCIpO1xyXG4gICAgICAodGhpcy5wcmltYXJ5S2V5IGFzIHN0cmluZ1tdKS5mb3JFYWNoKGtleSA9PiByZXMucHVzaChvYmpba2V5XSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIF9zYXZlT2JqKG9iajogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHZhciBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgdGhpcy5wb3N0UmVxdWVzdC5jYWxsKHRoaXMuZ2xvd3dTZXJ2aWNlLCBvYmopLnN1YnNjcmliZShcclxuICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgY29uc3QgdG1wID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICAgICAgdG1wLnB1c2goZGF0YSk7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0bXA7XHJcbiAgICAgICAgc3ViamVjdC5uZXh0KGRhdGEpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgYWxlcnQoYFVuYWJsZSB0byBhZGQgT2JqZWN0ICR7ZXJyb3Iuc3RhdHVzfSAke2Vycm9yLnN0YXR1c1RleHR9XFxuJHtlcnJvci5NZXNzYWdlfVxcbiR7ZXJyb3IuZXJyb3J9YCk7XHJcbiAgICAgICAgc3ViamVjdC5lcnJvcihlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICByZXR1cm4gc3ViamVjdDtcclxuICB9XHJcbiAgX3NhdmVGaWxlKGZpbGVGaWVsZDogc3RyaW5nLCBvYmo6IGFueSwgZmlsZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlLmRhdGEpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2xvd3dTZXJ2aWNlW2Bwb3N0JHt0aGlzLm9iamVjdE5hbWV9JHtmaWxlRmllbGR9YF0uY2FsbCh0aGlzLmdsb3d3U2VydmljZSwgdGhpcy5nZXRQcmltYXJ5S2V5KG9iaiksIGZvcm1EYXRhKS5waXBlKFxyXG4gICAgICB0YXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzOlxyXG4gICAgICAgICAgICBmaWxlLnByb2dyZXNzID0gTWF0aC5yb3VuZChldmVudC5sb2FkZWQgKiAxMDAgLyAoZXZlbnQudG90YWwgPz8gMSkpO1xyXG4gICAgICAgICAgICBmaWxlLmluUHJvZ3Jlc3MgPSBmaWxlLnByb2dyZXNzICE9PSAxMDA7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlOlxyXG4gICAgICAgICAgICBmaWxlLnByb2dyZXNzID0gMTAwO1xyXG4gICAgICAgICAgICBmaWxlLnN0YXR1cyA9IFwiRG9uZVwiO1xyXG4gICAgICAgICAgICBmaWxlLmluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgZmlsdGVyKChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgZmlsdGVyICR7ZXZlbnQudHlwZX1gKTtcclxuICAgICAgICByZXR1cm4gZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZVxyXG4gICAgICB9KSxcclxuICAgICAgbWFwKChldmVudDogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgbWFwICR7ZXZlbnQudHlwZX1gKTtcclxuICAgICAgICByZXR1cm4gZXZlbnQuYm9keTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGZpbGUuaW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIGZpbGUuc3RhdHVzID0gXCJFcnJvclwiO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAke2ZpbGUuZGF0YS5uYW1lfSB1cGxvYWQgZmFpbGVkLmApO1xyXG4gICAgICAgIC8vc3ViamVjdC5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgcmV0dXJuIG9mKGAke2ZpbGUuZGF0YS5uYW1lfSB1cGxvYWQgZmFpbGVkLmApO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIEFkZE9iaigpIHtcclxuICAgIGNvbnN0IGRpYWxvZ0NvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcclxuICAgIGRpYWxvZ0NvbmZpZy5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xyXG4gICAgZGlhbG9nQ29uZmlnLmF1dG9Gb2N1cyA9IHRydWU7XHJcbiAgICBkaWFsb2dDb25maWcuY2xvc2VPbk5hdmlnYXRpb24gPSBmYWxzZTtcclxuXHRcdGRpYWxvZ0NvbmZpZy5tYXhIZWlnaHQgPSBcIjk1JVwiO1xyXG5cdFx0ZGlhbG9nQ29uZmlnLm1heFdpZHRoID0gXCI5NSVcIjtcclxuXHRcdGRpYWxvZ0NvbmZpZy5oZWlnaHQgPSBcIjEwMCVcIlxyXG4gICAgaWYgKHRoaXMuZGlhbG9nQ29uZmlnKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZGlhbG9nQ29uZmlnKS5mb3JFYWNoKFxyXG4gICAgICAgIG5hbWUgPT4ge1xyXG4gICAgICAgICAgZGlhbG9nQ29uZmlnW25hbWVdID0gdGhpcy5kaWFsb2dDb25maWdbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgbGV0IGFyZ3MgPSB7fTtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMucm91dGUuc25hcHNob3Q/LnBhcmFtcykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBhcmdzW2tleV0gPSB0aGlzLnJvdXRlLnNuYXBzaG90Py5wYXJhbXNba2V5XTtcclxuICAgICAgZGlhbG9nQ29uZmlnLmRhdGEgPSBhcmdzO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIGNvbnN0IGRsZyA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5FZGl0b3IsIGRpYWxvZ0NvbmZpZyk7XHJcbiAgICBkbGcuY29tcG9uZW50SW5zdGFuY2UuY2FsbGJhY2sgPSAoXHJcbiAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgIGxldCBkYXRhY29weSA9IHsgLi4uZGF0YSB9O1xyXG4gICAgICAgIGNvbnN0IGZpbGVGaWVsZHMgPSAodGhpcy5FZGl0b3IgYXMgYW55KS5maWxlRmllbGRzO1xyXG4gICAgICAgIGlmIChmaWxlRmllbGRzPy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgLy8gVW4gc2V1bCBjaGFtcCwgaWwgcGV1dCDDqnRyZSBtdWx0aXBsZVxyXG4gICAgICAgICAgY29uc3QgZmlsZUZpZWxkID0gZmlsZUZpZWxkc1swXTtcclxuICAgICAgICAgIGNvbnN0IGZpbGVzID0gZGF0YWNvcHlbZmlsZUZpZWxkXTtcclxuICAgICAgICAgIGRlbGV0ZSBkYXRhY29weVtmaWxlRmllbGRdO1xyXG4gICAgICAgICAgY29uc3QgYWxsb2JzOiB7IFtrZXk6IHN0cmluZ106IE9ic2VydmFibGU8YW55PjsgfSA9IHt9XHJcbiAgICAgICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmlsZS5zdGF0dXQgIT09ICdEb25lJyAmJiBmaWxlLnN0YXR1dCAhPT0gJ0Vycm9yJykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9icyA9IHRoaXMuX3NhdmVPYmooZGF0YWNvcHkpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAobmV3ZGF0YSA9PiB0aGlzLl9zYXZlRmlsZShmaWxlRmllbGQsIG5ld2RhdGEsIGZpbGUpXHJcbiAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICBhbGxvYnNbZmlsZS5uYW1lXSA9IG9icztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChhbGxvYnMpLnBpcGUodGFrZSgxKSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsZUZpZWxkcz8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgLy8gUGx1c2lldXJzIGNoYW1wcyBmaWxlLCBpbCBuZSBwZXV0IHkgYXZvaXIgcXUndW5lIHNldWwgZmljaGllciBwYXIgY2hhbXAuXHJcbiAgICAgICAgICBjb25zdCBmaWVsZHMgPSB7fTtcclxuICAgICAgICAgIGZpbGVGaWVsZHMuZm9yRWFjaChmZiA9PiB7XHJcbiAgICAgICAgICAgIGZpZWxkc1tmZl0gPSBkYXRhY29weVtmZl07XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhY29weVtmZl07XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zYXZlT2JqKGRhdGFjb3B5KS5waXBlKFxyXG4gICAgICAgICAgICAgIG1lcmdlTWFwKG5ld2RhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFsbG9iczogT2JzZXJ2YWJsZTxhbnk+W10gPSBbXTtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkcykuZm9yRWFjaCgoW2ZpbGVGaWVsZCwgZmlsZXNdOiBbc3RyaW5nLCBhbnlbXV0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGxvYnMucHVzaCh0aGlzLl9zYXZlRmlsZShmaWxlRmllbGQsIG5ld2RhdGEsIGZpbGVzWzBdKSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4oYWxsb2JzKTsgLy8gVE9ETyA6IFBBUyBURVJNSU5FLi4uIEpBTUFJUyBVVElMSVNFLi4uXHJcbiAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gRm9ybSBzYW5zIGZpY2hpZXJcclxuICAgICAgICAgIHJldHVybiB0aGlzLl9zYXZlT2JqKGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIERlbGV0ZU9iaihvYmopIHtcclxuICAgIGlmIChjb25maXJtKCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgb2JqZXQgPyAnKSkge1xyXG4gICAgICB0aGlzLmRlbGV0ZVJlcXVlc3QuYXBwbHkodGhpcy5nbG93d1NlcnZpY2UsIHRoaXMuZ2V0UHJpbWFyeUtleShvYmopKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgcCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpID0gdGhpcy5kYXRhU291cmNlLmRhdGEuaW5kZXhPZihvYmopO1xyXG4gICAgICAgICAgY29uc3QgdG1wID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICAgICAgICB0bXAuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0bXA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICBhbGVydChgVW5hYmxlIHRvIGRlbGV0ZSBPYmplY3QgJHtlcnJvci5zdGF0dXN9ICR7ZXJyb3Iuc3RhdHVzVGV4dH1cXG4ke2Vycm9yLk1lc3NhZ2V9XFxuJHtlcnJvci5lcnJvcn1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfdXBkYXRlT2JqKGN1cnJlbnQ6IGFueSwgbmV3RGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGxldCBhcmdzOiBvYmplY3RbXSA9IHRoaXMuZ2V0UHJpbWFyeUtleShjdXJyZW50KTsgYXJncy5wdXNoKG5ld0RhdGEpXHJcbiAgICB2YXIgc3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICAgIHRoaXMucHV0UmVxdWVzdC5hcHBseSh0aGlzLmdsb3d3U2VydmljZSwgYXJncykuc3Vic2NyaWJlKFxyXG4gICAgICBkYXRhID0+IHtcclxuICAgICAgICBjb25zdCBpID0gdGhpcy5kYXRhU291cmNlLmRhdGEuaW5kZXhPZihjdXJyZW50KTtcclxuICAgICAgICBjb25zdCB0bXAgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YTtcclxuICAgICAgICB0bXBbaV0gPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdG1wO1xyXG4gICAgICAgIHN1YmplY3QubmV4dChkYXRhKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgIGFsZXJ0KGBVbmFibGUgdG8gdXBkYXRlIE9iamVjdCAke2Vycm9yLnN0YXR1c30gJHtlcnJvci5zdGF0dXNUZXh0fVxcbiR7ZXJyb3IuTWVzc2FnZX1cXG4ke2Vycm9yLmVycm9yfWApO1xyXG4gICAgICAgIHN1YmplY3QuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHN1YmplY3Q7XHJcbiAgfVxyXG5cclxuXHJcbiAgRWRpdE9iaihvYmo6IFRPYmopIHtcclxuICAgIGNvbnN0IGRpYWxvZ0NvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcclxuICAgIGRpYWxvZ0NvbmZpZy5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xyXG4gICAgZGlhbG9nQ29uZmlnLmF1dG9Gb2N1cyA9IHRydWU7XHJcbiAgICBkaWFsb2dDb25maWcuY2xvc2VPbk5hdmlnYXRpb24gPSBmYWxzZTtcclxuICAgIGRpYWxvZ0NvbmZpZy5tYXhIZWlnaHQgPSBcIjk1JVwiO1xyXG4gICAgZGlhbG9nQ29uZmlnLm1heFdpZHRoID0gXCI5NSVcIjtcclxuICAgIGRpYWxvZ0NvbmZpZy5oZWlnaHQgPSBcIjEwMCVcIlxyXG5cclxuICAgIGlmICh0aGlzLmRpYWxvZ0NvbmZpZykge1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmRpYWxvZ0NvbmZpZykuZm9yRWFjaChcclxuICAgICAgICBuYW1lID0+IHtcclxuICAgICAgICAgIGRpYWxvZ0NvbmZpZ1tuYW1lXSA9IHRoaXMuZGlhbG9nQ29uZmlnW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGRpYWxvZ0NvbmZpZy5kYXRhID0gb2JqO1xyXG4gICAgY29uc3QgZGxnID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLkVkaXRvciwgZGlhbG9nQ29uZmlnKTtcclxuICAgIGRsZy5jb21wb25lbnRJbnN0YW5jZS5jYWxsYmFjayA9IChcclxuICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgbGV0IGRhdGFjb3B5ID0geyAuLi5kYXRhIH07XHJcbiAgICAgICAgY29uc3QgZmlsZUZpZWxkcyA9ICh0aGlzLkVkaXRvciBhcyBhbnkpLmZpbGVGaWVsZHM7XHJcbiAgICAgICAgaWYgKGZpbGVGaWVsZHM/Lmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAvLyBVbiBzZXVsIGNoYW1wLCBpbCBwZXV0IMOqdHJlIG11bHRpcGxlXHJcbiAgICAgICAgICBjb25zdCBmaWxlRmllbGQgPSBmaWxlRmllbGRzWzBdO1xyXG4gICAgICAgICAgY29uc3QgZmlsZXMgPSBkYXRhY29weVtmaWxlRmllbGRdO1xyXG4gICAgICAgICAgZGVsZXRlIGRhdGFjb3B5W2ZpbGVGaWVsZF07XHJcbiAgICAgICAgICBjb25zdCBhbGxvYnM6IHsgW2tleTogc3RyaW5nXTogT2JzZXJ2YWJsZTxhbnk+OyB9ID0ge31cclxuICAgICAgICAgIGZpbGVzLmZvckVhY2goZmlsZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaWxlLnN0YXR1dCAhPT0gJ0RvbmUnICYmIGZpbGUuc3RhdHV0ICE9PSAnRXJyb3InKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb2JzID0gdGhpcy5fdXBkYXRlT2JqKG9iaiwgZGF0YWNvcHkpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAobmV3ZGF0YSA9PiB0aGlzLl9zYXZlRmlsZShmaWxlRmllbGQsIG5ld2RhdGEsIGZpbGUpXHJcbiAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICBhbGxvYnNbZmlsZS5uYW1lXSA9IG9icztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChhbGxvYnMpLnBpcGUodGFrZSgxKSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsZUZpZWxkcz8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgLy8gUGx1c2lldXJzIGNoYW1wcyBmaWxlLCBpbCBuZSBwZXV0IHkgYXZvaXIgcXUndW5lIHNldWwgZmljaGllciBwYXIgY2hhbXAuXHJcbiAgICAgICAgICBjb25zdCBmaWVsZHMgPSB7fTtcclxuICAgICAgICAgIGZpbGVGaWVsZHMuZm9yRWFjaChmZiA9PiB7XHJcbiAgICAgICAgICAgIGZpZWxkc1tmZl0gPSBkYXRhY29weVtmZl07XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhY29weVtmZl07XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVPYmoob2JqLCBkYXRhY29weSkucGlwZShcclxuICAgICAgICAgICAgICBtZXJnZU1hcChuZXdkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBhbGxvYnM6IE9ic2VydmFibGU8YW55PltdID0gW107XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhmaWVsZHMpLmZvckVhY2goKFtmaWxlRmllbGQsIGZpbGVzXTogW3N0cmluZywgYW55W11dKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb2JzLnB1c2godGhpcy5fc2F2ZUZpbGUoZmlsZUZpZWxkLCBuZXdkYXRhLCBmaWxlc1swXSkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKGFsbG9icyk7IC8vIFRPRE8gOiBQQVMgVEVSTUlORS4uLiBKQU1BSVMgVVRJTElTRS4uLlxyXG4gICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIEZvcm0gc2FucyBmaWNoaWVyXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlT2JqKG9iaiwgZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdj5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImdsdy1oZWFkZXJcIj48L25nLWNvbnRlbnQ+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImRpc3BsYXlmb3JtXCI+XHJcbiAgICA8bWF0LWNhcmQ+XHJcbiAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyZXN1bHRFeGNlcHRpb25cIj5cclxuICAgICAgICAgICAgICAgIFVuYWJsZSB0byBxdWVyeSA6IHt7cmVzdWx0RXhjZXB0aW9ufX1cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImdsdy1zZWFyY2gtZm9ybVwiPjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgPCEtLTxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiU2VhcmNoRm9ybTsgaW5qZWN0b3I6IG9iakluamVjdG9yXCI+PC9uZy1jb250YWluZXI+LS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtYXhyb3dzXCIgW2Zvcm1Hcm91cF09XCJmb3JtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJNYXhSb3dcIiBmb3JtQ29udHJvbE5hbWU9XCJfTWF4Um93X1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbWF4cm93IG9mIG1heHJvd3NcIiBbdmFsdWVdPVwibWF4cm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1heHJvd1wiPnt7bWF4cm93fX0gb2JqZWN0czwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIW1heHJvd1wiPiBEZWZhdWx0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDxtYXQtY2FyZC1hY3Rpb25zPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIChjbGljayk9XCJvblNlYXJjaCgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICAgICAgU2VhcmNoXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuICAgIDwvbWF0LWNhcmQ+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImRpc3BsYXlyZXN1bHRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXo4XCIgKm5nSWY9XCJkYXRhU291cmNlOyBlbHNlIFNwaW5uZXJcIj5cclxuICAgICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBtYXRTb3J0PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImFjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS1wbHVzXCIgKGNsaWNrKT1cIkFkZE9iaigpXCIgKm5nSWY9XCJjYW5BZGRUaGlzKClcIj5cclxuICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgb2JqXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYWwgZmEtZXllXCIgW3JvdXRlckxpbmtdPVwiZGlzcGxheU9iakxpbmtUaGlzKG9iailcIiAqbmdJZj1cImNhbkRpc3BsYXlPYmpUaGlzKG9iailcIj5cclxuICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBbbmdDbGFzc109XCJhY3Rpb24uaWNvblwiIFtyb3V0ZXJMaW5rXT1cImFjdGlvbi5yb3V0ZXJMaW5rRmN0KG9iailcIiAqbmdJZj1cImFjdGlvbi5pY29uLmljb24gJiYgKCFhY3Rpb24uZGlzcGxheSB8fCBhY3Rpb24uZGlzcGxheShvYmosIGFjdGlvbi5uYW1lKSlcIj5cclxuICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBbbmdDbGFzc109XCJhY3Rpb24uaWNvblwiIFtyb3V0ZXJMaW5rXT1cImFjdGlvbi5yb3V0ZXJMaW5rRmN0KG9iailcIiAqbmdJZj1cIiFhY3Rpb24uaWNvbi5pY29uICYmICghYWN0aW9uLmRpc3BsYXkgfHwgYWN0aW9uLmRpc3BsYXkob2JqLCBhY3Rpb24ubmFtZSkpXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFsIGZhLXRyYXNoLWFsdFwiIChjbGljayk9XCJEZWxldGVPYmoob2JqKVwiICpuZ0lmPVwiY2FuRGVsZXRlVGhpcyhvYmopXCI+XHJcbiAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYWwgZmEtcGVuY2lsXCIgKGNsaWNrKT1cIkVkaXRPYmoob2JqKVwiICpuZ0lmPVwiY2FuRWRpdFRoaXMob2JqKVwiPlxyXG4gICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImdsdy1yZXN1bHQtdGFibGVcIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiY29sdW1uc1RvRGlzcGxheVwiPjwvdHI+XHJcbiAgICAgICAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgbXlSb3dEYXRhOyBjb2x1bW5zOiBjb2x1bW5zVG9EaXNwbGF5XCI+PC90cj5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDxtYXQtcGFnaW5hdG9yIHBhZ2VTaXplPVwiMTBcIj48L21hdC1wYWdpbmF0b3I+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjU3Bpbm5lcj5cclxuICAgICAgICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PiJdfQ==
524
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9kaXNwbGF5LW9iamVjdHMvZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9kaXNwbGF5LW9iamVjdHMvZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFVLFNBQVMsRUFBc0ssS0FBSyxFQUFlLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzUSxPQUFPLEVBQUUsV0FBVyxFQUEwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFnQixRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBbUQsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFOUUsT0FBTyxFQUFnQyxhQUFhLEVBQUUsVUFBVSxFQUFnQixNQUFNLHNCQUFzQixDQUFDO0FBRzdHLE9BQU8sRUFBYSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUl0RSxPQUFPLEVBQUUsR0FBRyxFQUFFLFVB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eENwQixpb0dBZ0VNOzJGRC9CTyx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCOzswQkFrRGxCLE1BQU07MkJBQUMsY0FBYzsyT0E1Q0gsTUFBTTtzQkFBcEMsWUFBWTt1QkFBQyxlQUFlO2dCQUNNLFVBQVU7c0JBQTVDLFlBQVk7dUJBQUMsbUJBQW1CO2dCQUNHLFlBQVk7c0JBQS9DLFlBQVk7dUJBQUMsb0JBQW9CO2dCQUNNLEtBQUs7c0JBQTVDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDTSxTQUFTO3NCQUFwRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0gsSUFBSTtzQkFBMUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUk1QixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlzcGxheU9iamVjdHNDb25maWd1cmF0aW9uIH0gZnJvbSAnLi8uLi9kaXNwbGF5LW9iamVjdHMtY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IFNlYXJjaEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZm9ybS9zZWFyY2gtZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZWZlcmVuY2UgfSBmcm9tICdAYW5ndWxhci9jb21waWxlci9zcmMvcmVuZGVyMy9yM19hc3QnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgT25Jbml0LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIEVsZW1lbnRSZWYsIERpcmVjdGl2ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEluamVjdG9yLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQWZ0ZXJDb250ZW50SW5pdCwgUXVlcnlMaXN0LCBDb250ZW50Q2hpbGRyZW4sIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgSW5wdXQsIFRlbXBsYXRlUmVmLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0Q29sdW1uRGVmLCBNYXRUYWJsZSwgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmb3JrSm9pbiwgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IsIG9ic2VydmFibGUsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2hlYWRlci9oZWFkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmVzdWx0VGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9yZXN1bHQtdGFibGUvcmVzdWx0LXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGludGVydmFsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBQYXJhbXMsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgRGF0YSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBHbG93d1NlcnZpY2UgfSBmcm9tICcuLi8uLi9TZXJ2aWNlcy9nbG93dy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZ2xvd3ctc2VjdXJpdHkvU2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciwgbWVyZ2VNYXAsIHRhcCwgZmlsdGVyLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbiB7XHJcbiAgaWNvbjogYW55O1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgcm91dGVyTGlua0ZjdD86IChvYmopID0+IHN0cmluZ1tdO1xyXG4gIGRpc3BsYXk/OiAob2JqKSA9PiBib29sZWFuO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdnbHctZGlzcGxheS1vYmplY3RzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kaXNwbGF5LW9iamVjdHMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlzcGxheU9iamVjdHNDb21wb25lbnQ8VE9iaj4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoSGVhZGVyQ29tcG9uZW50KSBoZWFkZXI6IEhlYWRlckNvbXBvbmVudDtcclxuICBAQ29udGVudENoaWxkKFNlYXJjaEZvcm1Db21wb25lbnQpIGZvcm1MYXlvdXQ6IFNlYXJjaEZvcm1Db21wb25lbnQ7XHJcbiAgQENvbnRlbnRDaGlsZChSZXN1bHRUYWJsZUNvbXBvbmVudCkgcmVzdWx0TGF5b3V0OiBSZXN1bHRUYWJsZUNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKE1hdFRhYmxlLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFibGU6IE1hdFRhYmxlPGFueT47XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiBmYWxzZSB9KSBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFNvcnQsIHsgc3RhdGljOiBmYWxzZSB9KSBzb3J0OiBNYXRTb3J0O1xyXG5cclxuICAvLyBhZnRlciB0aGUgPG5nLWNvbnRlbnQ+IGhhcyBiZWVuIGluaXRpYWxpemVkLCB0aGUgY29sdW1uIGRlZmluaXRpb25zIGFyZSBhdmFpbGFibGUuXHJcbiAgLy8gQWxsIHRoYXQncyBsZWZ0IGlzIHRvIGFkZCB0aGVtIHRvIHRoZSB0YWJsZSBvdXJzZWx2ZXM6XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbjogRGlzcGxheU9iamVjdHNDb25maWd1cmF0aW9uPFRPYmo+O1xyXG4gIEBJbnB1dCgpIGRpc3BsYXlPYmpMaW5rOiAob2JqOiBUT2JqLCBhY3Rpb24/OiBzdHJpbmcpID0+IChzdHJpbmcgfCBzdHJpbmdbXSk7XHJcbiAgQElucHV0KCkgY2FuRGlzcGxheU9iajogKCh1c2VyOiBhbnksIG9iajogVE9iaiwgYWN0aW9uPzogc3RyaW5nKSA9PiBib29sZWFuKSB8IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBjYW5FZGl0OiAoKHVzZXI6IGFueSwgb2JqOiBUT2JqKSA9PiBib29sZWFuKSB8IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGNhbkRlbGV0ZTogKCh1c2VyOiBhbnksIG9iajogVE9iaikgPT4gYm9vbGVhbikgfCBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjYW5BZGQ6ICgodXNlcjogYW55KSA9PiBib29sZWFuKSB8IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBTZWFyY2hGb3JtOiBhbnk7XHJcbiAgQElucHV0KCkgc2VhcmNoUmVxdWVzdDogKG9iaj86IFRPYmogfCBhbnkpID0+IE9ic2VydmFibGU8VE9ialtdPjtcclxuICBASW5wdXQoKSBwb3N0UmVxdWVzdDogKG9iaj86IFRPYmogfCBhbnkpID0+IE9ic2VydmFibGU8VE9iaj47XHJcbiAgQElucHV0KCkgZGVsZXRlUmVxdWVzdDogKG9iaj86IFRPYmogfCBhbnkpID0+IE9ic2VydmFibGU8VE9ialtdPjtcclxuICBASW5wdXQoKSBwdXRSZXF1ZXN0OiAob2JqPzogVE9iaiB8IGFueSkgPT4gT2JzZXJ2YWJsZTxUT2JqW10+O1xyXG4gIEBJbnB1dCgpIG1heHJvd3M6IHN0cmluZ1tdO1xyXG4gIEBJbnB1dCgpIG1hbmRhdG9yeVBhcmFtczogb2JqZWN0ID0ge307XHJcbiAgYWN0aW9ucyA9IFtdO1xyXG4gIEBJbnB1dCgpIGRpYWxvZ0NvbmZpZzogb2JqZWN0ID0ge307XHJcbiAgQElucHV0KCkgZmlsZUZpZWxkczogc3RyaW5nW107XHJcbiAgQElucHV0KCkgcGFyZW50OiBhbnk7XHJcblxyXG4gIGNvbHVtbnM6ICgpID0+IHN0cmluZ1tdO1xyXG4gIG9iamVjdE5hbWU6IHN0cmluZztcclxuICBwcmltYXJ5S2V5OiBzdHJpbmcgfCBzdHJpbmdbXTtcclxuICBFZGl0b3I6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgY29sdW1uc1RvRGlzcGxheSA9IFtdO1xyXG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxUT2JqPjtcclxuICBkaXNwbGF5Zm9ybSA9IHRydWU7XHJcbiAgZGlzcGxheXJlc3VsdCA9IGZhbHNlO1xyXG4gIHF1ZXJ5UGFyYW1zOiBhbnkgPSB7fTtcclxuICByZXN1bHRFeGNlcHRpb246IHN0cmluZztcclxuICBjdXJyZW50VXNlcjogYW55O1xyXG4gIGZvcm0yOiBGb3JtR3JvdXA7XHJcbiAgZGF0YTogb2JqZWN0O1xyXG4gIHJvdXRlUGFyYW1zOiBvYmplY3Q7XHJcbiAgZ2xvd3dTZXJ2aWNlOiBHbG93d1NlcnZpY2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoJ2dsb3d3U2VydmljZScpIGdsb3d3U2VydmljZTogR2xvd3dTZXJ2aWNlLCBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sIHByaXZhdGUgYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xyXG4gICAgdGhpcy5nbG93d1NlcnZpY2UgPSBnbG93d1NlcnZpY2U7XHJcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzO1xyXG4gICAgdGhpcy5jdXJyZW50VXNlciA9ICh0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5jdXJyZW50VXNlclZhbHVlIGFzIGFueSkuVXNlckluZm87XHJcbiAgICB0aGlzLmZvcm0yID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIF9NYXhSb3dfOiBbbnVsbF1cclxuICAgIH0pO1xyXG4gICAgLy9kZWJ1Z2dlcjtcclxuICAgIHRoaXMuZGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YTtcclxuICAgIHRoaXMucm91dGVQYXJhbXMgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcztcclxuICAgIHJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocm91dGVQYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLnJvdXRlUGFyYW1zID0gcm91dGVQYXJhbXM7XHJcbiAgICAgIGlmICh0aGlzLmRpc3BsYXlyZXN1bHQpIHRoaXMuU2VhcmNoKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cclxuICB9XHJcblxyXG4gIEluaXRSZXF1ZXN0KCkge1xyXG4gICAgaWYgKCF0aGlzLnNlYXJjaFJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5zZWFyY2hSZXF1ZXN0ID0gdGhpcy5nbG93d1NlcnZpY2VbYHNlYXJjaCR7dGhpcy5vYmplY3ROYW1lfWBdO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnBvc3RSZXF1ZXN0KSB7XHJcbiAgICAgIHRoaXMucG9zdFJlcXVlc3QgPSB0aGlzLmdsb3d3U2VydmljZVtgcG9zdCR7dGhpcy5vYmplY3ROYW1lfWBdO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmRlbGV0ZVJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5kZWxldGVSZXF1ZXN0ID0gdGhpcy5nbG93d1NlcnZpY2VbYGRlbGV0ZSR7dGhpcy5vYmplY3ROYW1lfWBdO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnB1dFJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5wdXRSZXF1ZXN0ID0gdGhpcy5nbG93d1NlcnZpY2VbYHB1dCR7dGhpcy5vYmplY3ROYW1lfWBdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMub2JqZWN0TmFtZSA9IHRoaXMucGFyZW50Lm9iamVjdE5hbWU7XHJcbiAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLnBhcmVudC5hY3Rpb25zO1xyXG4gICAgdGhpcy5wcmltYXJ5S2V5ID0gdGhpcy5wYXJlbnQucHJpbWFyeUtleTtcclxuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMucGFyZW50LmNvbHVtbnNUb0Rpc3BsYXk7XHJcbiAgICB0aGlzLkVkaXRvciA9IHRoaXMucGFyZW50LmVkaXRvcjtcclxuXHJcbiAgICB0aGlzLkluaXRSZXF1ZXN0KCk7XHJcbiAgICBpZiAodGhpcy5tYXhyb3dzPy5sZW5ndGggPiAwKSB7IHRoaXMuZm9ybS5hZGRDb250cm9sKFwiX01heFJvd19cIiwgbmV3IEZvcm1Db250cm9sKG51bGwpKTsgfVxyXG4gICAgLy9kZWJ1Z2dlcjtcclxuICAgIGNvbnNvbGUubG9nKGBJTklUIDogZm9ybUxheW91dDoke3RoaXMuZm9ybUxheW91dH0tZGlzcGxheWZvcm06JHt0aGlzLmRpc3BsYXlmb3JtfWApXHJcbiAgICBpZiAoIXRoaXMuZm9ybUxheW91dCAmJiB0aGlzLnJlc3VsdExheW91dCkge1xyXG4gICAgICB0aGlzLmRpc3BsYXlmb3JtID0gZmFsc2U7IHRoaXMuZGlzcGxheXJlc3VsdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdsb3d3U2VydmljZS5iYXNlUGF0aENoYW5nZS5zdWJzY3JpYmUobmV3VXJsID0+IHtcclxuICAgICAgY29uc29sZS5sb2coYGJhc2VQYXRoQ2hhbmdlICR7bmV3VXJsfTogZnJvbUxheW91dDoke3RoaXMuZm9ybUxheW91dH0tZGlzcGxheWZvcm06JHt0aGlzLmRpc3BsYXlmb3JtfWApO1xyXG4gICAgICB0aGlzLnBhcmVudC5mb3JtPy5yZXNldCgpO1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybUxheW91dCAmJiB0aGlzLnJlc3VsdExheW91dCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheWZvcm0gPSBmYWxzZTsgdGhpcy5kaXNwbGF5cmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kaXNwbGF5cmVzdWx0KSB7IHRoaXMuU2VhcmNoKCk7IH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZGlzcGxheXJlc3VsdCkgeyB0aGlzLlNlYXJjaCgpOyB9XHJcbiAgfVxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIEluaXQoZGF0YT86IERhdGEpIHtcclxuICAgIGlmICgoZGF0YSAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPiAwKSB8fCB0aGlzLmRpc3BsYXlyZXN1bHQpIHtcclxuICAgICAgdGhpcy5TZWFyY2goZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBTZWFyY2goZGF0YT86IERhdGEpIHtcclxuICAgIGNvbnNvbGUubG9nKGBTZWFyY2ggJHt0aGlzLmdsb3d3U2VydmljZS5JbnRlcm5hbEJhc2VQYXRofWApO1xyXG4gICAgaWYgKGRhdGEpIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICB0aGlzLmRpc3BsYXlyZXN1bHQgPSB0cnVlO1xyXG4gICAgdGhpcy5kaXNwbGF5Zm9ybSA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZXN1bHRFeGNlcHRpb24gPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLmRhdGEpIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5kYXRhKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlQYXJhbXNbbmFtZV0gPSB0aGlzLmRhdGFbbmFtZV07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucm91dGVQYXJhbXMpIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5yb3V0ZVBhcmFtcykuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zW25hbWVdID0gdGhpcy5yb3V0ZVBhcmFtc1tuYW1lXTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubWFuZGF0b3J5UGFyYW1zKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMubWFuZGF0b3J5UGFyYW1zKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlQYXJhbXNbbmFtZV0gPSB0aGlzLnF1ZXJ5UGFyYW1zW25hbWVdO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL2RlYnVnZ2VyO1xyXG4gICAgdGhpcy5zZWFyY2hSZXF1ZXN0LmNhbGwodGhpcy5nbG93d1NlcnZpY2UsIHRoaXMucXVlcnlQYXJhbXMpLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxUT2JqPihyKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuVXBkYXRlVGFibGUoKTtcclxuICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlyZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRpc3BsYXlmb3JtID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc3VsdEV4Y2VwdGlvbiA9IGVycm9yO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFuKG9iaikge1xyXG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBpbiBvYmopIHtcclxuICAgICAgaWYgKG9ialtwcm9wTmFtZV0gPT09IG51bGwgfHwgb2JqW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZGVsZXRlIG9ialtwcm9wTmFtZV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKCkge1xyXG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHt9O1xyXG4gICAgY29uc3Qgc2VhcmNoRGF0YSA9IHRoaXMucGFyZW50LmZvcm0udmFsdWUuc2VhcmNoRGF0YTtcclxuICAgIGlmIChzZWFyY2hEYXRhKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHNlYXJjaERhdGEpLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gc2VhcmNoRGF0YVtuYW1lXTtcclxuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zW25hbWVdID0gdmFsO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZvcm0yLnZhbHVlLl9NYXhSb3dfKSB7IHRoaXMucXVlcnlQYXJhbXMuX01heFJvd18gPSB0aGlzLmZvcm0yLnZhbHVlLl9NYXhSb3dfOyB9XHJcbiAgICB0aGlzLmNsZWFuKHRoaXMucXVlcnlQYXJhbXMpO1xyXG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoeyBmcm9tT2JqZWN0OiB0aGlzLnF1ZXJ5UGFyYW1zIH0pO1xyXG4gICAgY29uc3QgY3VycmVudHN0YXRlID0gdGhpcy5sb2NhdGlvbi5nZXRTdGF0ZSgpO1xyXG4gICAgdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5yb3V0ZXIudXJsLCBwYXJhbXMudG9TdHJpbmcoKSk7XHJcbiAgICB0aGlzLlNlYXJjaCgpO1xyXG5cclxuICB9XHJcblxyXG4gIFVwZGF0ZURhdGFTb3VyY2UocjogVE9ialtdKSB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPFRPYmo+KHIpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdGhpcy5VcGRhdGVUYWJsZSgpO1xyXG5cclxuICB9XHJcblxyXG4gIFVwZGF0ZVRhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICBpZiAoIXRoaXMudGFibGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnIXRoaXMudGFibGUnKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZXN1bHRMYXlvdXQuY29sdW1uRGVmcy5mb3JFYWNoKGNvbHVtbkRlZiA9PiB0aGlzLnRhYmxlLmFkZENvbHVtbkRlZihjb2x1bW5EZWYpKTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgICAgdGhpcy5jb2x1bW5zVG9EaXNwbGF5ID0gdGhpcy5jb2x1bW5zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5EaXNwbGF5T2JqVGhpcyhvYmosIGFjdGlvbj8pIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5kaXNwbGF5T2JqTGluaykgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbkRpc3BsYXlPYmogPT09ICdib29sZWFuJykgeyByZXR1cm4gdGhpcy5jYW5EaXNwbGF5T2JqOyB9XHJcbiAgICAgIHJldHVybiB0aGlzLmNhbkRpc3BsYXlPYmoodGhpcy5jdXJyZW50VXNlciwgb2JqLCBhY3Rpb24pO1xyXG4gICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgY29uc29sZS5sb2coZXgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgY2FuQWRkVGhpcygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jYW5BZGQpIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jYW5BZGQgPT09ICdib29sZWFuJykgeyByZXR1cm4gdGhpcy5jYW5BZGQ7IH1cclxuICAgICAgcmV0dXJuIHRoaXMuY2FuQWRkKHRoaXMuY3VycmVudFVzZXIpO1xyXG4gICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgY29uc29sZS5sb2coZXgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbkVkaXRUaGlzKG9iaikge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLmNhbkVkaXQpIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jYW5FZGl0ID09PSAnYm9vbGVhbicpIHsgcmV0dXJuIHRoaXMuY2FuRWRpdDsgfVxyXG4gICAgICByZXR1cm4gdGhpcy5jYW5FZGl0KHRoaXMuY3VycmVudFVzZXIsIG9iaik7XHJcbiAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuRGVsZXRlVGhpcyhvYmopIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jYW5EZWxldGUpIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jYW5EZWxldGUgPT09ICdib29sZWFuJykgeyByZXR1cm4gdGhpcy5jYW5EZWxldGU7IH1cclxuICAgICAgcmV0dXJuIHRoaXMuY2FuRGVsZXRlKHRoaXMuY3VycmVudFVzZXIsIG9iaik7XHJcbiAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc3BsYXlPYmpMaW5rVGhpcyhvYmosIGFjdGlvbj8pIHtcclxuICAgIGlmICghdGhpcy5kaXNwbGF5T2JqTGluaykgeyByZXR1cm4gbnVsbDsgfVxyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheU9iakxpbmsob2JqLCBhY3Rpb24pO1xyXG4gIH1cclxuXHJcblxyXG4gIGlzU3RyaW5nKHZhbHVlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZztcclxuICB9XHJcbiAgZ2V0UHJpbWFyeUtleShvYmo6IG9iamVjdCB8IFRPYmopOiBvYmplY3RbXSB7XHJcbiAgICBsZXQgcmVzID0gW107XHJcbiAgICBpZiAodGhpcy5pc1N0cmluZyh0aGlzLnByaW1hcnlLZXkpKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwic3RyaW5nXCIpO1xyXG4gICAgICByZXMucHVzaChvYmpbdGhpcy5wcmltYXJ5S2V5IGFzIHN0cmluZ10pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coXCJzdHJpbmdbXVwiKTtcclxuICAgICAgKHRoaXMucHJpbWFyeUtleSBhcyBzdHJpbmdbXSkuZm9yRWFjaChrZXkgPT4gcmVzLnB1c2gob2JqW2tleV0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBfc2F2ZU9iaihvYmo6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB2YXIgc3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICAgIHRoaXMucG9zdFJlcXVlc3QuY2FsbCh0aGlzLmdsb3d3U2VydmljZSwgb2JqKS5zdWJzY3JpYmUoXHJcbiAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRtcCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgICAgIHRtcC5wdXNoKGRhdGEpO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdG1wO1xyXG4gICAgICAgIHN1YmplY3QubmV4dChkYXRhKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgIGFsZXJ0KGBVbmFibGUgdG8gYWRkIE9iamVjdCAke2Vycm9yLnN0YXR1c30gJHtlcnJvci5zdGF0dXNUZXh0fVxcbiR7ZXJyb3IuTWVzc2FnZX1cXG4ke2Vycm9yLmVycm9yfWApO1xyXG4gICAgICAgIHN1YmplY3QuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHN1YmplY3Q7XHJcbiAgfVxyXG4gIF9zYXZlRmlsZShmaWxlRmllbGQ6IHN0cmluZywgb2JqOiBhbnksIGZpbGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZS5kYXRhKTtcclxuICAgIHJldHVybiB0aGlzLmdsb3d3U2VydmljZVtgcG9zdCR7dGhpcy5vYmplY3ROYW1lfSR7ZmlsZUZpZWxkfWBdLmNhbGwodGhpcy5nbG93d1NlcnZpY2UsIHRoaXMuZ2V0UHJpbWFyeUtleShvYmopLCBmb3JtRGF0YSkucGlwZShcclxuICAgICAgdGFwKChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcclxuICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcclxuICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzczpcclxuICAgICAgICAgICAgZmlsZS5wcm9ncmVzcyA9IE1hdGgucm91bmQoZXZlbnQubG9hZGVkICogMTAwIC8gKGV2ZW50LnRvdGFsID8/IDEpKTtcclxuICAgICAgICAgICAgZmlsZS5pblByb2dyZXNzID0gZmlsZS5wcm9ncmVzcyAhPT0gMTAwO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcclxuICAgICAgICAgICAgZmlsZS5wcm9ncmVzcyA9IDEwMDtcclxuICAgICAgICAgICAgZmlsZS5zdGF0dXMgPSBcIkRvbmVcIjtcclxuICAgICAgICAgICAgZmlsZS5pblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIGZpbHRlcigoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYGZpbHRlciAke2V2ZW50LnR5cGV9YCk7XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2VcclxuICAgICAgfSksXHJcbiAgICAgIG1hcCgoZXZlbnQ6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYG1hcCAke2V2ZW50LnR5cGV9YCk7XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50LmJvZHk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBmaWxlLmluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICBmaWxlLnN0YXR1cyA9IFwiRXJyb3JcIjtcclxuICAgICAgICBjb25zb2xlLmxvZyhgJHtmaWxlLmRhdGEubmFtZX0gdXBsb2FkIGZhaWxlZC5gKTtcclxuICAgICAgICAvL3N1YmplY3QuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIHJldHVybiBvZihgJHtmaWxlLmRhdGEubmFtZX0gdXBsb2FkIGZhaWxlZC5gKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBBZGRPYmooKSB7XHJcbiAgICBjb25zdCBkaWFsb2dDb25maWcgPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XHJcbiAgICBkaWFsb2dDb25maWcuZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuICAgIGRpYWxvZ0NvbmZpZy5hdXRvRm9jdXMgPSB0cnVlO1xyXG4gICAgZGlhbG9nQ29uZmlnLmNsb3NlT25OYXZpZ2F0aW9uID0gZmFsc2U7XHJcbiAgICBkaWFsb2dDb25maWcubWF4SGVpZ2h0ID0gXCI5NSVcIjtcclxuICAgIGRpYWxvZ0NvbmZpZy5tYXhXaWR0aCA9IFwiOTUlXCI7XHJcbiAgICBkaWFsb2dDb25maWcuaGVpZ2h0ID0gXCIxMDAlXCJcclxuICAgIGlmICh0aGlzLmRpYWxvZ0NvbmZpZykge1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmRpYWxvZ0NvbmZpZykuZm9yRWFjaChcclxuICAgICAgICBuYW1lID0+IHtcclxuICAgICAgICAgIGRpYWxvZ0NvbmZpZ1tuYW1lXSA9IHRoaXMuZGlhbG9nQ29uZmlnW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGxldCBhcmdzID0ge307XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLnJvdXRlLnNuYXBzaG90Py5wYXJhbXMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgYXJnc1trZXldID0gdGhpcy5yb3V0ZS5zbmFwc2hvdD8ucGFyYW1zW2tleV07XHJcbiAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhID0gYXJncztcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICBjb25zdCBkbGcgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuRWRpdG9yLCBkaWFsb2dDb25maWcpO1xyXG4gICAgZGxnLmNvbXBvbmVudEluc3RhbmNlLmNhbGxiYWNrID0gKFxyXG4gICAgICBkYXRhID0+IHtcclxuICAgICAgICBsZXQgZGF0YWNvcHkgPSB7IC4uLmRhdGEgfTtcclxuICAgICAgICBjb25zdCBmaWxlRmllbGRzID0gKHRoaXMuRWRpdG9yIGFzIGFueSkuZmlsZUZpZWxkcztcclxuICAgICAgICBpZiAoZmlsZUZpZWxkcz8ubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgIC8vIFVuIHNldWwgY2hhbXAsIGlsIHBldXQgw6p0cmUgbXVsdGlwbGVcclxuICAgICAgICAgIGNvbnN0IGZpbGVGaWVsZCA9IGZpbGVGaWVsZHNbMF07XHJcbiAgICAgICAgICBjb25zdCBmaWxlcyA9IGRhdGFjb3B5W2ZpbGVGaWVsZF07XHJcbiAgICAgICAgICBkZWxldGUgZGF0YWNvcHlbZmlsZUZpZWxkXTtcclxuICAgICAgICAgIGNvbnN0IGFsbG9iczogeyBba2V5OiBzdHJpbmddOiBPYnNlcnZhYmxlPGFueT47IH0gPSB7fVxyXG4gICAgICAgICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcclxuICAgICAgICAgICAgaWYgKGZpbGUuc3RhdHV0ICE9PSAnRG9uZScgJiYgZmlsZS5zdGF0dXQgIT09ICdFcnJvcicpIHtcclxuICAgICAgICAgICAgICBjb25zdCBvYnMgPSB0aGlzLl9zYXZlT2JqKGRhdGFjb3B5KS5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKG5ld2RhdGEgPT4gdGhpcy5fc2F2ZUZpbGUoZmlsZUZpZWxkLCBuZXdkYXRhLCBmaWxlKVxyXG4gICAgICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgICAgYWxsb2JzW2ZpbGUubmFtZV0gPSBvYnM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoYWxsb2JzKS5waXBlKHRha2UoMSkpO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKGZpbGVGaWVsZHM/Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIC8vIFBsdXNpZXVycyBjaGFtcHMgZmlsZSwgaWwgbmUgcGV1dCB5IGF2b2lyIHF1J3VuZSBzZXVsIGZpY2hpZXIgcGFyIGNoYW1wLlxyXG4gICAgICAgICAgY29uc3QgZmllbGRzID0ge307XHJcbiAgICAgICAgICBmaWxlRmllbGRzLmZvckVhY2goZmYgPT4ge1xyXG4gICAgICAgICAgICBmaWVsZHNbZmZdID0gZGF0YWNvcHlbZmZdO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0YWNvcHlbZmZdO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2F2ZU9iaihkYXRhY29weSkucGlwZShcclxuICAgICAgICAgICAgICBtZXJnZU1hcChuZXdkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBhbGxvYnM6IE9ic2VydmFibGU8YW55PltdID0gW107XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhmaWVsZHMpLmZvckVhY2goKFtmaWxlRmllbGQsIGZpbGVzXTogW3N0cmluZywgYW55W11dKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb2JzLnB1c2godGhpcy5fc2F2ZUZpbGUoZmlsZUZpZWxkLCBuZXdkYXRhLCBmaWxlc1swXSkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKGFsbG9icyk7IC8vIFRPRE8gOiBQQVMgVEVSTUlORS4uLiBKQU1BSVMgVVRJTElTRS4uLlxyXG4gICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIEZvcm0gc2FucyBmaWNoaWVyXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2F2ZU9iaihkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBEZWxldGVPYmoob2JqKSB7XHJcbiAgICBpZiAoY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIG9iamV0ID8gJykpIHtcclxuICAgICAgdGhpcy5kZWxldGVSZXF1ZXN0LmFwcGx5KHRoaXMuZ2xvd3dTZXJ2aWNlLCB0aGlzLmdldFByaW1hcnlLZXkob2JqKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgIHAgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmluZGV4T2Yob2JqKTtcclxuICAgICAgICAgIGNvbnN0IHRtcCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgICAgICAgdG1wLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdG1wO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgYWxlcnQoYFVuYWJsZSB0byBkZWxldGUgT2JqZWN0ICR7ZXJyb3Iuc3RhdHVzfSAke2Vycm9yLnN0YXR1c1RleHR9XFxuJHtlcnJvci5NZXNzYWdlfVxcbiR7ZXJyb3IuZXJyb3J9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX3VwZGF0ZU9iaihjdXJyZW50OiBhbnksIG5ld0RhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgYXJnczogb2JqZWN0W10gPSB0aGlzLmdldFByaW1hcnlLZXkoY3VycmVudCk7IGFyZ3MucHVzaChuZXdEYXRhKVxyXG4gICAgdmFyIHN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICB0aGlzLnB1dFJlcXVlc3QuYXBwbHkodGhpcy5nbG93d1NlcnZpY2UsIGFyZ3MpLnN1YnNjcmliZShcclxuICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgY29uc3QgaSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmluZGV4T2YoY3VycmVudCk7XHJcbiAgICAgICAgY29uc3QgdG1wID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICAgICAgdG1wW2ldID0gZGF0YTtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRtcDtcclxuICAgICAgICBzdWJqZWN0Lm5leHQoZGF0YSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgICBhbGVydChgVW5hYmxlIHRvIHVwZGF0ZSBPYmplY3QgJHtlcnJvci5zdGF0dXN9ICR7ZXJyb3Iuc3RhdHVzVGV4dH1cXG4ke2Vycm9yLk1lc3NhZ2V9XFxuJHtlcnJvci5lcnJvcn1gKTtcclxuICAgICAgICBzdWJqZWN0LmVycm9yKGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHJldHVybiBzdWJqZWN0O1xyXG4gIH1cclxuXHJcblxyXG4gIEVkaXRPYmoob2JqOiBUT2JqKSB7XHJcbiAgICBjb25zdCBkaWFsb2dDb25maWcgPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XHJcbiAgICBkaWFsb2dDb25maWcuZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuICAgIGRpYWxvZ0NvbmZpZy5hdXRvRm9jdXMgPSB0cnVlO1xyXG4gICAgZGlhbG9nQ29uZmlnLmNsb3NlT25OYXZpZ2F0aW9uID0gZmFsc2U7XHJcbiAgICBkaWFsb2dDb25maWcubWF4SGVpZ2h0ID0gXCI5NSVcIjtcclxuICAgIGRpYWxvZ0NvbmZpZy5tYXhXaWR0aCA9IFwiOTUlXCI7XHJcbiAgICBkaWFsb2dDb25maWcuaGVpZ2h0ID0gXCIxMDAlXCJcclxuXHJcbiAgICBpZiAodGhpcy5kaWFsb2dDb25maWcpIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5kaWFsb2dDb25maWcpLmZvckVhY2goXHJcbiAgICAgICAgbmFtZSA9PiB7XHJcbiAgICAgICAgICBkaWFsb2dDb25maWdbbmFtZV0gPSB0aGlzLmRpYWxvZ0NvbmZpZ1tuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBkaWFsb2dDb25maWcuZGF0YSA9IG9iajtcclxuICAgIGNvbnN0IGRsZyA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5FZGl0b3IsIGRpYWxvZ0NvbmZpZyk7XHJcbiAgICBkbGcuY29tcG9uZW50SW5zdGFuY2UuY2FsbGJhY2sgPSAoXHJcbiAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgIGxldCBkYXRhY29weSA9IHsgLi4uZGF0YSB9O1xyXG4gICAgICAgIGNvbnN0IGZpbGVGaWVsZHMgPSAodGhpcy5FZGl0b3IgYXMgYW55KS5maWxlRmllbGRzO1xyXG4gICAgICAgIGlmIChmaWxlRmllbGRzPy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgLy8gVW4gc2V1bCBjaGFtcCwgaWwgcGV1dCDDqnRyZSBtdWx0aXBsZVxyXG4gICAgICAgICAgY29uc3QgZmlsZUZpZWxkID0gZmlsZUZpZWxkc1swXTtcclxuICAgICAgICAgIGNvbnN0IGZpbGVzID0gZGF0YWNvcHlbZmlsZUZpZWxkXTtcclxuICAgICAgICAgIGRlbGV0ZSBkYXRhY29weVtmaWxlRmllbGRdO1xyXG4gICAgICAgICAgY29uc3QgYWxsb2JzOiB7IFtrZXk6IHN0cmluZ106IE9ic2VydmFibGU8YW55PjsgfSA9IHt9XHJcbiAgICAgICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmlsZS5zdGF0dXQgIT09ICdEb25lJyAmJiBmaWxlLnN0YXR1dCAhPT0gJ0Vycm9yJykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9icyA9IHRoaXMuX3VwZGF0ZU9iaihvYmosIGRhdGFjb3B5KS5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKG5ld2RhdGEgPT4gdGhpcy5fc2F2ZUZpbGUoZmlsZUZpZWxkLCBuZXdkYXRhLCBmaWxlKVxyXG4gICAgICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgICAgYWxsb2JzW2ZpbGUubmFtZV0gPSBvYnM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoYWxsb2JzKS5waXBlKHRha2UoMSkpO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKGZpbGVGaWVsZHM/Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIC8vIFBsdXNpZXVycyBjaGFtcHMgZmlsZSwgaWwgbmUgcGV1dCB5IGF2b2lyIHF1J3VuZSBzZXVsIGZpY2hpZXIgcGFyIGNoYW1wLlxyXG4gICAgICAgICAgY29uc3QgZmllbGRzID0ge307XHJcbiAgICAgICAgICBmaWxlRmllbGRzLmZvckVhY2goZmYgPT4ge1xyXG4gICAgICAgICAgICBmaWVsZHNbZmZdID0gZGF0YWNvcHlbZmZdO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0YWNvcHlbZmZdO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlT2JqKG9iaiwgZGF0YWNvcHkpLnBpcGUoXHJcbiAgICAgICAgICAgICAgbWVyZ2VNYXAobmV3ZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWxsb2JzOiBPYnNlcnZhYmxlPGFueT5bXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzKS5mb3JFYWNoKChbZmlsZUZpZWxkLCBmaWxlc106IFtzdHJpbmcsIGFueVtdXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFsbG9icy5wdXNoKHRoaXMuX3NhdmVGaWxlKGZpbGVGaWVsZCwgbmV3ZGF0YSwgZmlsZXNbMF0pKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JrSm9pbihhbGxvYnMpOyAvLyBUT0RPIDogUEFTIFRFUk1JTkUuLi4gSkFNQUlTIFVUSUxJU0UuLi5cclxuICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBGb3JtIHNhbnMgZmljaGllclxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZU9iaihvYmosIGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXY+XHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJnbHctaGVhZGVyXCI+PC9uZy1jb250ZW50PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJkaXNwbGF5Zm9ybVwiPlxyXG4gICAgPG1hdC1jYXJkPlxyXG4gICAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicmVzdWx0RXhjZXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICBVbmFibGUgdG8gcXVlcnkgOiB7e3Jlc3VsdEV4Y2VwdGlvbn19XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJnbHctc2VhcmNoLWZvcm1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgIDwhLS08bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cIlNlYXJjaEZvcm07IGluamVjdG9yOiBvYmpJbmplY3RvclwiPjwvbmctY29udGFpbmVyPi0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibWF4cm93c1wiIFtmb3JtR3JvdXBdPVwiZm9ybTJcIj5cclxuICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwiTWF4Um93XCIgZm9ybUNvbnRyb2xOYW1lPVwiX01heFJvd19cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1heHJvdyBvZiBtYXhyb3dzXCIgW3ZhbHVlXT1cIm1heHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtYXhyb3dcIj57e21heHJvd319IG9iamVjdHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFtYXhyb3dcIj4gRGVmYXVsdDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICA8bWF0LWNhcmQtYWN0aW9ucz5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiAoY2xpY2spPVwib25TZWFyY2goKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgIFNlYXJjaFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcbiAgICA8L21hdC1jYXJkPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJkaXNwbGF5cmVzdWx0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OFwiICpuZ0lmPVwiZGF0YVNvdXJjZTsgZWxzZSBTcGlubmVyXCI+XHJcbiAgICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgbWF0U29ydD5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYWwgZmEtcGx1c1wiIChjbGljayk9XCJBZGRPYmooKVwiICpuZ0lmPVwiY2FuQWRkVGhpcygpXCI+XHJcbiAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IG9ialwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFsIGZhLWV5ZVwiIFtyb3V0ZXJMaW5rXT1cImRpc3BsYXlPYmpMaW5rVGhpcyhvYmopXCIgKm5nSWY9XCJjYW5EaXNwbGF5T2JqVGhpcyhvYmopXCI+XHJcbiAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW25nQ2xhc3NdPVwiYWN0aW9uLmljb25cIiBbcm91dGVyTGlua109XCJhY3Rpb24ucm91dGVyTGlua0ZjdChvYmopXCIgKm5nSWY9XCJhY3Rpb24uaWNvbi5pY29uICYmICghYWN0aW9uLmRpc3BsYXkgfHwgYWN0aW9uLmRpc3BsYXkob2JqLCBhY3Rpb24ubmFtZSkpXCI+XHJcbiAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW25nQ2xhc3NdPVwiYWN0aW9uLmljb25cIiBbcm91dGVyTGlua109XCJhY3Rpb24ucm91dGVyTGlua0ZjdChvYmopXCIgKm5nSWY9XCIhYWN0aW9uLmljb24uaWNvbiAmJiAoIWFjdGlvbi5kaXNwbGF5IHx8IGFjdGlvbi5kaXNwbGF5KG9iaiwgYWN0aW9uLm5hbWUpKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS10cmFzaC1hbHRcIiAoY2xpY2spPVwiRGVsZXRlT2JqKG9iailcIiAqbmdJZj1cImNhbkRlbGV0ZVRoaXMob2JqKVwiPlxyXG4gICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFsIGZhLXBlbmNpbFwiIChjbGljayk9XCJFZGl0T2JqKG9iailcIiAqbmdJZj1cImNhbkVkaXRUaGlzKG9iailcIj5cclxuICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJnbHctcmVzdWx0LXRhYmxlXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtbnNUb0Rpc3BsYXlcIj48L3RyPlxyXG4gICAgICAgICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IG15Um93RGF0YTsgY29sdW1uczogY29sdW1uc1RvRGlzcGxheVwiPjwvdHI+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8bWF0LXBhZ2luYXRvciBwYWdlU2l6ZT1cIjEwXCI+PC9tYXQtcGFnaW5hdG9yPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctdGVtcGxhdGUgI1NwaW5uZXI+XHJcbiAgICAgICAgPG1hdC1zcGlubmVyPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L2Rpdj4iXX0=