application-sidebar 1.0.30 → 1.0.32

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.
@@ -501,7 +501,7 @@ export class ApplicationSidebarComponent {
501
501
  ngOnChanges() {
502
502
  // this.showMenuIcon();
503
503
  this.checkApplicationDetails(this.applicationDetails);
504
- if (this.applicationDetails.applicationId == 'ads_amazon_dsp' && !this.RestApiService.isStructerApiCalled) {
504
+ if (this.applicationDetails.applicationId == 'ads_amazon_dsp') {
505
505
  this.getStructureAPISupportData(this.applicationDetails.currentAccount);
506
506
  }
507
507
  }
@@ -569,4 +569,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
569
569
  type: ViewChild,
570
570
  args: ['navMenusComponent']
571
571
  }] } });
572
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tc2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcHBsaWNhdGlvbi1zaWRlYmFyL3NyYy9saWIvYXBwbGljYXRpb24tc2lkZWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcHBsaWNhdGlvbi1zaWRlYmFyL3NyYy9saWIvYXBwbGljYXRpb24tc2lkZWJhci50ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFlLGVBQWUsRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBMkIsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTcEUsTUFBTSxPQUFPLDJCQUEyQjtJQXlCN0I7SUFDQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBNUJELGtCQUFrQixDQUFhO0lBRS9CLE9BQU8sQ0FBYTtJQUVLLFNBQVMsQ0FBZ0M7SUFD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LElBQUksVUFBVSxDQUFDLE9BQU8sS0FBSyxjQUFjLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksVUFBVSxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxFQUFFO3dCQUNwSCxPQUFPLElBQUksQ0FBQztxQkFDYjtvQkFBQSxDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFBO2FBQ0g7WUFDRCxPQUFPLENBQUMsWUFBWSxJQUFJLElBQUksSUFBSSxDQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLENBQUMsQ0FBQztTQUMzSjtJQUNMLENBQUM7MkhBMWpCVSwyQkFBMkI7K0dBQTNCLDJCQUEyQiw4S0FPM0IsbUJBQW1CLHdLQURoQixrQkFBa0IscUVDekJsQyxnMFlBaU1VOzs0RkQ5S0csMkJBQTJCO2tCQU52QyxTQUFTOytCQUNFLHdCQUF3QjsrUEFPekIsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFNEIsU0FBUztzQkFBMUMsWUFBWTt1QkFBQyxrQkFBa0I7Z0JBQ0EsSUFBSTtzQkFBbkMsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0UsaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlckV2ZW50LCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIElucHV0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25TaWRlYmFyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXBwbGljYXRpb24tc2lkZWJhci5zZXJ2aWNlJ1xuaW1wb3J0IHsgTWF0U2lkZW5hdiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xuaW1wb3J0IHsgYXBwRGV0YWlscyB9IGZyb20gJy4vYXBwLWRldGFpbHMnXG5pbXBvcnQgeyBPZmZzZXRUb3BEaXJlY3RpdmUsIFNjcm9sbGFibGVEaXJlY3RpdmUgfSBmcm9tICcuL25hdi1tZW51LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSZXN0QXBpU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcmVzdC1hcGkuc2VydmljZXMnXG5pbXBvcnQgeyBOYXZNZW51c0NvbXBvbmVudCB9IGZyb20gJy4vbmF2LW1lbnVzL25hdi1tZW51cy5jb21wb25lbnQnXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZS1zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBHTE9CQUxfTElTVCB9IGZyb20gJy4vbmF2bWVudTEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsbmMtbmF2aWdhdGlvbi1zaWRlYmFyJyxcbiAgdGVtcGxhdGVVcmw6Jy4vYXBwbGljYXRpb24tc2lkZWJhci50ZW1wbGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOlsnLi9hcHBsaWNhdGlvbi1zaWRlYmFyLnNjc3MnLCdhcHBsaWNhdGlvbi1zaWRlYmFyLnRoZW1lLnNjc3MnXSxcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25TaWRlYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGFwcGxpY2F0aW9uRGV0YWlscyA6YXBwRGV0YWlscztcblxuICBASW5wdXQoKSBzaWRlbmF2OiBNYXRTaWRlbmF2O1xuXG4gIEBWaWV3Q2hpbGRyZW4oT2Zmc2V0VG9wRGlyZWN0aXZlKSBsaXN0SXRlbXM6IFF1ZXJ5TGlzdDxPZmZzZXRUb3BEaXJlY3RpdmU+O1xuICBAVmlld0NoaWxkKFNjcm9sbGFibGVEaXJlY3RpdmUpIGxpc3Q6IFNjcm9sbGFibGVEaXJlY3RpdmU7XG4gIEBWaWV3Q2hpbGQoJ25hdk1lbnVzQ29tcG9uZW50JykgbmF2TWVudXNDb21wb25lbnQ6TmF2TWVudXNDb21wb25lbnQ7XG5cbiAgYWNjb3VudE5hbWU6IGFueTtcbiAgYWN0aXZlUGFuZWw6IGFueTtcbiAgbmF2Q29sbGFwc2VkOmJvb2xlYW4gPSBmYWxzZTtcbiAgb2xkTGlzdEl0ZW1zOiBRdWVyeUxpc3Q8T2Zmc2V0VG9wRGlyZWN0aXZlPjtcbiAgaXNBZG1pblJvbGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWRtaW5Sb2xlcyA9IFsnU1VQRVJfQURNSU4nLCdTVVBFUl9BRE1JTl9SRUFEX09OTFknXTtcbiAgY3VycmVudEFwcDogYW55O1xuICBzaWRlTmF2U3RhdHVzU3Vic2NyaXB0aW9uOiBhbnk7XG4gIG15T2JzZXJ2ZXI6IGFueTtcbiAgZXhwYW5kR2xvYmFsU2V0dGluZ3M6IGFueSA9IGZhbHNlO1xuICBpbkNvbnRleHRJbnNpZ2h0c1dMQXBwOiBib29sZWFuO1xuXG4gIC8vIGlzR2xvYmFsU2V0dGluZ3NNZW51QWN0aXZlOmJvb2xlYW4gPSBmYWxzZVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBuYXZpZ2F0aW9uOiBBcHBsaWNhdGlvblNpZGViYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBSZXN0QXBpU2VydmljZTogUmVzdEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb29raWU6IENvb2tpZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvbjpUcmFuc2xhdGlvblNlcnZpY2VcbiAgICApIHtcbiAgICAgIHRoaXMubXlPYnNlcnZlciA9IHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICAgIHRoaXMuZXhwYW5kR2xvYmFsU2V0dGluZ3MgPSB0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpLmV4dHJhcy5zdGF0ZSAmJiB0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpLmV4dHJhcy5zdGF0ZS5leHBhbmRQYW5lbDsgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHBhbmVsT3BlblN0YXRlID0gZmFsc2U7XG4gIG1haW5QYW5lbE9wZW5TdGF0ZSA9IGZhbHNlO1xuICBwdWJsaWMgcHJldkFjdGl2ZUhlYWRNZW51O1xuICBwdWJsaWMgdG9EaXNwbGF5QXBwbGljYXRpb25zID0gW107XG4gIHB1YmxpYyB0b0Rpc3BsYXlHbG9iYWxTZXR0aW5nc01lbnU6IGFueVtdO1xuICBwdWJsaWMgZXJyb3JNc2c6c3RyaW5nO1xuXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmKHRoaXMuYXBwbGljYXRpb25EZXRhaWxzWyd1c2VySW5mbyddKXtcbiAgICAgIGxldCB1c2VyUm9sZSA9IHRoaXMuYXBwbGljYXRpb25EZXRhaWxzWyd1c2VySW5mbyddLnJvbGU7XG4gICAgICB0aGlzLmlzQWRtaW5Sb2xlID0gdGhpcy5hZG1pblJvbGVzLmluZGV4T2YodXNlclJvbGUpID4gLTEgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2FsY3VsYXRlTGVmdG5hdlN0YXR1cygpO1xuICAgIC8vIGNvbnN0IGNvbmZpZ3MgPSB0aGlzLnJvdXRlci5jb25maWc7XG4gICAgLy8gZm9yKGxldCBjb25maWcgb2YgY29uZmlncyl7XG4gICAgLy8gICBpZihjb25maWcuY2hpbGRyZW4pe1xuICAgIC8vICAgICBmb3IobGV0IGNoaWxkIG9mIGNvbmZpZy5jaGlsZHJlbil7XG4gICAgLy8gICAgICAgY2hpbGQuY2FuQWN0aXZhdGUgPSBbQ2FuTG9hZEd1YXJkXVxuICAgIC8vICAgICB9XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIC8vIHRoaXMucm91dGVyLnJlc2V0Q29uZmlnKGNvbmZpZ3MpO1xuICAgIHRoaXMuY2hlY2tBcHBsaWNhdGlvbkRldGFpbHModGhpcy5hcHBsaWNhdGlvbkRldGFpbHMpO1xuICB9XG5cbiAgY2FsY3VsYXRlTGVmdG5hdlN0YXR1cygpe1xuICAgIGlmKHRoaXMuc2lkZW5hdiAmJiB0aGlzLnNpZGVuYXYub3BlbmVkQ2hhbmdlKXtcbiAgICAgIGxldCBzdGF0dXMgICAgICAgICAgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdsZWZ0TmF2T3BlblN0YXR1cycpO1xuICAgICAgdGhpcy5uYXZDb2xsYXBzZWQgICA9IHN0YXR1cyAmJiBzdGF0dXMgPT0gJ2ZhbHNlJyA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgIHRoaXMuc2lkZW5hdi5vcGVuZWQgPSBzdGF0dXMgJiYgc3RhdHVzID09ICdmYWxzZScgPyBmYWxzZSA6IHRydWU7XG4gICAgICB0aGlzLnNpZGVOYXZTdGF0dXNTdWJzY3JpcHRpb24gPSB0aGlzLnNpZGVuYXYub3BlbmVkQ2hhbmdlLnN1YnNjcmliZSgoc3RhdHVzKT0+e1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdsZWZ0TmF2T3BlblN0YXR1cycsSlNPTi5zdHJpbmdpZnkoc3RhdHVzKSk7XG4gICAgICAgIHRoaXMubmF2Q29sbGFwc2VkICAgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMuc2lkZW5hdi5vcGVuZWQgPSBzdGF0dXM7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgIGNoZWNrQXBwbGljYXRpb25EZXRhaWxzKGFwcGxpY2F0aW9uRGV0YWlsczogYXBwRGV0YWlscykge1xuICAgIHRoaXMuZXJyb3JNc2cgPSAnJztcbiAgICBpZihhcHBsaWNhdGlvbkRldGFpbHMuYXBwbGljYXRpb25JZCAhPSAnYWRzX2FtYXpvbl9kc3AnKXtcbiAgICAgIHRoaXMuY3JlYXRlQXBwRGV0YWlscyhhcHBsaWNhdGlvbkRldGFpbHMpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNyZWF0ZUFwcERldGFpbHMoYXBwbGljYXRpb25EZXRhaWxzOiBhcHBEZXRhaWxzKXtcbiAgICB0aGlzLmNyZWF0ZU5hdmlnYXRpb25TaWRlQmFyKHRoaXMuYXBwbGljYXRpb25EZXRhaWxzKTtcbiAgICAvLyBpZih0aGlzLmFwcGxpY2F0aW9uRGV0YWlscy5jdXJyZW50QWNjb3VudCl7XG4gICAgLy8gICB0aGlzLmdldEFjdGl2ZVJlY29Db3VudCh0aGlzLmFwcGxpY2F0aW9uRGV0YWlscy5jdXJyZW50QWNjb3VudCk7XG4gICAgLy8gfVxuICB9XG5cbiAgcHVibGljIGNyZWF0ZU5hdmlnYXRpb25TaWRlQmFyKGFwcGxpY2F0aW9uRGV0YWlsczogYXBwRGV0YWlscykge1xuICAgIHRoaXMuUmVzdEFwaVNlcnZpY2UuZ2V0anNvbk1lbnVsaXN0cyhhcHBsaWNhdGlvbkRldGFpbHMpLnN1YnNjcmliZSgobWVudWxpc3RzOiBhbnkpID0+IHtcbiAgICAgIC8vIGxldCBtZW51bGlzdHMgPSBHTE9CQUxfTElTVFxuICAgICAgdGhpcy50b0Rpc3BsYXlBcHBsaWNhdGlvbnMgPSB0aGlzLm5hdmlnYXRpb24uZ2V0TWVudUxpc3QoYXBwbGljYXRpb25EZXRhaWxzLCBtZW51bGlzdHMpO1xuICAgICAgdGhpcy50b0Rpc3BsYXlHbG9iYWxTZXR0aW5nc01lbnUgPSB0aGlzLm5hdmlnYXRpb24uZ2V0R2xvYmFsU2V0dGluZ3NNZW51KGFwcGxpY2F0aW9uRGV0YWlscywgbWVudWxpc3RzKTtcbiAgICAgIHRoaXMuZXhwYW5kQ3VycmVudE1lbnVPbmx5KGFwcGxpY2F0aW9uRGV0YWlscywgZmFsc2UpO1xuICAgICAgdGhpcy5leHBhbmRDaGlsZE1lbnVPbmx5KHRoaXMudG9EaXNwbGF5R2xvYmFsU2V0dGluZ3NNZW51KTtcbiAgICAgIHRoaXMuY2hlY2tGb3JSZWRpcmVjdGlvbih0aGlzLnRvRGlzcGxheUFwcGxpY2F0aW9ucyx0aGlzLnRvRGlzcGxheUdsb2JhbFNldHRpbmdzTWVudSxhcHBsaWNhdGlvbkRldGFpbHMpO1xuICAgICAgY29uc29sZS5sb2codGhpcy50b0Rpc3BsYXlBcHBsaWNhdGlvbnMgLCB0aGlzLnRvRGlzcGxheUdsb2JhbFNldHRpbmdzTWVudSk7XG4gICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlTWVudSgpO1xuICAgICAgdGhpcy5zZXRNZW51TGlzdChhcHBsaWNhdGlvbkRldGFpbHMuYXBwbGljYXRpb25JZCx0aGlzLnRvRGlzcGxheUFwcGxpY2F0aW9ucyk7XG4gICAgICB0aGlzLmluQ29udGV4dEluc2lnaHRzV0xBcHAgPSB0aGlzLmhpZGVNZW51Rm9yV0woKTtcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRNZW51TGlzdChhcHBJZCxtZW51TGlzdCl7XG4gICAgdmFyIGFwcERldGFpbHM6YW55ID0gbmV3IE9iamVjdCgpO1xuICAgIGFwcERldGFpbHMuYXBwaWNhdGlvbklkID0gYXBwSWQ7XG4gICAgYXBwRGV0YWlscy5tZW51TGlzdCA9IG1lbnVMaXN0LmZpbmQoKG1lbnUpPT57IHJldHVybiBtZW51LmlkID09IGFwcElkfSlcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwRGV0YWlscycsSlNPTi5zdHJpbmdpZnkoYXBwRGV0YWlscykpO1xuICB9XG5cbiAgcHVibGljIG1lbnVDbGlja2VkKG9iajogYW55KSB7XG4gICAgdGhpcy5leHBhbmRDdXJyZW50TWVudU9ubHkodGhpcy5hcHBsaWNhdGlvbkRldGFpbHMsIHRydWUpO1xuICAgIHRoaXMuZXhwYW5kQ2hpbGRNZW51T25seSh0aGlzLnRvRGlzcGxheUdsb2JhbFNldHRpbmdzTWVudSk7XG4gICAgaWYob2JqKSB7XG4gICAgICB0aGlzLmFjdGl2ZVBhbmVsID0gb2JqLmFjdGl2ZVBhbmVsO1xuICAgIH1cbiAgfVxuICBcbiAgcHVibGljIGV4cGFuZENoaWxkTWVudU9ubHkodG9EaXNwbGF5R2xvYmFsU2V0dGluZ3NNZW51KSB7XG4gICAgc2V0VGltZW91dCgoKT0+e1xuICAgICAgIC8vIHRoaXMuaXNHbG9iYWxTZXR0aW5nc01lbnVBY3RpdmUgPSBmYWxzZTtcbiAgICAgIGxldCB1cmxBcnJheSA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnLycpO1xuICAgICAgbGV0IHJvdXRlVXJsID0gdXJsQXJyYXlbdXJsQXJyYXkubGVuZ3RoIC0gMV07XG4gICAgICBsZXQgY3VycmVudFJvdXRlID0gcm91dGVVcmwuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgaWYodG9EaXNwbGF5R2xvYmFsU2V0dGluZ3NNZW51ICYmIHRvRGlzcGxheUdsb2JhbFNldHRpbmdzTWVudS5sZW5ndGgpIHtcbiAgICAgICAgICB0b0Rpc3BsYXlHbG9iYWxTZXR0aW5nc01lbnVbMF0ucGFuZWxPcGVuU3RhdGUgPSBmYWxzZTtcbiAgICAgICAgaWYodG9EaXNwbGF5R2xvYmFsU2V0dGluZ3NNZW51WzBdLmNoaWxkcmVuICYmIHRvRGlzcGxheUdsb2JhbFNldHRpbmdzTWVudVswXS5jaGlsZHJlbi5sZW5ndGgpe1xuICAgICAgICAgIGZvcihsZXQgbWVudSBvZiB0b0Rpc3BsYXlHbG9iYWxTZXR0aW5nc01lbnVbMF0uY2hpbGRyZW4pe1xuICAgICAgICAgICAgaWYobWVudS5yb3V0ZT09Y3VycmVudFJvdXRlKXtcbiAgICAgICAgICAgICAgdG9EaXNwbGF5R2xvYmFsU2V0dGluZ3NNZW51WzBdLnBhbmVsT3BlblN0YXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgLy8gdGhpcy5pc0dsb2JhbFNldHRpbmdzTWVudUFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDEwMClcbiAgIFxuICB9XG5cbiAgcHVibGljIGV4cGFuZEN1cnJlbnRNZW51T25seShhcHBsaWNhdGlvbkRldGFpbHMsIG9uTWVudUNsaWNrZWQpIHtcbiAgICBmb3IobGV0IGhlYWRNZW51IG9mIHRoaXMudG9EaXNwbGF5QXBwbGljYXRpb25zKSB7XG4gICAgICBoZWFkTWVudS5wYW5lbE9wZW5TdGF0ZSA9IGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICBmb3IobGV0IGhlYWRNZW51IG9mIHRoaXMudG9EaXNwbGF5QXBwbGljYXRpb25zKSB7XG4gICAgICAgIGlmKGhlYWRNZW51LmlkID09IGFwcGxpY2F0aW9uRGV0YWlscy5hcHBsaWNhdGlvbklkKSB7XG4gICAgICAgICAgaGVhZE1lbnUucGFuZWxPcGVuU3RhdGUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuY3VycmVudEFwcCA9IGhlYWRNZW51O1xuICAgICAgICB9IGVsc2UgaWYoaGVhZE1lbnUuaWQuaW5kZXhPZihhcHBsaWNhdGlvbkRldGFpbHMuYXBwbGljYXRpb25JZCkgPiAtMSkge1xuICAgICAgICAgIGhlYWRNZW51LnBhbmVsT3BlblN0YXRlID0gZmFsc2U7XG5cbiAgICAgICAgICBsZXQgdXJsQXJyYXkgPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoJy8nKTtcbiAgICAgICAgICBsZXQgcm91dGVVcmwgPSB1cmxBcnJheVt1cmxBcnJheS5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZigoaGVhZE1lbnUuaWQ9PSBcImFkc19hbWF6b25fc2VsbGVyX3NlbGxlcl9hbmFseXRpY3NcIiB8fCBoZWFkTWVudS5pZD09IFwiYWRzX2FtYXpvbl9zZWxsZXJfdmVuZG9yX2FuYWx5dGljc1wiKSAmJiB1cmxBcnJheS5sZW5ndGggPjIpe1xuICAgICAgICAgICAgdXJsQXJyYXk9IHVybEFycmF5LnNsaWNlKHVybEFycmF5Lmxlbmd0aC0yKTtcbiAgICAgICAgICAgIHJvdXRlVXJsPSB1cmxBcnJheS5qb2luKCcvJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBjdXJyZW50Um91dGUgPSByb3V0ZVVybC5zcGxpdCgnPycpWzBdO1xuICAgICAgICAgIGlmKGhlYWRNZW51LmlkID09IFwiYWRzX2FtYXpvbl9jb250ZW50X2NvbnRlbnRfYW5hbHl0aWNzXCIgJiYgdGhpcy5uYXZpZ2F0aW9uLmNvbnRlbnRBcHBSb3V0ZXMuaW5kZXhPZihjdXJyZW50Um91dGUpPi0xICkge1xuICAgICAgICAgICAgaGVhZE1lbnUucGFuZWxPcGVuU3RhdGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXBwID0gaGVhZE1lbnU7XG4gICAgICAgICAgfSBlbHNlIGlmKGhlYWRNZW51LmlkID09IFwiYWRzX2FtYXpvbl9jb250ZW50X3NoYXJlX29mX3ZvaWNlXCIgJiYgdGhpcy5uYXZpZ2F0aW9uLnNvdkFwcFJvdXRlcy5pbmRleE9mKGN1cnJlbnRSb3V0ZSk+LTEpIHtcbiAgICAgICAgICAgICAgaWYoKGN1cnJlbnRSb3V0ZSAhPSAncHJvZHVjdC1tZXRhLWRhdGEnICYmIGN1cnJlbnRSb3V0ZSAhPSAnYnJhbmQtdGVybXMtc2V0dGluZ3MnICYmIGN1cnJlbnRSb3V0ZSAhPSAnbGFiZWxzLXNldHRpbmdzJyAmJiBjdXJyZW50Um91dGUgIT0gJ3N1Yi1icmFuZHMnICYmIGN1cnJlbnRSb3V0ZSAhPSAnc3ViLWJyYW5kcy1tYXBwaW5nJyAmJiBjdXJyZW50Um91dGUgIT0gJ3Nvdi1zZXR0aW5ncycgJiYgY3VycmVudFJvdXRlICE9ICdjb250ZW50LXNldHRpbmdzJyAmJiBjdXJyZW50Um91dGUgIT0gJ3NlYXJjaC1xdWVyeS1wZXJmb3JtYW5jZScpIHx8ICF0aGlzLmN1cnJlbnRBcHAgfHwgdGhpcy5jdXJyZW50QXBwLm5hbWUgPT0gJ1NoYXJlIE9mIFZvaWNlJykge1xuICAgICAgICAgICAgICAgIGhlYWRNZW51LnBhbmVsT3BlblN0YXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBcHAgPSBoZWFkTWVudTtcbiAgICAgICAgICAgICAgICBpZihvbk1lbnVDbGlja2VkIHx8IHRoaXMuY3VycmVudEFwcC5uYW1lID09ICdTaGFyZSBPZiBWb2ljZScpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYoaGVhZE1lbnUuaWQgPT0gXCJhZHNfYW1hem9uX3NlbGxlcl9zZWxsZXJfYW5hbHl0aWNzXCIgJiYgdGhpcy5uYXZpZ2F0aW9uLnNlbGxlckFuYWx5dGljc0FwcFJvdXRlcy5pbmRleE9mKGN1cnJlbnRSb3V0ZSk+LTEpe1xuICAgICAgICAgICAgaGVhZE1lbnUucGFuZWxPcGVuU3RhdGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXBwID0gaGVhZE1lbnU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYoaGVhZE1lbnUuaWQgPT0gXCJhZHNfYW1hem9uX3NlbGxlcl92ZW5kb3JfYW5hbHl0aWNzXCIgJiYgdGhpcy5uYXZpZ2F0aW9uLnZlbmRvckFuYWx5dGljc0FwcFJvdXRlcy5pbmRleE9mKGN1cnJlbnRSb3V0ZSk+LTEpIHtcbiAgICAgICAgICAgIGlmKChjdXJyZW50Um91dGUgIT0gJ3Byb2R1Y3QtbWV0YS1kYXRhJyAmJiBjdXJyZW50Um91dGUgIT0gJ2JyYW5kLXRlcm1zLXNldHRpbmdzJyAmJiBjdXJyZW50Um91dGUgIT0gJ2xhYmVscy1zZXR0aW5ncycgICYmIGN1cnJlbnRSb3V0ZSAhPSAnc3ViLWJyYW5kcycgJiYgY3VycmVudFJvdXRlICE9ICdzdWItYnJhbmRzLW1hcHBpbmcnICYmIGN1cnJlbnRSb3V0ZSAhPSAnc292LXNldHRpbmdzJyAmJiBjdXJyZW50Um91dGUgIT0gJ2NvbnRlbnQtc2V0dGluZ3MnICYmIGN1cnJlbnRSb3V0ZSAhPSAnc2VhcmNoLXF1ZXJ5LXBlcmZvcm1hbmNlJykgfHwgIXRoaXMuY3VycmVudEFwcCB8fCB0aGlzLmN1cnJlbnRBcHAubmFtZSA9PSAnVmVuZG9yIEFuYWx5dGljcycpIHtcbiAgICAgICAgICAgICAgaGVhZE1lbnUucGFuZWxPcGVuU3RhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBcHAgPSBoZWFkTWVudTtcbiAgICAgICAgICAgICAgaWYob25NZW51Q2xpY2tlZCB8fCB0aGlzLmN1cnJlbnRBcHAubmFtZSA9PSAnVmVuZG9yIEFuYWx5dGljcycpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoZWFkTWVudS5wYW5lbE9wZW5TdGF0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vICBpZihoZWFkTWVudS5jaGlsZHJlbil7XG4gICAgICAgIC8vICAgIGhlYWRNZW51LmNoaWxkcmVuLmZvckVhY2gobWVudSA9PiB7XG4gICAgICAgIC8vICAgICAgaWYgKG1lbnUuY2hpbGRyZW4gJiYgbWVudS50eXBlID09IFwiZXhwYW5kYWJsZVwiKSB7XG4gICAgICAgIC8vICAgICAgICBoZWFkTWVudS5jaGlsZHJlbi5mb3JFYWNoKHN1Ym1lbnUgPT4ge1xuICAgICAgICAvLyAgICAgICAgIGlmKHRoaXMuaXNDaGVja0FjdGl2ZVJvdXRlKHN1Ym1lbnUucm91dGUsaGVhZE1lbnUpKXtcbiAgICAgICAgLy8gICAgICAgICAgICBtZW51LnBhbmVsT3BlblN0YXRlID0gdHJ1ZTtcbiAgICAgICAgLy8gICAgICAgICAgICBoZWFkTWVudS5wYW5lbE9wZW5TdGF0ZSA9IHRydWU7XG5cbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICB9KVxuICAgICAgICAvLyAgICAgIH1cbiAgICAgICAgLy8gICAgfSk7XG4gICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuY2RyZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICBwdWJsaWMgZ2V0VG9vbHRpcEluZm8oaGVhZG1lbnUpe1xuICAgIGlmKHRoaXMuc2lkZW5hdiAmJiB0aGlzLnNpZGVuYXYub3BlbmVkKXtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRBcHBsaWNhdGlvbihoZWFkbWVudSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbGVjdGVkQXBwbGljYXRpb24oaGVhZG1lbnUpe1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uLnNlbGVjdGVkQXBwbGljYXRpb24odGhpcy5hcHBsaWNhdGlvbkRldGFpbHMsIGhlYWRtZW51KTtcbiAgfVxuICBnZXQgc2lkZUlkSW5mbygpe1xuICAgIGlmKHRoaXMuYXBwbGljYXRpb25EZXRhaWxzICYmIHRoaXMuYXBwbGljYXRpb25EZXRhaWxzLnNpZGViYXJJbmZvICYmIHRoaXMuYXBwbGljYXRpb25EZXRhaWxzLnNpZGViYXJJbmZvLnNpdGVJZCl7XG4gICAgICByZXR1cm4gTnVtYmVyKHRoaXMuYXBwbGljYXRpb25EZXRhaWxzLnNpZGViYXJJbmZvLnNpdGVJZClcbiAgICB9ZWxzZSBpZih0aGlzLmFwcGxpY2F0aW9uRGV0YWlscyAmJiB0aGlzLmFwcGxpY2F0aW9uRGV0YWlscyAmJiB0aGlzLmFwcGxpY2F0aW9uRGV0YWlsc1snc2l0ZUlkJ10pe1xuICAgICAgcmV0dXJuIE51bWJlcih0aGlzLmFwcGxpY2F0aW9uRGV0YWlsc1snc2l0ZUlkJ10pXG4gICAgfVxuICAgIHJldHVybiAxO1xuICB9XG5cblxuICBwdWJsaWMgY2hlY2tGb3JSZWRpcmVjdGlvbihhcHBNZW51cywgZ3NNZW51cywgYXBwbGljYXRpb25EZXRhaWxzKSB7XG4gICAgY29uc3QgY3VycmVudFJvdXRlID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCc/JylbMF07XG4gICAgY29uc3QgY3VycmVudEFwcE1lbnVzID0gYXBwTWVudXMuZmluZChhcHAgPT4gIGFwcC5pZC5pbmRleE9mKGFwcGxpY2F0aW9uRGV0YWlscy5hcHBsaWNhdGlvbklkKSA+PSAwKTtcblxuICAgIGlmIChjdXJyZW50QXBwTWVudXMpIHtcbiAgICAgIGNvbnN0IGFsbE1lbnVzID0gW2N1cnJlbnRBcHBNZW51cywgLi4uZ3NNZW51c107XG4gICAgICBjb25zdCBpc01lbnVBdmFpbGFibGUgPSBmaW5kTGluayhhbGxNZW51cyk7XG4gICAgICBpZiAoIWlzTWVudUF2YWlsYWJsZSkge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb24uZ2V0SG9zdE9yaWdpbkFuZE5hdmlnYXRlKGN1cnJlbnRBcHBNZW51cy5kZWZhdWx0dXJsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uLmdldEhvc3RPcmlnaW5BbmROYXZpZ2F0ZSh0aGlzLnRvRGlzcGxheUFwcGxpY2F0aW9uc1swXS5kZWZhdWx0dXJsKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGlzTWVudVJvdXRlTWF0Y2gobGluaykge1xuICAgICAgcmV0dXJuIGN1cnJlbnRSb3V0ZSA9PT0gYC8ke2xpbmt9YDtcbiAgICB9IFxuXG4gICAgZnVuY3Rpb24gZmluZExpbmsobWVudUFycmF5KSB7XG4gICAgICByZXR1cm4gbWVudUFycmF5LnNvbWUoZnVuY3Rpb24obWVudSkge1xuICAgICAgICAgIC8vIElmIHRoZSBtZW51IGhhcyBjaGlsZHJlbiwgc2VhcmNoIHJlY3Vyc2l2ZWx5XG4gICAgICAgICAgaWYgKG1lbnUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpbmRMaW5rKG1lbnUuY2hpbGRyZW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IG1lbnUgaXRlbSBoYXMgYSBtYXRjaGluZyBsaW5rXG4gICAgICAgICAgaWYgKGlzTWVudVJvdXRlTWF0Y2gobWVudS5yb3V0ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGNoaWxkIHJvdXRlcywgc2VhcmNoIHdpdGhpbiB0aGVtXG4gICAgICAgICAgaWYgKG1lbnUuY2hpbGRfcm91dGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtZW51LmNoaWxkX3JvdXRlcy5zb21lKGZ1bmN0aW9uKGNoaWxkUm91dGUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpc01lbnVSb3V0ZU1hdGNoKGNoaWxkUm91dGUpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuICB9XG5cblxuXG5cblxuICAvLyBwdWJsaWMgY2hlY2tGb3JSZWRpcmVjdGlvbihhcHBsaWNhdGlvbkRldGFpbHM6IGFwcERldGFpbHMsIG1lbnVsaXN0cykge1xuICAvLyAgIHRyeXtcbiAgLy8gICAgIGxldCBpc01lbnVWaXNpYmxlQnlvcmdTZXR0aW5nID0gdHJ1ZTtcbiAgLy8gICAgIGxldCBpc01lbnVWaXNpYmxlQnlSb2xlID0gdHJ1ZTtcbiAgLy8gICAgIGxldCBpc01lbnVOb3RWaXNpYmxlQnlSb2xlID0gdHJ1ZTtcbiAgLy8gICAgIGxldCBpc01lbnVyT3JnV2l0aFVzZXJSb2xlID0gdHJ1ZTtcbiAgLy8gICAgIGxldCBpc01lbnVOb3RWaXNpYmxlQnlhcHBzcGFjaWZpY2NvbmZpZ2NoZWNrID10cnVlO1xuICAvLyAgICAgbGV0IGlzcmVkaXJlY3RlZCA9IGZhbHNlO1xuICAvLyAgICAgbGV0IGFwcGxpY2F0aW9uSWRMaXN0ID0gW1wiYWRzX2FtYXpvbl9zZWxsZXJfc2VsbGVyX2FuYWx5dGljc1wiICwgXCJhZHNfYW1hem9uX3NlbGxlcl92ZW5kb3JfYW5hbHl0aWNzXCJdXG5cbiAgLy8gICAgIGxldCBtZW51bGlzdCA9IGFwcGxpY2F0aW9uSWRMaXN0LmluZGV4T2YoYXBwbGljYXRpb25EZXRhaWxzLmFwcGxpY2F0aW9uSWQpID4gLTEgJiYgYXBwbGljYXRpb25EZXRhaWxzLmxpc3RNZW51cyAmJiBhcHBsaWNhdGlvbkRldGFpbHMubGlzdE1lbnVzLmxlbmd0aCA+IDAgPyBhcHBsaWNhdGlvbkRldGFpbHMubGlzdE1lbnVzIDogbWVudWxpc3RzO1xuXG4gIC8vICAgICBjb25zdCByb2xlID0gWydTVVBFUl9BRE1JTicsICdTVVBFUl9BRE1JTl9SRUFEX09OTFknXTtcbiAgLy8gICAgIGlmIChyb2xlLmluZGV4T2YoYXBwbGljYXRpb25EZXRhaWxzLnVzZXJJbmZvLnJvbGUpID09IC0xKSB7XG4gICAgICAgIFxuICAvLyAgICAgICBsZXQgYXBwbGljYXRpb25NZW51ZXMgPSBtZW51bGlzdCAmJiBtZW51bGlzdC5sZW5ndGggPiAwICYmIG1lbnVsaXN0LmZpbmQoKG1lbnVzKT0+e1xuICAvLyAgICAgICAgIHJldHVybiBtZW51cy5pZCA9PSBhcHBsaWNhdGlvbkRldGFpbHMuYXBwbGljYXRpb25JZFxuICAvLyAgICAgICB9KVxuXG4gIC8vICAgICAgIGlmIChhcHBsaWNhdGlvbk1lbnVlcyAmJiBhcHBsaWNhdGlvbk1lbnVlcy5vcmdhbml6YXRpb25fc2V0dGluZ19ub3RfaW4pIHtcbiAgLy8gICAgICAgICBpc01lbnVWaXNpYmxlQnlvcmdTZXR0aW5nID0gdGhpcy5uYXZpZ2F0aW9uLmNoZWNrRm9yTm90T3JnU2V0dGluZ3MoYXBwbGljYXRpb25NZW51ZXMub3JnYW5pemF0aW9uX3NldHRpbmdfbm90X2luKTtcbiAgLy8gICAgICAgfVxuXG4gIC8vICAgICAgIGlmIChhcHBsaWNhdGlvbk1lbnVlcyAmJiBhcHBsaWNhdGlvbk1lbnVlcy52aXNpYmlsaXR5X3JvbGVzKSB7XG4gIC8vICAgICAgICAgaXNNZW51VmlzaWJsZUJ5Um9sZSA9IHRoaXMubmF2aWdhdGlvbi5jaGVja0ZvclJvbGVzKGFwcGxpY2F0aW9uTWVudWVzLnZpc2liaWxpdHlfcm9sZXMpO1xuICAvLyAgICAgICB9XG4gIC8vICAgICAgIGlmIChhcHBsaWNhdGlvbk1lbnVlcyAmJiBhcHBsaWNhdGlvbk1lbnVlcy52aXNpYmlsaXR5X3JvbGVzX25vdF9pbikge1xuICAvLyAgICAgICAgIGlzTWVudU5vdFZpc2libGVCeVJvbGUgPSB0aGlzLm5hdmlnYXRpb24uY2hlY2tGb3J2aXNpYmlsaXR5Um9sZXNOb3RJbihhcHBsaWNhdGlvbk1lbnVlcy52aXNpYmlsaXR5X3JvbGVzX25vdF9pbik7XG4gIC8vICAgICAgIH1cblxuICAvLyAgICAgICBpZiAoYXBwbGljYXRpb25NZW51ZXMgJiYgYXBwbGljYXRpb25NZW51ZXMuYXBwX3NwYWNpZmljX2NvbmZpZ19jaGVjaykge1xuICAvLyAgICAgICAgIGlzTWVudU5vdFZpc2libGVCeWFwcHNwYWNpZmljY29uZmlnY2hlY2sgPSB0aGlzLm5hdmlnYXRpb24uYXBwU3BlY2lmaWNDb25maWcoYXBwbGljYXRpb25NZW51ZXMuYXBwX3NwYWNpZmljX2NvbmZpZ19jaGVjayk7XG4gIC8vICAgICAgIH1cblxuICAvLyAgICAgICBpZiAoYXBwbGljYXRpb25NZW51ZXMgJiYgYXBwbGljYXRpb25NZW51ZXMub3JnX3VzZXJfY3RybCkge1xuICAvLyAgICAgICAgIGlzTWVudXJPcmdXaXRoVXNlclJvbGUgPSB0aGlzLm5hdmlnYXRpb24uY2hlY2tGb3JPcmdXaXRoVXNlclJvbGUoYXBwbGljYXRpb25NZW51ZXMub3JnX3VzZXJfY3RybCxhcHBsaWNhdGlvbk1lbnVlcywgYXBwbGljYXRpb25EZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQpO1xuICAvLyAgICAgICB9XG4gIC8vICAgICAgIGlmIChhcHBsaWNhdGlvbk1lbnVlcyAmJiBhcHBsaWNhdGlvbk1lbnVlcy5pZCA9PSBcImFtYy1wbGF0Zm9ybS13ZWJcIiAmJiBhcHBsaWNhdGlvbk1lbnVlcy5jaGlsZHJlbikge1xuICAvLyAgICAgICAgIGxldCBpc0NoaWxkTWVudVZpc2libGVCeVJvbGUgPSB0cnVlO1xuICAvLyAgICAgICAgIGxldCBpc0NoaWxkTWVudU5vdFZpc2libGVCeVJvbGUgPSB0cnVlO1xuICAvLyAgICAgICAgIGxldCBpc0NoaWxkTWVudXJPcmdXaXRoVXNlclJvbGUgPSB0cnVlO1xuXG4gIC8vICAgICAgICAgY29uc3QgY2hpbGRtZW51ID0gdGhpcy52YWxpZGF0ZVJvdXRlQnlTdGF0ZSggdGhpcy5yb3V0ZXIgLCBhcHBsaWNhdGlvbk1lbnVlcy5jaGlsZHJlbik7XG5cbiAgLy8gICAgICAgICBpZiAoY2hpbGRtZW51ICYmIGNoaWxkbWVudS52aXNpYmlsaXR5X3JvbGVzX25vdF9pbikge1xuICAvLyAgICAgICAgICAgaXNDaGlsZE1lbnVOb3RWaXNpYmxlQnlSb2xlID0gdGhpcy5uYXZpZ2F0aW9uLmNoZWNrRm9ydmlzaWJpbGl0eVJvbGVzTm90SW4oY2hpbGRtZW51LnZpc2liaWxpdHlfcm9sZXNfbm90X2luKTtcbiAgLy8gICAgICAgICB9XG5cbiAgLy8gICAgICAgICBpZiAoY2hpbGRtZW51ICYmIGNoaWxkbWVudS52aXNpYmlsaXR5X3JvbGVzKSB7XG4gIC8vICAgICAgICAgICBpc0NoaWxkTWVudVZpc2libGVCeVJvbGUgPSB0aGlzLm5hdmlnYXRpb24uY2hlY2tGb3JSb2xlcyhjaGlsZG1lbnUudmlzaWJpbGl0eV9yb2xlcyk7XG4gIC8vICAgICAgICAgfVxuXG4gIC8vICAgICAgICAgaWYgKGNoaWxkbWVudSAmJiBjaGlsZG1lbnUub3JnX3VzZXJfY3RybCkge1xuICAvLyAgICAgICAgICAgaXNDaGlsZE1lbnVyT3JnV2l0aFVzZXJSb2xlID0gdGhpcy5uYXZpZ2F0aW9uLmNoZWNrRm9yT3JnV2l0aFVzZXJSb2xlKGNoaWxkbWVudS5vcmdfdXNlcl9jdHJsLGNoaWxkbWVudSwgYXBwbGljYXRpb25EZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQpO1xuICAvLyAgICAgICAgIH1cblxuICAvLyAgICAgICAgIGlmICgoIWlzQ2hpbGRNZW51Tm90VmlzaWJsZUJ5Um9sZSB8fCAhaXNDaGlsZE1lbnVWaXNpYmxlQnlSb2xlIHx8ICFpc0NoaWxkTWVudXJPcmdXaXRoVXNlclJvbGUpICYmIGNoaWxkbWVudSkge1xuICAvLyAgICAgICAgICAgaXNyZWRpcmVjdGVkID0gdHJ1ZTtcbiAgLy8gICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9cIl0pO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgfVxuICAvLyAgICAgICBpZiAoKCFpc01lbnVWaXNpYmxlQnlvcmdTZXR0aW5nIHx8ICFpc01lbnVWaXNpYmxlQnlSb2xlIHx8ICFpc01lbnVOb3RWaXNpYmxlQnlSb2xlIHx8ICFpc01lbnVyT3JnV2l0aFVzZXJSb2xlIHx8ICFpc01lbnVOb3RWaXNpYmxlQnlhcHBzcGFjaWZpY2NvbmZpZ2NoZWNrKSAmJiAhaXNyZWRpcmVjdGVkKSB7XG4gIC8vICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRBcHApIHtcbiAgLy8gICAgICAgICAgIHRoaXMubmF2aWdhdGlvbi5nZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUodGhpcy50b0Rpc3BsYXlBcHBsaWNhdGlvbnNbMF0uZGVmYXVsdHVybCk7ICBcbiAgLy8gICAgICAgICB9ZWxzZXtcbiAgLy8gICAgICAgICAgIHRoaXMubmF2aWdhdGlvbi5nZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUoYXBwbGljYXRpb25NZW51ZXMuZGVmYXVsdHVybCk7XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfWNhdGNoKGVycm9yKXtcbiAgLy8gICAgICAgdGhyb3cgZXJyb3I7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgdmFsaWRhdGVSb3V0ZUJ5U3RhdGUoc3RhdGUgLCBsaXN0TWVudXMpe1xuICAgIHRyeXtcbiAgICAgICAgY29uc3QgZmluZFJvdXRlID0gbGlzdE1lbnVzLmZpbmQobGlzdCA9PiB7XG4gICAgICAgICAgICBpZihsaXN0LmxpbmsgPT0gJ2FtYycrc3RhdGUudXJsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYobGlzdC5tYXRjaFJvdXRlcyAmJiBsaXN0Lm1hdGNoUm91dGVzLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgIGlmKGxpc3QubWF0Y2hSb3V0ZXMuaW5jbHVkZXMoc3RhdGUudXJsKSl7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZpbmRSb3V0ZTtcbiAgICB9Y2F0Y2goZXJyb3Ipe1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59XG4gIFxuICAvLyBwdWJsaWMgY2hlY2tGb3JSZWRpcmVjdGlvbihhcHBsaWNhdGlvbkRldGFpbHM6IGFwcERldGFpbHMpIHtcbiAgLy8gICBsZXQgcm91dGUgPSAnJztcbiAgLy8gICBpZihhcHBsaWNhdGlvbkRldGFpbHMuY3VycmVudEFjY291bnQgJiYgISh0aGlzLm5hdmlnYXRpb24uaXNIYXZpbmdBbnlBY3RpdmVTdWJzKGFwcGxpY2F0aW9uRGV0YWlscy5hcHBsaWNhdGlvbklkLGFwcGxpY2F0aW9uRGV0YWlscy5jdXJyZW50QWNjb3VudC5zdWJzY3JpcHRpb24sYXBwbGljYXRpb25EZXRhaWxzLmN1cnJlbnRBY2NvdW50LnR5cGUpKSl7XG4gIC8vICAgICBzd2l0Y2goYXBwbGljYXRpb25EZXRhaWxzLmN1cnJlbnRBY2NvdW50LnR5cGUpe1xuICAvLyAgICAgICBjYXNlICdDT05URU5UJzoge1xuICAvLyAgICAgICAgICAgcm91dGUgPSAnY29udGVudC9zaGFyZS1vZi12b2ljZSdcbiAgLy8gICAgICAgICAgIGJyZWFrO1xuICAvLyAgICAgICB9XG4gIC8vICAgICAgIGNhc2UgJ0RTUCc6IHtcbiAgLy8gICAgICAgICByb3V0ZSA9ICdkc3Avb3JkZXInXG4gIC8vICAgICAgICAgYnJlYWs7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgY2FzZSAnQU1TX0FUVFJJQlVUSU9OJzoge1xuICAvLyAgICAgICAgIHJvdXRlID0gJ2F0dHJpYnV0aW9uL2F0dHJpYnV0aW9uLWNhbXBhaWducydcbiAgLy8gICAgICAgICBicmVhaztcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICBjYXNlICdTRUxMRVJfQ0VOVFJBTCc6IHtcbiAgLy8gICAgICAgICByb3V0ZSA9ICcjIS9hbXMtY29udGVudC1kYXNoYm9hcmQvc2VsbGVyLXNhbGVzLW92ZXJ2aWV3JztcbiAgLy8gICAgICAgICBicmVhaztcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICBjYXNlICdWRU5ET1JfQ0VOVFJBTCc6IHtcbiAgLy8gICAgICAgICByb3V0ZSA9ICcjIS9hbXMtY29udGVudC1kYXNoYm9hcmQvY3VzdG9tLXJlcG9ydHMtdmVuZG9yLXNhbGVzLW92ZXJ2aWV3JztcbiAgLy8gICAgICAgICBicmVhaztcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICBjYXNlICdJTlNUQUNBUlQnOiB7XG4gIC8vICAgICAgICAgcm91dGUgPSAnaW5zdGFjYXJ0L2luc3RhY2FydC1vdmVydmlldyc7XG4gIC8vICAgICAgICAgYnJlYWs7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgY2FzZSAnQ1JJVEVPJzoge1xuICAvLyAgICAgICAgIHJvdXRlID0gJ2NyaXRlby9jcml0ZW8tb3ZlcnZpZXcnO1xuICAvLyAgICAgICAgIGJyZWFrO1xuICAvLyAgICAgICB9XG4gIC8vICAgICAgIGNhc2UgJ1dBTE1BUlQnOiB7XG4gIC8vICAgICAgICAgcm91dGUgPSAnd2FsbWFydC8nO1xuICAvLyAgICAgICAgIGJyZWFrO1xuICAvLyAgICAgICB9XG4gIC8vICAgICAgIGNhc2UgJ0FNQVpPTl9NQVJLRVRJTkdfQ0xPVUQnOiB7XG4gIC8vICAgICAgICAgcm91dGUgPSAnZHAvZGF0YS1hbmFseXRpY3MtZ2V0dGluZy1zdGFydGVkJztcbiAgLy8gICAgICAgICBicmVhaztcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICBjYXNlICdBTVNfVkVORE9SJzpcbiAgLy8gICAgICAgY2FzZSAnQU1TX1NFTExFUic6IHtcbiAgLy8gICAgICAgICByb3V0ZSA9ICcjIS9hbXMtcGFnZS1vdmVydmlldyc7XG4gIC8vICAgICAgICAgYnJlYWs7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICAgIHRoaXMubmF2aWdhdGlvbi5nZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUocm91dGUpO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTdHJ1Y3R1cmVBUElTdXBwb3J0RGF0YShjdXJyZW50QWNjb3VudCl7XG4gICAgdHJ5IHtcbiAgICB0aGlzLlJlc3RBcGlTZXJ2aWNlLmdldFN0cnVjdHVyZUFQSVN1cHBvcnREYXRhKGN1cnJlbnRBY2NvdW50Lm9yZ2FuaXphdGlvbklkLGN1cnJlbnRBY2NvdW50LmJ1c2luZXNzR3JvdXBJZCxjdXJyZW50QWNjb3VudC5hbXNBY2NvdW50SWQpLnN1YnNjcmliZSggXG4gICAgICAocmVzcG9uc2U6YW55KSA9PiB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbi5pc1N0cnVjdHVyZUFwaVN1cHBvcnQgPSByZXNwb25zZSA/IHJlc3BvbnNlWydzdHJ1Y3R1cmVBcGlTdXBwb3J0J10gOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbi5pc01hbmFnZWRTZXJ2aWNlQWNjID0gcmVzcG9uc2UgPyByZXNwb25zZVsnaXNNYW5hZ2VkQWNjb3VudCddIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmNyZWF0ZUFwcERldGFpbHModGhpcy5hcHBsaWNhdGlvbkRldGFpbHMpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjphbnkpID0+e1xuICAgICAgICB0aGlzLm5hdmlnYXRpb24uaXNTdHJ1Y3R1cmVBcGlTdXBwb3J0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb24uaXNNYW5hZ2VkU2VydmljZUFjYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jcmVhdGVBcHBEZXRhaWxzKHRoaXMuYXBwbGljYXRpb25EZXRhaWxzKTtcbiAgICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgfVxuICBcbiAgcHVibGljIHNjcm9sbFRvQWN0aXZlTWVudSgpe1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYodGhpcy5saXN0SXRlbXMgJiYgdGhpcy5saXN0SXRlbXMuZmluZCgoXywgaSkgPT4gIF8uaXNBY3RpdmVJdGVtKSAhPSB1bmRlZmluZWQpe1xuICAgICAgICB0aGlzLmxpc3Quc2Nyb2xsVG9wID0gdGhpcy5saXN0SXRlbXMuZmluZCgoXywgaSkgPT4gIF8uaXNBY3RpdmVJdGVtKS5vZmZzZXRUb3A7XG4gICAgICB9XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0NoZWNrQWN0aXZlUm91dGUobWVudSxoZWFkbWVudSxwYXJlbnRNZW51ID0gbnVsbCkge1xuICAgIC8vIGxldCB1cmxBcnJheSA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnLycpO1xuICAgIC8vIGxldCByb3V0ZVVybCA9IHVybEFycmF5W3VybEFycmF5Lmxlbmd0aCAtIDFdO1xuICAgIC8vIGxldCBjdXJyZW50Um91dGUgPSByb3V0ZVVybC5zcGxpdCgnPycpWzBdO1xuICAgIC8vIGxldCByb3V0ZT1tZW51LnJvdXRlO1xuICAgIC8vIGxldCBwYWdlTmFtZTtcbiAgICAvLyBpZihyb3V0ZSl7XG4gICAgLy8gbGV0IHNwbGl0ZWRVUkwgPSByb3V0ZS5zcGxpdChcIi9cIik7XG4gICAgLy8gcGFnZU5hbWUgPSBzcGxpdGVkVVJMLmxlbmd0aCA+MCA/ICBzcGxpdGVkVVJMW3NwbGl0ZWRVUkwubGVuZ3RoIC0gMV0gOiByb3V0ZTtcbiAgICAvLyB9XG5cbiAgICBsZXQgcm91dGVVcmwgPSB0aGlzLnJvdXRlci51cmw7XG4gICAgbGV0IGN1cnJlbnRSb3V0ZSA9IHJvdXRlVXJsLnNwbGl0KCc/JylbMF07XG4gICAgbGV0IHJvdXRlPW1lbnUucm91dGU7XG4gICAgbGV0IHBhZ2VOYW1lO1xuICAgIGlmKHJvdXRlKXtcbiAgICAgIHBhZ2VOYW1lID0gcm91dGU7XG4gICAgfVxuXG4gICAgaWYgKChjdXJyZW50Um91dGUgPT09IFwiL1wiK3BhZ2VOYW1lIHx8IGN1cnJlbnRSb3V0ZSA9PT0gXCIvXCIrcGFnZU5hbWUrXCIva2V5d29yZC1yZXBvcnRcIiB8fCBjdXJyZW50Um91dGUgPT09IFwiL1wiK3BhZ2VOYW1lK1wiL2tleXdvcmQtc3VnZ2VzdGlvbnMvYXV0b1wiIHx8IGN1cnJlbnRSb3V0ZSA9PT0gXCIvXCIrcGFnZU5hbWUrXCIva2V5d29yZC1zdWdnZXN0aW9ucy9tYW51YWxcIikgJiYgaGVhZG1lbnUhPXVuZGVmaW5lZCkge1xuICAgICAgaWYodGhpcy5wcmV2QWN0aXZlSGVhZE1lbnU9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgaGVhZG1lbnUuaXNBY3RpdmU9dHJ1ZTtcbiAgICAgICAgdGhpcy5wcmV2QWN0aXZlSGVhZE1lbnU9aGVhZG1lbnU7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgdGhpcy5wcmV2QWN0aXZlSGVhZE1lbnUuaXNBY3RpdmU9ZmFsc2U7XG4gICAgICAgIGhlYWRtZW51LmlzQWN0aXZlPXRydWU7XG4gICAgICAgIHRoaXMucHJldkFjdGl2ZUhlYWRNZW51PWhlYWRtZW51O1xuICAgICAgfVxuICAgICAgaWYocGFyZW50TWVudSAhPSBudWxsKXtcbiAgICAgICAgdGhpcy5hY3RpdmVQYW5lbCA9IHBhcmVudE1lbnUuaWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9ZWxzZSBpZihtZW51ICYmIG1lbnUubWF0Y2hSb3V0ZXMgJiYgdGhpcy5yb3V0ZXIudXJsKXtcbiAgICAgIGlmIChtZW51Lm1hdGNoUm91dGVzLmluZGV4T2YodGhpcy5yb3V0ZXIudXJsLnNwbGl0KCc/JylbMF0pID4gLTEpIHtcbiAgICAgICAgaGVhZG1lbnUuaXNBY3RpdmU9dHJ1ZTtcbiAgICAgICAgdGhpcy5wcmV2QWN0aXZlSGVhZE1lbnU9aGVhZG1lbnU7XG5cbiAgICAgICAgaWYocGFyZW50TWVudSAhPSBudWxsKXtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVBhbmVsID0gcGFyZW50TWVudS5pZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2V7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMga2VlcE1lbnVFeHBhbmRlZChwYXJlbnRNZW51SWQ6c3RyaW5nKSB7XG4gICAgaWYocGFyZW50TWVudUlkLmluZGV4T2YodGhpcy5hcHBsaWNhdGlvbkRldGFpbHMuYXBwbGljYXRpb25JZCkgPj0gMCAgKXtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhbGxNZW51Q29sbGFwc2UoKXtcbiAgICBmb3IobGV0IGhlYWRNZW51IG9mIHRoaXMudG9EaXNwbGF5R2xvYmFsU2V0dGluZ3NNZW51KSB7XG4gICAgICAgIGhlYWRNZW51LnBhbmVsT3BlblN0YXRlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1vZGZpY2F0aW9uRGF0YShkYXRhOiBhbnkpOiBhbnkge1xuICAgIGxldCBjb25maWdzID0gdGhpcy5uYXZpZ2F0aW9uLmdldFR5cGVTdGF0dXNDb25maWdzKCk7XG5cdFx0bGV0IG9yZGVyID0gT2JqZWN0LmtleXMoY29uZmlncyk7XG5cdFx0aWYob3JkZXIuaW5kZXhPZihkYXRhLnR5cGUpID4gLTEpe1xuXHRcdFx0ZGF0YS5hY3RpdmUgPSBjb25maWdzW2RhdGEudHlwZV0gPyBjb25maWdzW2RhdGEudHlwZV0gOiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICAvLyB0aGlzLnNob3dNZW51SWNvbigpO1xuICAgIHRoaXMuY2hlY2tBcHBsaWNhdGlvbkRldGFpbHModGhpcy5hcHBsaWNhdGlvbkRldGFpbHMpO1xuICAgIGlmKHRoaXMuYXBwbGljYXRpb25EZXRhaWxzLmFwcGxpY2F0aW9uSWQgPT0gJ2Fkc19hbWF6b25fZHNwJyAmJiAhdGhpcy5SZXN0QXBpU2VydmljZS5pc1N0cnVjdGVyQXBpQ2FsbGVkKXtcbiAgICAgIHRoaXMuZ2V0U3RydWN0dXJlQVBJU3VwcG9ydERhdGEodGhpcy5hcHBsaWNhdGlvbkRldGFpbHMuY3VycmVudEFjY291bnQpO1xuICAgIH1cblxuICB9XG5cbiAgcHVibGljIGdvVG9BcHBsaWNhdGlvbihpdGVtKSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdzZWxlY3RlZEFwcElkJyk7XG4gICAgaWYoaXRlbS5kZWZhdWx0dXJsKXtcbiAgICAgIHRoaXMuZ29Ub0FwcERlZmF1bHRQYWdlKGl0ZW0sIGl0ZW0uaWQpO1xuICAgIH1lbHNle1xuICAgICAgaWYoaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYoaXRlbS5jaGlsZHJlblswXS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuWzBdLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmdvVG9BcHBEZWZhdWx0UGFnZShpdGVtLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLCBpdGVtLmlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmdvVG9BcHBEZWZhdWx0UGFnZShpdGVtLmNoaWxkcmVuWzBdLCBpdGVtLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nb1RvQXBwRGVmYXVsdFBhZ2UoaXRlbSwgaXRlbS5pZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmKHRoaXMuc2lkZU5hdlN0YXR1c1N1YnNjcmlwdGlvbil7XG4gICAgICB0aGlzLnNpZGVOYXZTdGF0dXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ29Ub0FwcERlZmF1bHRQYWdlKGl0ZW0sIGFwcElkKSB7XG4gICAgdGhpcy5uYXZNZW51c0NvbXBvbmVudC5vblNlbGVjdE1lbnUoZXZlbnQsIGl0ZW0sIGFwcElkKTtcbiAgfVxuXG4gIHB1YmxpYyBoaWRlTWVudUZvcldMKCl7XG4gICAgICBsZXQgaXNPcmdTZXR0aW5nO1xuICAgICAgaWYodGhpcy5hcHBsaWNhdGlvbkRldGFpbHNbJ3VzZXJJbmZvJ10ucm9sZSA9PT0gJ0lBQ19CUkFORF9SRUFEX09OTFknIHx8ICh0aGlzLmFwcGxpY2F0aW9uRGV0YWlscy5vcmdTZXR0aW5ncyAmJiB0aGlzLmFwcGxpY2F0aW9uRGV0YWlscy5vcmdTZXR0aW5ncy5sZW5ndGggPT0gMCkpe1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1lbHNle1xuICAgICAgICBpZiAodGhpcy5hcHBsaWNhdGlvbkRldGFpbHMub3JnU2V0dGluZ3MgJiYgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHMub3JnU2V0dGluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlzT3JnU2V0dGluZyA9IHRoaXMuYXBwbGljYXRpb25EZXRhaWxzLm9yZ1NldHRpbmdzLmZpbHRlcihmdW5jdGlvbihvcmdTZXR0aW5nKXtcbiAgICAgICAgICAgIGlmKCBvcmdTZXR0aW5nLnNldHRpbmcgPT09ICdJQUNfSU5TSUdIVFMnICYmICghb3JnU2V0dGluZy52YWx1ZSB8fCBvcmdTZXR0aW5nLnZhbHVlICYmIG9yZ1NldHRpbmcudmFsdWUgPT0gJ0FDVElWRScpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoaXNPcmdTZXR0aW5nICE9IG51bGwgJiYgKCB0aGlzLmFwcGxpY2F0aW9uRGV0YWlscy5zaWRlYmFySW5mby5zaXRlSWQgPiAxMSB8fCB0aGlzLmFwcGxpY2F0aW9uRGV0YWlsc1sndXNlckluZm8nXS5yb2xlID09PSAnSUFDX0JSQU5EX1JFQURfT05MWScpKTtcbiAgICAgIH1cbiAgfVxuXG4gIC8vIHB1YmxpYyBpc0FwcGxpY2F0aW9uQWN0aXZlKHBhcmVudE1lbnVJZCkge1xuICAvLyAgIGlmKHBhcmVudE1lbnVJZC5pbmRleE9mKHRoaXMuYXBwbGljYXRpb25EZXRhaWxzLmFwcGxpY2F0aW9uSWQpID49IDAgICYmIHRoaXMuaXNHbG9iYWxTZXR0aW5nc01lbnVBY3RpdmUpe1xuICAvLyAgICAgcmV0dXJuIHRydWU7XG4gIC8vICAgfVxuICAvLyAgIGVsc2V7XG4gIC8vICAgICByZXR1cm4gZmFsc2U7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgXG59XG4iLCI8ZGl2IGlkPVwibG9hZGVyX3NvdlwiPlxuICA8ZGl2IGlkPVwibG9hZGluZ19kaXZcIiAqbmdJZj1cImFwcGxpY2F0aW9uRGV0YWlscz8uc2lkZWJhckluZm9cIj5cbiAgICA8ZGl2PlxuICAgICAgPGRpdiBpZD1cImxvYWRlclwiICpuZ0lmPVwic2lkZUlkSW5mbyAhPT0gMVwiXG4gICAgICAgIGNsYXNzPVwic2l0ZV97e3NpZGVJZEluZm99fVwiPlxuICAgICAgICA8aW1nIHNyYz1cInt7YXBwbGljYXRpb25EZXRhaWxzPy5zaWRlYmFySW5mbz8ubG9nb319XCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJsb2FkZXJfaW1nXCIgKm5nSWY9XCJzaWRlSWRJbmZvID09IDFcIj5cbiAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltYWdlcy9oYXBweV9leWVzX2Nsb3NlZF9zbWFsbC5zdmdcIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgY2xhc3M9XCJsb2FkZXJfcHJvZ3Jlc3MtYmFyLXBvc2l0aW9uXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZsZXhGaWxsICpuZ0lmPVwiZXJyb3JNc2cubGVuZ3RoID09IDAgZWxzZSBlcnJvckJsb2NrXCIgdHJhbnNsYXRlPVwibm9cIiBpZD1cImFuZ3VsYXItMTYtdmVyc2lvblwiPlxuICA8bWF0LXRvb2xiYXIgY2xhc3M9XCJwb3J0YWwtc2lkZS1tZW51LXRvcC10b29sYmFyXCI+XG4gICAgPG1hdC10b29sYmFyLXJvdyBmeExheW91dD1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInBvcnRhbC1mb3JnZXQtaGVhZGluZy1jYXJkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlbWVudS1sb2dvLWhvbGRlclwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaWRlSWRJbmZvICE9PSAxXCI+XG4gICAgICAgICAgICAgIDxpbWcgW3NyY109XCJhcHBsaWNhdGlvbkRldGFpbHM/LnNpZGViYXJJbmZvPy5mYXZpY29uXCIgc3R5bGU9XCJ3aWR0aDogNDBweCAhaW1wb3J0YW50O2Rpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcIiAqbmdJZj1cIiFuYXZDb2xsYXBzZWRcIiBbYWx0XT1cImFwcGxpY2F0aW9uRGV0YWlscz8uc2lkZWJhckluZm8/LmZpcnN0TmFtZVwiIGNsYXNzPVwiZmF2aWNvbi1kaW1lbnNpb25cIiAvPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiYXBwbGljYXRpb25EZXRhaWxzPy5zaWRlYmFySW5mbz8ubG9nb1wiIHN0eWxlPVwiZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1wiICAqbmdJZj1cIm5hdkNvbGxhcHNlZFwiIGNsYXNzPVwibG9nby1kaW1lbnNpb25cIiAvPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaWRlSWRJbmZvID09IDFcIj5cbiAgICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvbG9nb3MvaW50ZW50d2lzZWxvZ28uc3ZnXCIgc3R5bGU9XCJ3aWR0aDogNDBweCAhaW1wb3J0YW50O2Rpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcIiAqbmdJZj1cIiFuYXZDb2xsYXBzZWRcIiBbYWx0XT1cImFwcGxpY2F0aW9uRGV0YWlscz8uc2lkZWJhckluZm8/LmZpcnN0TmFtZVwiIGNsYXNzPVwiZmF2aWNvbi1kaW1lbnNpb24gaW50ZW50d2lzZS1mYXZpY29uXCI+XG4gICAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2xvZ29zL0ludGVudHdpc2Uuc3ZnXCIgIHN0eWxlPVwiZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1wiICpuZ0lmPVwibmF2Q29sbGFwc2VkXCIgW2FsdF09XCJhcHBsaWNhdGlvbkRldGFpbHM/LnNpZGViYXJJbmZvPy5maXJzdE5hbWVcIiBjbGFzcz1cImxvZ28tZGltZW5zaW9uIGludGVudHdpc2UtbG9nb1wiPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXItcm93PlxuICA8L21hdC10b29sYmFyPlxuICA8IS0tIDxkaXYgY2xhc3M9XCJzaWRlYmFyLWNvbGxhcHNlLWljb25cIiAqbmdJZj1cImlzQWRtaW5Sb2xlXCI+XG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cInNpZGVtZW51LWljb24tdG9wXCIgKGNsaWNrKT1cImFsbE1lbnVDb2xsYXBzZSgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic2lkZW5hdiAmJiBzaWRlbmF2Lm9wZW5lZFwiPmtleWJvYXJkX2Fycm93X3VwPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj4gLS0+XG4gIDxkaXYgKm5nSWY9XCJzaWRlbmF2ICYmIHNpZGVuYXYub3BlbmVkICYmICFpbkNvbnRleHRJbnNpZ2h0c1dMQXBwXCIgY2xhc3M9XCJhcHAtbWVudS1jb250YWluZXJcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYXBwLW1lbnUtYnV0dG9uXCIgKm5nSWY9XCJ0b0Rpc3BsYXlBcHBsaWNhdGlvbnMgJiYgdG9EaXNwbGF5QXBwbGljYXRpb25zLmxlbmd0aCA9PSAxXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImFwcC1uYW1lXCI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImN1cnJlbnRBcHA/Lm5hbWVcIiBjbGFzcz1cInNpZGVOYXZJY29uIHt7Y3VycmVudEFwcD8ubmFtZS5zcGxpdCgnICcpLmpvaW4oJycpfX1cIj48L21hdC1pY29uPlxuICAgICAgICA8bGFiZWwgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTRweDtcIiBbaW5uZXJIVE1MXT1cInNlbGVjdGVkQXBwbGljYXRpb24oY3VycmVudEFwcClcIj48L2xhYmVsPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImN1cnJlbnRBcHA/LmJhZGdlXCIgY2xhc3M9XCJiYWRnZS10ZXh0IHNvdi1iZXRhLXBvc2l0aW9uXCI+e3tjdXJyZW50QXBwLmJhZGdlfX08L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImFwcC1tZW51LWJ1dHRvblwiIFttYXQtbWVudS10cmlnZ2VyLWZvcl09XCJhcHBNZW51XCIgKm5nSWY9XCJ0b0Rpc3BsYXlBcHBsaWNhdGlvbnMgJiYgdG9EaXNwbGF5QXBwbGljYXRpb25zLmxlbmd0aCA+IDFcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYXBwLW5hbWVcIj5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiY3VycmVudEFwcD8ubmFtZVwiIGNsYXNzPVwic2lkZU5hdkljb24ge3tjdXJyZW50QXBwPy5uYW1lLnNwbGl0KCcgJykuam9pbignJyl9fVwiPjwvbWF0LWljb24+XG4gICAgICAgIDxsYWJlbCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtNHB4O1wiIFtpbm5lckhUTUxdPVwic2VsZWN0ZWRBcHBsaWNhdGlvbihjdXJyZW50QXBwKVwiPjwvbGFiZWw+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiY3VycmVudEFwcD8uYmFkZ2VcIiBjbGFzcz1cImJhZGdlLXRleHQgc292LWJldGEtcG9zaXRpb25cIj57e2N1cnJlbnRBcHAuYmFkZ2V9fTwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcGRvd24taWNvblwiPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bWF0LW1lbnUgI2FwcE1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJhcHAtbWVudVwiIFtiYWNrZHJvcENsYXNzXT1cIidhbGwtbW9kdWxlLW1lbnVzJ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGVhZG1lbnUgb2YgdG9EaXNwbGF5QXBwbGljYXRpb25zXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtZW51LW9wdGlvblwiIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImdvVG9BcHBsaWNhdGlvbihoZWFkbWVudSlcIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGhlYWRtZW51LnBhbmVsT3BlblN0YXRlfVwiIGNsYXNzPVwie3toZWFkbWVudS5pZH19X2ljb25cIiAqbmdJZj1cImhlYWRtZW51Lm5hbWUgIT0gJ0FjY291bnQgTWFuYWdlbWVudCdcIiB0cmFuc2xhdGU9XCJub1wiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInNpZGVOYXZJY29uIGNoaWxkcmVuLWljb25cIiBbbmdDbGFzc109XCJoZWFkbWVudS5uYW1lLnNwbGl0KCcgJykuam9pbignJylcIj48L21hdC1pY29uPlxuICAgICAgICAgIDxsYWJlbCBbaW5uZXJIVE1MXT1cInNlbGVjdGVkQXBwbGljYXRpb24oaGVhZG1lbnUpXCI+PC9sYWJlbD5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImhlYWRtZW51LmJhZGdlXCIgY2xhc3M9XCJiYWRnZS10ZXh0IHNvdi1iZXRhLXBvc2l0aW9uXCIgW2lubmVySFRNTF09XCJoZWFkbWVudS5iYWRnZVwiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L21hdC1tZW51PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInBvcnRhbC1zaWRuYXYtbWVudVwiIGZ4RmxleD1cIm5vZ3JvdyBub3Nocmlua1wiIGFwcFNjcm9sbGFibGUgW25nQ2xhc3NdPVwieyd3aGl0ZUxhYmVsU2lkZW5hdicgOiBpbkNvbnRleHRJbnNpZ2h0c1dMQXBwfVwiPlxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtleHBhbmRlZF09XCJoZWFkbWVudS5wYW5lbE9wZW5TdGF0ZSA9PSB0cnVlXCIgaGlkZVRvZ2dsZT1cInRydWVcIlxuICAgICAgKm5nRm9yPVwibGV0IGhlYWRtZW51IG9mIHRvRGlzcGxheUFwcGxpY2F0aW9uc1wiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaGVhZG1lbnUuaXNBY3RpdmUgfVwiXG4gICAgICAob3BlbmVkKT1cImhlYWRtZW51LnBhbmVsT3BlblN0YXRlID0gdHJ1ZVwiIChjbG9zZWQpPVwiaGVhZG1lbnUucGFuZWxPcGVuU3RhdGUgPSBmYWxzZVwiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIG1hdFRvb2x0aXA9XCJ7e2dldFRvb2x0aXBJbmZvKGhlYWRtZW51KX19XCIgbWF0VG9vbHRpcENsYXNzPVwibGVmdC1uYXYtdG9vbHRpcFwiXG4gICAgICAgICpuZ0lmPVwiaGVhZG1lbnUudHlwZSA9PSAnZXhwYW5kYWJsZScgZWxzZSBzaW5nbGVNZW51c1wiIGNsYXNzPVwibWFpbi1leHBhbnNpb24tcGFuZWwtaGVhZGVyXCJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9BcHBsaWNhdGlvbihoZWFkbWVudSlcIj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7aGVhZG1lbnUuaWR9fV9pY29uXCI+PC9zcGFuPlxuICAgICAgICAgIDxoMyBjbGFzcz1cInNpZGVtZW51LWhlYWRpbmcgYXBwbGljYXRpb25NZW51XCI+XG4gICAgICAgICAgICA8bGFiZWwgW2lubmVySFRNTF09XCJzZWxlY3RlZEFwcGxpY2F0aW9uKGhlYWRtZW51KVwiPjwvbGFiZWw+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImhlYWRtZW51LmJhZGdlXCIgY2xhc3M9XCJiYWRnZS10ZXh0IHNvdi1iZXRhLXBvc2l0aW9uXCIgW2lubmVySFRNTF09XCJoZWFkbWVudS5iYWRnZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2gzPlxuICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYWluLWNoZXZyb24taWNvblwiICpuZ0lmPVwiIWhlYWRtZW51LnBhbmVsT3BlblN0YXRlXCI+YXJyb3dfcmlnaHQ8L21hdC1pY29uPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1haW4tY2hldnJvbi1pY29uXCIgKm5nSWY9XCJoZWFkbWVudS5wYW5lbE9wZW5TdGF0ZVwiPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgIDxtYXQtbGlzdCBjbGFzcz1cInBhZGRpbmctMHB4XCIgKm5nRm9yPVwibGV0IG1lbnUgb2YgaGVhZG1lbnUuY2hpbGRyZW5cIiBbYXR0ci5pZF09XCJoZWFkbWVudS5pZFwiIFtuZ0NsYXNzXT1cInsnZ3JvdXAtbmF2LW1lbnUnOiBtZW51LmNoaWxkcmVuIH1cIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgKm5nSWY9XCJtZW51LmNoaWxkcmVuIGVsc2UgbGlzdE1lbnVcIiBjbGFzcz1cImRpdi1iYWNrZ3JvdW5kLWNvbG9yLXdoaXRlXCIgW2V4cGFuZGVkXT1cIm1lbnUuaWQgPT0gYWN0aXZlUGFuZWxcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlUGFuZWwnOiBtZW51LmlkID09IGFjdGl2ZVBhbmVsICwgJ3doaXRlTGFiZWxBY3RpdmUnIDogaW5Db250ZXh0SW5zaWdodHNXTEFwcH1cIiBoaWRlVG9nZ2xlPVwidHJ1ZVwiXG4gICAgICAgICAgKG9wZW5lZCk9XCJtZW51LnBhbmVsT3BlblN0YXRlID0gdHJ1ZVwiIChjbG9zZWQpPVwibWVudS5wYW5lbE9wZW5TdGF0ZSA9IGZhbHNlXCI+XG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hlYWRlci1ib3JkZXInOiBtZW51LnBhbmVsT3BlblN0YXRlID09PSB0cnVlLCAnaGVhZGVyLWJvcmRlci1ub25lJzogbWVudS5wYW5lbE9wZW5TdGF0ZSA9PT0gZmFsc2UgfVwiPlxuICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ7e21lbnUuaWR9fV9pY29uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8aW1nIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4XCIgKm5nSWY9XCIobWVudS5pY29uICYmIG1lbnUuaWNvbiAhPSAnJykgZWxzZSBkaXNwbGF5SW5pdGlhbHNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2lkZS1tZW51LWljb24gc2lkZS1tZW51LWljb24tY29sb3JcIiBzcmM9XCJhc3NldHMvc2lkZW1lbnUtaWNvbnMve3ttZW51Lmljb259fVwiIC8+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheUluaXRpYWxzPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlbWVudS1zeW1ib2xcIj5cbiAgICAgICAgICAgICAgICAgIHt7bWVudS5zeW1ib2x9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJtZW51LWhlYWRpbmcgYXBwbGljYXRpb25TdWJtZW51c1wiPjxzcGFuIGNsYXNzPVwibWVudS1uYW1lLWV4cGFuZGFibGVcIiBbaW5uZXJIVE1MXT1cInNlbGVjdGVkQXBwbGljYXRpb24obWVudSlcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtZW51LmJhZGdlXCIgY2xhc3M9XCJiYWRnZS10ZXh0IHNvdi1iZXRhLXBvc2l0aW9uIGxldmVsLXR3by1iYWRnZVwiXG4gICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm1lbnUuYmFkZ2VcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDxtYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInN1Yi1jaGV2cm9uLWljb25cIiAqbmdJZj1cIiFtZW51LnBhbmVsT3BlblN0YXRlXCI+a2V5Ym9hcmRfYXJyb3dfcmlnaHQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzdWItY2hldnJvbi1pY29uXCIgKm5nSWY9XCJtZW51LnBhbmVsT3BlblN0YXRlXCI+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cbiAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDwhLS0gPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+IC0tPlxuICAgICAgICAgIDxtYXQtbmF2LWxpc3QgKm5nRm9yPVwibGV0IGNoaWxkTWVudSBvZiBtZW51LmNoaWxkcmVuO1wiIGNsYXNzPVwic3ViLWNoaWxkLW1lbnVcIj5cbiAgICAgICAgICAgIDxsbmMtbmF2LW1lbnVzIGFwcE9mZnNldFRvcCBbaXNBY3RpdmVJdGVtXT1cImlzQ2hlY2tBY3RpdmVSb3V0ZShjaGlsZE1lbnUsaGVhZG1lbnUsbWVudSlcIiBbaXRlbV09XCJjaGlsZE1lbnVcIlxuICAgICAgICAgICAgICBbYXBwbGljYXRpb25JZF09XCJhcHBsaWNhdGlvbkRldGFpbHMuYXBwbGljYXRpb25JZFwiIFtwYXJlbnRNZW51SWRdPVwiaGVhZG1lbnUuaWRcIiBbcGFyZW50UGFuZWxJZF09XCJtZW51LmlkXCJcbiAgICAgICAgICAgICAgKG1lbnVDbGlja2VkKT1cIm1lbnVDbGlja2VkKCRldmVudClcIiAjbmF2TWVudXNDb21wb25lbnQ+XG4gICAgICAgICAgICA8L2xuYy1uYXYtbWVudXM+XG4gICAgICAgICAgPC9tYXQtbmF2LWxpc3Q+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNsaXN0TWVudT5cbiAgICAgICAgICA8bWF0LW5hdi1saXN0PlxuICAgICAgICAgICAgPGxuYy1uYXYtbWVudXMgYXBwT2Zmc2V0VG9wIFtpc0FjdGl2ZUl0ZW1dPVwiaXNDaGVja0FjdGl2ZVJvdXRlKG1lbnUsaGVhZG1lbnUpXCIgW2l0ZW1dPVwibWVudVwiXG4gICAgICAgICAgICAgIFthcHBsaWNhdGlvbklkXT1cImFwcGxpY2F0aW9uRGV0YWlscy5hcHBsaWNhdGlvbklkXCIgW3BhcmVudE1lbnVJZF09XCJoZWFkbWVudS5pZFwiXG4gICAgICAgICAgICAgIChtZW51Q2xpY2tlZCk9XCJtZW51Q2xpY2tlZCgkZXZlbnQpXCIgI25hdk1lbnVzQ29tcG9uZW50PlxuICAgICAgICAgICAgPC9sbmMtbmF2LW1lbnVzPlxuICAgICAgICAgIDwvbWF0LW5hdi1saXN0PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9tYXQtbGlzdD5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlTWVudXM+XG4gICAgICAgIDxtYXQtbGlzdD5cbiAgICAgICAgICA8bG5jLW5hdi1tZW51cyBpZD1cInt7aGVhZG1lbnUuaWR9fVwiIGFwcE9mZnNldFRvcCBbaXNBY3RpdmVJdGVtXT1cImlzQ2hlY2tBY3RpdmVSb3V0ZShoZWFkbWVudSxoZWFkbWVudSlcIlxuICAgICAgICAgICAgW2l0ZW1dPVwiaGVhZG1lbnVcIiBbYXBwbGljYXRpb25JZF09XCJhcHBsaWNhdGlvbkRldGFpbHMuYXBwbGljYXRpb25JZFwiIFtwYXJlbnRNZW51SWRdPVwiaGVhZG1lbnUuaWRcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cInt7Z2V0VG9vbHRpcEluZm8oaGVhZG1lbnUpfX1cIiBtYXRUb29sdGlwQ2xhc3M9XCJsZWZ0LW5hdi10b29sdGlwXCJcbiAgICAgICAgICAgIChtZW51Q2xpY2tlZCk9XCJtZW51Q2xpY2tlZCgkZXZlbnQpXCIgI25hdk1lbnVzQ29tcG9uZW50PlxuICAgICAgICAgIDwvbG5jLW5hdi1tZW51cz5cbiAgICAgICAgPC9tYXQtbGlzdD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInBvcnRhbC1nbG9iYWwtc2V0dGluZy1tZW51IHN0aWNreV9ib3R0b21fbWVudVwiICpuZ0lmPVwiIWluQ29udGV4dEluc2lnaHRzV0xBcHBcIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbZXhwYW5kZWRdPVwic2V0dGluZ3NIZWFkTWVudS5wYW5lbE9wZW5TdGF0ZSA9PSB0cnVlIHx8IGV4cGFuZEdsb2JhbFNldHRpbmdzXCIgaGlkZVRvZ2dsZT1cInRydWVcIiBpZD1cInt7c2V0dGluZ3NIZWFkTWVudS5pZCArICdtZW51J319XCJcbiAgICAgICpuZ0Zvcj1cImxldCBzZXR0aW5nc0hlYWRNZW51IG9mIHRvRGlzcGxheUdsb2JhbFNldHRpbmdzTWVudVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogc2V0dGluZ3NIZWFkTWVudS5pc0FjdGl2ZSB9XCJcbiAgICAgIChvcGVuZWQpPVwic2lkZW5hdi5vcGVuKCk7IHNldHRpbmdzSGVhZE1lbnUucGFuZWxPcGVuU3RhdGUgPSB0cnVlXCIgKGNsb3NlZCk9XCJzZXR0aW5nc0hlYWRNZW51LnBhbmVsT3BlblN0YXRlID0gZmFsc2U7IGV4cGFuZEdsb2JhbFNldHRpbmdzID0gZmFsc2VcIj5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBtYXRUb29sdGlwPVwie3tnZXRUb29sdGlwSW5mbyhzZXR0aW5nc0hlYWRNZW51KX19XCIgbWF0VG9vbHRpcENsYXNzPVwibGVmdC1uYXYtdG9vbHRpcFwiXG4gICAgICAgICpuZ0lmPVwic2V0dGluZ3NIZWFkTWVudS50eXBlID09ICdleHBhbmRhYmxlJyBlbHNlIHNpbmdsZU1lbnVzXCIgY2xhc3M9XCJtYWluLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJcIlxuICAgICAgICBbbmdDbGFzc109XCJzaWRlbmF2ICYmIHNpZGVuYXYub3BlbmVkID8gJycgOiAnc3RpY2t5LWJvdHRvbS1jbG9zZWQnXCI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZHNfYWNjb3VudF9tZ210X2ljb25cIj48L3NwYW4+XG4gICAgICAgICAgPGgzIGNsYXNzPVwic2lkZW1lbnUtaGVhZGluZyBhcHBsaWNhdGlvbk1lbnVcIj5cbiAgICAgICAgICAgIDxsYWJlbCBbaW5uZXJIVE1MXT1cInNlbGVjdGVkQXBwbGljYXRpb24oc2V0dGluZ3NIZWFkTWVudSlcIj48L2xhYmVsPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZXR0aW5nc0hlYWRNZW51LmJhZGdlXCIgY2xhc3M9XCJiYWRnZS10ZXh0IHNvdi1iZXRhLXBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJzZXR0aW5nc0hlYWRNZW51LmJhZGdlXCI+PC9zcGFuPlxuICAgICAgICAgIDwvaDM+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1haW4tY2hldnJvbi1pY29uXCIgKm5nSWY9XCIhc2V0dGluZ3NIZWFkTWVudS5wYW5lbE9wZW5TdGF0ZVwiPmFycm93X3JpZ2h0PC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYWluLWNoZXZyb24taWNvblwiICpuZ0lmPVwic2V0dGluZ3NIZWFkTWVudS5wYW5lbE9wZW5TdGF0ZVwiPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgIDxtYXQtbGlzdCBjbGFzcz1cInBhZGRpbmctMHB4XCIgKm5nRm9yPVwibGV0IG1lbnUgb2Ygc2V0dGluZ3NIZWFkTWVudS5jaGlsZHJlblwiIFthdHRyLmlkXT1cInNldHRpbmdzSGVhZE1lbnUuaWRcIlxuICAgICAgICBbbmdDbGFzc109XCJ7J2dyb3VwLW5hdi1tZW51JzogbWVudS5jaGlsZHJlbiB9XCI+XG4gICAgICAgIDxtYXQtbmF2LWxpc3Q+XG4gICAgICAgICAgPGxuYy1uYXYtbWVudXMgYXBwT2Zmc2V0VG9wIFtpc0FjdGl2ZUl0ZW1dPVwiaXNDaGVja0FjdGl2ZVJvdXRlKG1lbnUsc2V0dGluZ3NIZWFkTWVudSlcIiBbaXRlbV09XCJtZW51XCJcbiAgICAgICAgICAgIFthcHBsaWNhdGlvbklkXT1cImFwcGxpY2F0aW9uRGV0YWlscy5hcHBsaWNhdGlvbklkXCIgW3BhcmVudE1lbnVJZF09XCJzZXR0aW5nc0hlYWRNZW51LmlkXCJcbiAgICAgICAgICAgIChtZW51Q2xpY2tlZCk9XCJtZW51Q2xpY2tlZCgkZXZlbnQpXCIgI25hdk1lbnVzQ29tcG9uZW50PlxuICAgICAgICAgIDwvbG5jLW5hdi1tZW51cz5cbiAgICAgICAgPC9tYXQtbmF2LWxpc3Q+XG4gICAgICA8L21hdC1saXN0PlxuICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVNZW51cz5cbiAgICAgICAgPG1hdC1saXN0PlxuICAgICAgICAgIDxsbmMtbmF2LW1lbnVzIFthdHRyLmlkXT1cInNldHRpbmdzSGVhZE1lbnUuaWRcIiBhcHBPZmZzZXRUb3BcbiAgICAgICAgICAgIFtpc0FjdGl2ZUl0ZW1dPVwiaXNDaGVja0FjdGl2ZVJvdXRlKHNldHRpbmdzSGVhZE1lbnUsc2V0dGluZ3NIZWFkTWVudSlcIiBbaXRlbV09XCJzZXR0aW5nc0hlYWRNZW51XCJcbiAgICAgICAgICAgIFthcHBsaWNhdGlvbklkXT1cImFwcGxpY2F0aW9uRGV0YWlscy5hcHBsaWNhdGlvbklkXCIgW3BhcmVudE1lbnVJZF09XCJzZXR0aW5nc0hlYWRNZW51LmlkXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7e2dldFRvb2x0aXBJbmZvKHNldHRpbmdzSGVhZE1lbnUpfX1cIiBtYXRUb29sdGlwQ2xhc3M9XCJsZWZ0LW5hdi10b29sdGlwXCJcbiAgICAgICAgICAgIChtZW51Q2xpY2tlZCk9XCJtZW51Q2xpY2tlZCgkZXZlbnQpXCIgI25hdk1lbnVzQ29tcG9uZW50PlxuICAgICAgICAgIDwvbG5jLW5hdi1tZW51cz5cbiAgICAgICAgPC9tYXQtbGlzdD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gIDwvZGl2PlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI2Vycm9yQmxvY2s+XG4gIDxkaXYgY2xhc3M9XCJlcnJvck1zZ1wiPlxuICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5lcnJvcjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cImVycm9yVHh0XCI+e3tlcnJvck1zZ319PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxhIGNsYXNzPVwiaGFtYnVyZ2VyLWljb24gZXhwYW5kZWQtaGFtYnVyZ2VyLWljb25cIiB0aXRsZT1cIlRvZ2dsZSBNZW51XCIgKGNsaWNrKT1cInNpZGVuYXYuY2xvc2UoKTthbGxNZW51Q29sbGFwc2UoKTsgXCI+XG4gIDxtYXQtaWNvbiBjbGFzcz1cImxlZnQtY2hldnJvbi1pY29uXCI+a2V5Ym9hcmRfYXJyb3dfbGVmdDwvbWF0LWljb24+XG48L2E+XG5cbjwhLS0gPGltZyAqbmdJZj1cInNob3dNZW51SWNvbigpXCIgY2xhc3M9XCJmYXZpY29uLWRpbWVuc2lvblwiIHNyYz17e2FwcGxpY2F0aW9uRGV0YWlscy5zaWRlYmFySW5mby5mYXZpY29ufX0gYWx0PVwiSW50ZW50d2lzZSBGYXZpY29uXCIgLz5cbiAgPGEgKm5nSWY9XCJzaG93TWVudUljb24oKVwiIHRpdGxlPVwiVG9nZ2xlIE1lbnVcIiBjbGFzcz1cImhhbWJ1cmdlci1pY29uIGNvbGxhcHNlZC1oYW1idXJnZXJcIlxuICAgIChjbGljayk9XCJzaWRlbmF2Lm9wZW4oKVwiPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cInJpZ2h0LWNoZXZyb24taWNvblwiPmtleWJvYXJkX2Fycm93X3JpZ2h0PC9tYXQtaWNvbj5cbiAgPC9hPiAtLT4iXX0=
572
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tc2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcHBsaWNhdGlvbi1zaWRlYmFyL3NyYy9saWIvYXBwbGljYXRpb24tc2lkZWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcHBsaWNhdGlvbi1zaWRlYmFyL3NyYy9saWIvYXBwbGljYXRpb24tc2lkZWJhci50ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFlLGVBQWUsRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBMkIsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTcEUsTUFBTSxPQUFPLDJCQUEyQjtJQXlCN0I7SUFDQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBNUJELGtCQUFrQixDQUFhO0lBRS9CLE9BQU8sQ0FBYTtJQUVLLFNBQVMsQ0FBZ0M7SUFD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QUFDLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLEVBQUU7d0JBQ3BILE9BQU8sSUFBSSxDQUFDO3FCQUNiO29CQUFBLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUE7YUFDSDtZQUNELE9BQU8sQ0FBQyxZQUFZLElBQUksSUFBSSxJQUFJLENBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1NBQzNKO0lBQ0wsQ0FBQzsySEExakJVLDJCQUEyQjsrR0FBM0IsMkJBQTJCLDhLQU8zQixtQkFBbUIsd0tBRGhCLGtCQUFrQixxRUN6QmxDLGcwWUFpTVU7OzRGRDlLRywyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0Usd0JBQXdCOytQQU96QixrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUU0QixTQUFTO3NCQUExQyxZQUFZO3VCQUFDLGtCQUFrQjtnQkFDQSxJQUFJO3NCQUFuQyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDRSxpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciwgUm91dGVyRXZlbnQsIE5hdmlnYXRpb25TdGFydCwgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblNpZGViYXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbi1zaWRlYmFyLnNlcnZpY2UnXG5pbXBvcnQgeyBNYXRTaWRlbmF2IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5pbXBvcnQgeyBhcHBEZXRhaWxzIH0gZnJvbSAnLi9hcHAtZGV0YWlscydcbmltcG9ydCB7IE9mZnNldFRvcERpcmVjdGl2ZSwgU2Nyb2xsYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4vbmF2LW1lbnUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJlc3RBcGlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9yZXN0LWFwaS5zZXJ2aWNlcydcbmltcG9ydCB7IE5hdk1lbnVzQ29tcG9uZW50IH0gZnJvbSAnLi9uYXYtbWVudXMvbmF2LW1lbnVzLmNvbXBvbmVudCdcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICduZ3gtY29va2llLXNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEdMT0JBTF9MSVNUIH0gZnJvbSAnLi9uYXZtZW51MSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xuYy1uYXZpZ2F0aW9uLXNpZGViYXInLFxuICB0ZW1wbGF0ZVVybDonLi9hcHBsaWNhdGlvbi1zaWRlYmFyLnRlbXBsYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6WycuL2FwcGxpY2F0aW9uLXNpZGViYXIuc2NzcycsJ2FwcGxpY2F0aW9uLXNpZGViYXIudGhlbWUuc2NzcyddLFxuICAvLyBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvblNpZGViYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCkgYXBwbGljYXRpb25EZXRhaWxzIDphcHBEZXRhaWxzO1xuXG4gIEBJbnB1dCgpIHNpZGVuYXY6IE1hdFNpZGVuYXY7XG5cbiAgQFZpZXdDaGlsZHJlbihPZmZzZXRUb3BEaXJlY3RpdmUpIGxpc3RJdGVtczogUXVlcnlMaXN0PE9mZnNldFRvcERpcmVjdGl2ZT47XG4gIEBWaWV3Q2hpbGQoU2Nyb2xsYWJsZURpcmVjdGl2ZSkgbGlzdDogU2Nyb2xsYWJsZURpcmVjdGl2ZTtcbiAgQFZpZXdDaGlsZCgnbmF2TWVudXNDb21wb25lbnQnKSBuYXZNZW51c0NvbXBvbmVudDpOYXZNZW51c0NvbXBvbmVudDtcblxuICBhY2NvdW50TmFtZTogYW55O1xuICBhY3RpdmVQYW5lbDogYW55O1xuICBuYXZDb2xsYXBzZWQ6Ym9vbGVhbiA9IGZhbHNlO1xuICBvbGRMaXN0SXRlbXM6IFF1ZXJ5TGlzdDxPZmZzZXRUb3BEaXJlY3RpdmU+O1xuICBpc0FkbWluUm9sZTogYm9vbGVhbiA9IGZhbHNlO1xuICBhZG1pblJvbGVzID0gWydTVVBFUl9BRE1JTicsJ1NVUEVSX0FETUlOX1JFQURfT05MWSddO1xuICBjdXJyZW50QXBwOiBhbnk7XG4gIHNpZGVOYXZTdGF0dXNTdWJzY3JpcHRpb246IGFueTtcbiAgbXlPYnNlcnZlcjogYW55O1xuICBleHBhbmRHbG9iYWxTZXR0aW5nczogYW55ID0gZmFsc2U7XG4gIGluQ29udGV4dEluc2lnaHRzV0xBcHA6IGJvb2xlYW47XG5cbiAgLy8gaXNHbG9iYWxTZXR0aW5nc01lbnVBY3RpdmU6Ym9vbGVhbiA9IGZhbHNlXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hdmlnYXRpb246IEFwcGxpY2F0aW9uU2lkZWJhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIFJlc3RBcGlTZXJ2aWNlOiBSZXN0QXBpU2VydmljZSxcbiAgICBwcml2YXRlIGNvb2tpZTogQ29va2llU2VydmljZSxcbiAgICBwcml2YXRlIGNkcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uOlRyYW5zbGF0aW9uU2VydmljZVxuICAgICkge1xuICAgICAgdGhpcy5teU9ic2VydmVyID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgICAgdGhpcy5leHBhbmRHbG9iYWxTZXR0aW5ncyA9IHRoaXMucm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCkuZXh0cmFzLnN0YXRlICYmIHRoaXMucm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCkuZXh0cmFzLnN0YXRlLmV4cGFuZFBhbmVsOyAgICAgICAgXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcGFuZWxPcGVuU3RhdGUgPSBmYWxzZTtcbiAgbWFpblBhbmVsT3BlblN0YXRlID0gZmFsc2U7XG4gIHB1YmxpYyBwcmV2QWN0aXZlSGVhZE1lbnU7XG4gIHB1YmxpYyB0b0Rpc3BsYXlBcHBsaWNhdGlvbnMgPSBbXTtcbiAgcHVibGljIHRvRGlzcGxheUdsb2JhbFNldHRpbmdzTWVudTogYW55W107XG4gIHB1YmxpYyBlcnJvck1zZzpzdHJpbmc7XG5cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYodGhpcy5hcHBsaWNhdGlvbkRldGFpbHNbJ3VzZXJJbmZvJ10pe1xuICAgICAgbGV0IHVzZXJSb2xlID0gdGhpcy5hcHBsaWNhdGlvbkRldGFpbHNbJ3VzZXJJbmZvJ10ucm9sZTtcbiAgICAgIHRoaXMuaXNBZG1pblJvbGUgPSB0aGlzLmFkbWluUm9sZXMuaW5kZXhPZih1c2VyUm9sZSkgPiAtMSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jYWxjdWxhdGVMZWZ0bmF2U3RhdHVzKCk7XG4gICAgLy8gY29uc3QgY29uZmlncyA9IHRoaXMucm91dGVyLmNvbmZpZztcbiAgICAvLyBmb3IobGV0IGNvbmZpZyBvZiBjb25maWdzKXtcbiAgICAvLyAgIGlmKGNvbmZpZy5jaGlsZHJlbil7XG4gICAgLy8gICAgIGZvcihsZXQgY2hpbGQgb2YgY29uZmlnLmNoaWxkcmVuKXtcbiAgICAvLyAgICAgICBjaGlsZC5jYW5BY3RpdmF0ZSA9IFtDYW5Mb2FkR3VhcmRdXG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgLy8gdGhpcy5yb3V0ZXIucmVzZXRDb25maWcoY29uZmlncyk7XG4gICAgdGhpcy5jaGVja0FwcGxpY2F0aW9uRGV0YWlscyh0aGlzLmFwcGxpY2F0aW9uRGV0YWlscyk7XG4gIH1cblxuICBjYWxjdWxhdGVMZWZ0bmF2U3RhdHVzKCl7XG4gICAgaWYodGhpcy5zaWRlbmF2ICYmIHRoaXMuc2lkZW5hdi5vcGVuZWRDaGFuZ2Upe1xuICAgICAgbGV0IHN0YXR1cyAgICAgICAgICA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2xlZnROYXZPcGVuU3RhdHVzJyk7XG4gICAgICB0aGlzLm5hdkNvbGxhcHNlZCAgID0gc3RhdHVzICYmIHN0YXR1cyA9PSAnZmFsc2UnID8gZmFsc2UgOiB0cnVlO1xuICAgICAgdGhpcy5zaWRlbmF2Lm9wZW5lZCA9IHN0YXR1cyAmJiBzdGF0dXMgPT0gJ2ZhbHNlJyA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgIHRoaXMuc2lkZU5hdlN0YXR1c1N1YnNjcmlwdGlvbiA9IHRoaXMuc2lkZW5hdi5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKChzdGF0dXMpPT57XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2xlZnROYXZPcGVuU3RhdHVzJyxKU09OLnN0cmluZ2lmeShzdGF0dXMpKTtcbiAgICAgICAgdGhpcy5uYXZDb2xsYXBzZWQgICA9IHN0YXR1cztcbiAgICAgICAgdGhpcy5zaWRlbmF2Lm9wZW5lZCA9IHN0YXR1cztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyAgY2hlY2tBcHBsaWNhdGlvbkRldGFpbHMoYXBwbGljYXRpb25EZXRhaWxzOiBhcHBEZXRhaWxzKSB7XG4gICAgdGhpcy5lcnJvck1zZyA9ICcnO1xuICAgIGlmKGFwcGxpY2F0aW9uRGV0YWlscy5hcHBsaWNhdGlvbklkICE9ICdhZHNfYW1hem9uX2RzcCcpe1xuICAgICAgdGhpcy5jcmVhdGVBcHBEZXRhaWxzKGFwcGxpY2F0aW9uRGV0YWlscylcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQXBwRGV0YWlscyhhcHBsaWNhdGlvbkRldGFpbHM6IGFwcERldGFpbHMpe1xuICAgIHRoaXMuY3JlYXRlTmF2aWdhdGlvblNpZGVCYXIodGhpcy5hcHBsaWNhdGlvbkRldGFpbHMpO1xuICAgIC8vIGlmKHRoaXMuYXBwbGljYXRpb25EZXRhaWxzLmN1cnJlbnRBY2NvdW50KXtcbiAgICAvLyAgIHRoaXMuZ2V0QWN0aXZlUmVjb0NvdW50KHRoaXMuYXBwbGljYXRpb25EZXRhaWxzLmN1cnJlbnRBY2NvdW50KTtcbiAgICAvLyB9XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlTmF2aWdhdGlvblNpZGVCYXIoYXBwbGljYXRpb25EZXRhaWxzOiBhcHBEZXRhaWxzKSB7XG4gICAgdGhpcy5SZXN0QXBpU2VydmljZS5nZXRqc29uTWVudWxpc3RzKGFwcGxpY2F0aW9uRGV0YWlscykuc3Vic2NyaWJlKChtZW51bGlzdHM6IGFueSkgPT4ge1xuICAgICAgLy8gbGV0IG1lbnVsaXN0cyA9IEdMT0JBTF9MSVNUXG4gICAgICB0aGlzLnRvRGlzcGxheUFwcGxpY2F0aW9ucyA9IHRoaXMubmF2aWdhdGlvbi5nZXRNZW51TGlzdChhcHBsaWNhdGlvbkRldGFpbHMsIG1lbnVsaXN0cyk7XG4gICAgICB0aGlzLnRvRGlzcGxheUdsb2JhbFNldHRpbmdzTWVudSA9IHRoaXMubmF2aWdhdGlvbi5nZXRHbG9iYWxTZXR0aW5nc01lbnUoYXBwbGljYXRpb25EZXRhaWxzLCBtZW51bGlzdHMpO1xuICAgICAgdGhpcy5leHBhbmRDdXJyZW50TWVudU9ubHkoYXBwbGljYXRpb25EZXRhaWxzLCBmYWxzZSk7XG4gICAgICB0aGlzLmV4cGFuZENoaWxkTWVudU9ubHkodGhpcy50b0Rpc3BsYXlHbG9iYWxTZXR0aW5nc01lbnUpO1xuICAgICAgdGhpcy5jaGVja0ZvclJlZGlyZWN0aW9uKHRoaXMudG9EaXNwbGF5QXBwbGljYXRpb25zLHRoaXMudG9EaXNwbGF5R2xvYmFsU2V0dGluZ3NNZW51LGFwcGxpY2F0aW9uRGV0YWlscyk7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnRvRGlzcGxheUFwcGxpY2F0aW9ucyAsIHRoaXMudG9EaXNwbGF5R2xvYmFsU2V0dGluZ3NNZW51KTtcbiAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVNZW51KCk7XG4gICAgICB0aGlzLnNldE1lbnVMaXN0KGFwcGxpY2F0aW9uRGV0YWlscy5hcHBsaWNhdGlvbklkLHRoaXMudG9EaXNwbGF5QXBwbGljYXRpb25zKTtcbiAgICAgIHRoaXMuaW5Db250ZXh0SW5zaWdodHNXTEFwcCA9IHRoaXMuaGlkZU1lbnVGb3JXTCgpO1xuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIHNldE1lbnVMaXN0KGFwcElkLG1lbnVMaXN0KXtcbiAgICB2YXIgYXBwRGV0YWlsczphbnkgPSBuZXcgT2JqZWN0KCk7XG4gICAgYXBwRGV0YWlscy5hcHBpY2F0aW9uSWQgPSBhcHBJZDtcbiAgICBhcHBEZXRhaWxzLm1lbnVMaXN0ID0gbWVudUxpc3QuZmluZCgobWVudSk9PnsgcmV0dXJuIG1lbnUuaWQgPT0gYXBwSWR9KVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBEZXRhaWxzJyxKU09OLnN0cmluZ2lmeShhcHBEZXRhaWxzKSk7XG4gIH1cblxuICBwdWJsaWMgbWVudUNsaWNrZWQob2JqOiBhbnkpIHtcbiAgICB0aGlzLmV4cGFuZEN1cnJlbnRNZW51T25seSh0aGlzLmFwcGxpY2F0aW9uRGV0YWlscywgdHJ1ZSk7XG4gICAgdGhpcy5leHBhbmRDaGlsZE1lbnVPbmx5KHRoaXMudG9EaXNwbGF5R2xvYmFsU2V0dGluZ3NNZW51KTtcbiAgICBpZihvYmopIHtcbiAgICAgIHRoaXMuYWN0aXZlUGFuZWwgPSBvYmouYWN0aXZlUGFuZWw7XG4gICAgfVxuICB9XG4gIFxuICBwdWJsaWMgZXhwYW5kQ2hpbGRNZW51T25seSh0b0Rpc3BsYXlHbG9iYWxTZXR0aW5nc01lbnUpIHtcbiAgICBzZXRUaW1lb3V0KCgpPT57XG4gICAgICAgLy8gdGhpcy5pc0dsb2JhbFNldHRpbmdzTWVudUFjdGl2ZSA9IGZhbHNlO1xuICAgICAgbGV0IHVybEFycmF5ID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCcvJyk7XG4gICAgICBsZXQgcm91dGVVcmwgPSB1cmxBcnJheVt1cmxBcnJheS5sZW5ndGggLSAxXTtcbiAgICAgIGxldCBjdXJyZW50Um91dGUgPSByb3V0ZVVybC5zcGxpdCgnPycpWzBdO1xuICAgICAgICBpZih0b0Rpc3BsYXlHbG9iYWxTZXR0aW5nc01lbnUgJiYgdG9EaXNwbGF5R2xvYmFsU2V0dGluZ3NNZW51Lmxlbmd0aCkge1xuICAgICAgICAgIHRvRGlzcGxheUdsb2JhbFNldHRpbmdzTWVudVswXS5wYW5lbE9wZW5TdGF0ZSA9IGZhbHNlO1xuICAgICAgICBpZih0b0Rpc3BsYXlHbG9iYWxTZXR0aW5nc01lbnVbMF0uY2hpbGRyZW4gJiYgdG9EaXNwbGF5R2xvYmFsU2V0dGluZ3NNZW51WzBdLmNoaWxkcmVuLmxlbmd0aCl7XG4gICAgICAgICAgZm9yKGxldCBtZW51IG9mIHRvRGlzcGxheUdsb2JhbFNldHRpbmdzTWVudVswXS5jaGlsZHJlbil7XG4gICAgICAgICAgICBpZihtZW51LnJvdXRlPT1jdXJyZW50Um91dGUpe1xuICAgICAgICAgICAgICB0b0Rpc3BsYXlHbG9iYWxTZXR0aW5nc01lbnVbMF0ucGFuZWxPcGVuU3RhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAvLyB0aGlzLmlzR2xvYmFsU2V0dGluZ3NNZW51QWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMTAwKVxuICAgXG4gIH1cblxuICBwdWJsaWMgZXhwYW5kQ3VycmVudE1lbnVPbmx5KGFwcGxpY2F0aW9uRGV0YWlscywgb25NZW51Q2xpY2tlZCkge1xuICAgIGZvcihsZXQgaGVhZE1lbnUgb2YgdGhpcy50b0Rpc3BsYXlBcHBsaWNhdGlvbnMpIHtcbiAgICAgIGhlYWRNZW51LnBhbmVsT3BlblN0YXRlID0gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIGZvcihsZXQgaGVhZE1lbnUgb2YgdGhpcy50b0Rpc3BsYXlBcHBsaWNhdGlvbnMpIHtcbiAgICAgICAgaWYoaGVhZE1lbnUuaWQgPT0gYXBwbGljYXRpb25EZXRhaWxzLmFwcGxpY2F0aW9uSWQpIHtcbiAgICAgICAgICBoZWFkTWVudS5wYW5lbE9wZW5TdGF0ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5jdXJyZW50QXBwID0gaGVhZE1lbnU7XG4gICAgICAgIH0gZWxzZSBpZihoZWFkTWVudS5pZC5pbmRleE9mKGFwcGxpY2F0aW9uRGV0YWlscy5hcHBsaWNhdGlvbklkKSA+IC0xKSB7XG4gICAgICAgICAgaGVhZE1lbnUucGFuZWxPcGVuU3RhdGUgPSBmYWxzZTtcblxuICAgICAgICAgIGxldCB1cmxBcnJheSA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnLycpO1xuICAgICAgICAgIGxldCByb3V0ZVVybCA9IHVybEFycmF5W3VybEFycmF5Lmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmKChoZWFkTWVudS5pZD09IFwiYWRzX2FtYXpvbl9zZWxsZXJfc2VsbGVyX2FuYWx5dGljc1wiIHx8IGhlYWRNZW51LmlkPT0gXCJhZHNfYW1hem9uX3NlbGxlcl92ZW5kb3JfYW5hbHl0aWNzXCIpICYmIHVybEFycmF5Lmxlbmd0aCA+Mil7XG4gICAgICAgICAgICB1cmxBcnJheT0gdXJsQXJyYXkuc2xpY2UodXJsQXJyYXkubGVuZ3RoLTIpO1xuICAgICAgICAgICAgcm91dGVVcmw9IHVybEFycmF5LmpvaW4oJy8nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGN1cnJlbnRSb3V0ZSA9IHJvdXRlVXJsLnNwbGl0KCc/JylbMF07XG4gICAgICAgICAgaWYoaGVhZE1lbnUuaWQgPT0gXCJhZHNfYW1hem9uX2NvbnRlbnRfY29udGVudF9hbmFseXRpY3NcIiAmJiB0aGlzLm5hdmlnYXRpb24uY29udGVudEFwcFJvdXRlcy5pbmRleE9mKGN1cnJlbnRSb3V0ZSk+LTEgKSB7XG4gICAgICAgICAgICBoZWFkTWVudS5wYW5lbE9wZW5TdGF0ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBcHAgPSBoZWFkTWVudTtcbiAgICAgICAgICB9IGVsc2UgaWYoaGVhZE1lbnUuaWQgPT0gXCJhZHNfYW1hem9uX2NvbnRlbnRfc2hhcmVfb2Zfdm9pY2VcIiAmJiB0aGlzLm5hdmlnYXRpb24uc292QXBwUm91dGVzLmluZGV4T2YoY3VycmVudFJvdXRlKT4tMSkge1xuICAgICAgICAgICAgICBpZigoY3VycmVudFJvdXRlICE9ICdwcm9kdWN0LW1ldGEtZGF0YScgJiYgY3VycmVudFJvdXRlICE9ICdicmFuZC10ZXJtcy1zZXR0aW5ncycgJiYgY3VycmVudFJvdXRlICE9ICdsYWJlbHMtc2V0dGluZ3MnICYmIGN1cnJlbnRSb3V0ZSAhPSAnc3ViLWJyYW5kcycgJiYgY3VycmVudFJvdXRlICE9ICdzdWItYnJhbmRzLW1hcHBpbmcnICYmIGN1cnJlbnRSb3V0ZSAhPSAnc292LXNldHRpbmdzJyAmJiBjdXJyZW50Um91dGUgIT0gJ2NvbnRlbnQtc2V0dGluZ3MnICYmIGN1cnJlbnRSb3V0ZSAhPSAnc2VhcmNoLXF1ZXJ5LXBlcmZvcm1hbmNlJykgfHwgIXRoaXMuY3VycmVudEFwcCB8fCB0aGlzLmN1cnJlbnRBcHAubmFtZSA9PSAnU2hhcmUgT2YgVm9pY2UnKSB7XG4gICAgICAgICAgICAgICAgaGVhZE1lbnUucGFuZWxPcGVuU3RhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFwcCA9IGhlYWRNZW51O1xuICAgICAgICAgICAgICAgIGlmKG9uTWVudUNsaWNrZWQgfHwgdGhpcy5jdXJyZW50QXBwLm5hbWUgPT0gJ1NoYXJlIE9mIFZvaWNlJykge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZihoZWFkTWVudS5pZCA9PSBcImFkc19hbWF6b25fc2VsbGVyX3NlbGxlcl9hbmFseXRpY3NcIiAmJiB0aGlzLm5hdmlnYXRpb24uc2VsbGVyQW5hbHl0aWNzQXBwUm91dGVzLmluZGV4T2YoY3VycmVudFJvdXRlKT4tMSl7XG4gICAgICAgICAgICBoZWFkTWVudS5wYW5lbE9wZW5TdGF0ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBcHAgPSBoZWFkTWVudTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZihoZWFkTWVudS5pZCA9PSBcImFkc19hbWF6b25fc2VsbGVyX3ZlbmRvcl9hbmFseXRpY3NcIiAmJiB0aGlzLm5hdmlnYXRpb24udmVuZG9yQW5hbHl0aWNzQXBwUm91dGVzLmluZGV4T2YoY3VycmVudFJvdXRlKT4tMSkge1xuICAgICAgICAgICAgaWYoKGN1cnJlbnRSb3V0ZSAhPSAncHJvZHVjdC1tZXRhLWRhdGEnICYmIGN1cnJlbnRSb3V0ZSAhPSAnYnJhbmQtdGVybXMtc2V0dGluZ3MnICYmIGN1cnJlbnRSb3V0ZSAhPSAnbGFiZWxzLXNldHRpbmdzJyAgJiYgY3VycmVudFJvdXRlICE9ICdzdWItYnJhbmRzJyAmJiBjdXJyZW50Um91dGUgIT0gJ3N1Yi1icmFuZHMtbWFwcGluZycgJiYgY3VycmVudFJvdXRlICE9ICdzb3Ytc2V0dGluZ3MnICYmIGN1cnJlbnRSb3V0ZSAhPSAnY29udGVudC1zZXR0aW5ncycgJiYgY3VycmVudFJvdXRlICE9ICdzZWFyY2gtcXVlcnktcGVyZm9ybWFuY2UnKSB8fCAhdGhpcy5jdXJyZW50QXBwIHx8IHRoaXMuY3VycmVudEFwcC5uYW1lID09ICdWZW5kb3IgQW5hbHl0aWNzJykge1xuICAgICAgICAgICAgICBoZWFkTWVudS5wYW5lbE9wZW5TdGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudEFwcCA9IGhlYWRNZW51O1xuICAgICAgICAgICAgICBpZihvbk1lbnVDbGlja2VkIHx8IHRoaXMuY3VycmVudEFwcC5uYW1lID09ICdWZW5kb3IgQW5hbHl0aWNzJykge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhlYWRNZW51LnBhbmVsT3BlblN0YXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gIGlmKGhlYWRNZW51LmNoaWxkcmVuKXtcbiAgICAgICAgLy8gICAgaGVhZE1lbnUuY2hpbGRyZW4uZm9yRWFjaChtZW51ID0+IHtcbiAgICAgICAgLy8gICAgICBpZiAobWVudS5jaGlsZHJlbiAmJiBtZW51LnR5cGUgPT0gXCJleHBhbmRhYmxlXCIpIHtcbiAgICAgICAgLy8gICAgICAgIGhlYWRNZW51LmNoaWxkcmVuLmZvckVhY2goc3VibWVudSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgaWYodGhpcy5pc0NoZWNrQWN0aXZlUm91dGUoc3VibWVudS5yb3V0ZSxoZWFkTWVudSkpe1xuICAgICAgICAvLyAgICAgICAgICAgIG1lbnUucGFuZWxPcGVuU3RhdGUgPSB0cnVlO1xuICAgICAgICAvLyAgICAgICAgICAgIGhlYWRNZW51LnBhbmVsT3BlblN0YXRlID0gdHJ1ZTtcblxuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgIH0pXG4gICAgICAgIC8vICAgICAgfVxuICAgICAgICAvLyAgICB9KTtcbiAgICAgICAgLy8gfVxuICAgICAgfVxuICAgICAgdGhpcy5jZHJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gIHB1YmxpYyBnZXRUb29sdGlwSW5mbyhoZWFkbWVudSl7XG4gICAgaWYodGhpcy5zaWRlbmF2ICYmIHRoaXMuc2lkZW5hdi5vcGVuZWQpe1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEFwcGxpY2F0aW9uKGhlYWRtZW51KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0ZWRBcHBsaWNhdGlvbihoZWFkbWVudSl7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb24uc2VsZWN0ZWRBcHBsaWNhdGlvbih0aGlzLmFwcGxpY2F0aW9uRGV0YWlscywgaGVhZG1lbnUpO1xuICB9XG4gIGdldCBzaWRlSWRJbmZvKCl7XG4gICAgaWYodGhpcy5hcHBsaWNhdGlvbkRldGFpbHMgJiYgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHMuc2lkZWJhckluZm8gJiYgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHMuc2lkZWJhckluZm8uc2l0ZUlkKXtcbiAgICAgIHJldHVybiBOdW1iZXIodGhpcy5hcHBsaWNhdGlvbkRldGFpbHMuc2lkZWJhckluZm8uc2l0ZUlkKVxuICAgIH1lbHNlIGlmKHRoaXMuYXBwbGljYXRpb25EZXRhaWxzICYmIHRoaXMuYXBwbGljYXRpb25EZXRhaWxzICYmIHRoaXMuYXBwbGljYXRpb25EZXRhaWxzWydzaXRlSWQnXSl7XG4gICAgICByZXR1cm4gTnVtYmVyKHRoaXMuYXBwbGljYXRpb25EZXRhaWxzWydzaXRlSWQnXSlcbiAgICB9XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuXG4gIHB1YmxpYyBjaGVja0ZvclJlZGlyZWN0aW9uKGFwcE1lbnVzLCBnc01lbnVzLCBhcHBsaWNhdGlvbkRldGFpbHMpIHtcbiAgICBjb25zdCBjdXJyZW50Um91dGUgPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoJz8nKVswXTtcbiAgICBjb25zdCBjdXJyZW50QXBwTWVudXMgPSBhcHBNZW51cy5maW5kKGFwcCA9PiAgYXBwLmlkLmluZGV4T2YoYXBwbGljYXRpb25EZXRhaWxzLmFwcGxpY2F0aW9uSWQpID49IDApO1xuXG4gICAgaWYgKGN1cnJlbnRBcHBNZW51cykge1xuICAgICAgY29uc3QgYWxsTWVudXMgPSBbY3VycmVudEFwcE1lbnVzLCAuLi5nc01lbnVzXTtcbiAgICAgIGNvbnN0IGlzTWVudUF2YWlsYWJsZSA9IGZpbmRMaW5rKGFsbE1lbnVzKTtcbiAgICAgIGlmICghaXNNZW51QXZhaWxhYmxlKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbi5nZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUoY3VycmVudEFwcE1lbnVzLmRlZmF1bHR1cmwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb24uZ2V0SG9zdE9yaWdpbkFuZE5hdmlnYXRlKHRoaXMudG9EaXNwbGF5QXBwbGljYXRpb25zWzBdLmRlZmF1bHR1cmwpO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gaXNNZW51Um91dGVNYXRjaChsaW5rKSB7XG4gICAgICByZXR1cm4gY3VycmVudFJvdXRlID09PSBgLyR7bGlua31gO1xuICAgIH0gXG5cbiAgICBmdW5jdGlvbiBmaW5kTGluayhtZW51QXJyYXkpIHtcbiAgICAgIHJldHVybiBtZW51QXJyYXkuc29tZShmdW5jdGlvbihtZW51KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIG1lbnUgaGFzIGNoaWxkcmVuLCBzZWFyY2ggcmVjdXJzaXZlbHlcbiAgICAgICAgICBpZiAobWVudS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICByZXR1cm4gZmluZExpbmsobWVudS5jaGlsZHJlbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgbWVudSBpdGVtIGhhcyBhIG1hdGNoaW5nIGxpbmtcbiAgICAgICAgICBpZiAoaXNNZW51Um91dGVNYXRjaChtZW51LnJvdXRlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgY2hpbGQgcm91dGVzLCBzZWFyY2ggd2l0aGluIHRoZW1cbiAgICAgICAgICBpZiAobWVudS5jaGlsZF9yb3V0ZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1lbnUuY2hpbGRfcm91dGVzLnNvbWUoZnVuY3Rpb24oY2hpbGRSb3V0ZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTWVudVJvdXRlTWF0Y2goY2hpbGRSb3V0ZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG4gIH1cblxuXG5cblxuXG4gIC8vIHB1YmxpYyBjaGVja0ZvclJlZGlyZWN0aW9uKGFwcGxpY2F0aW9uRGV0YWlsczogYXBwRGV0YWlscywgbWVudWxpc3RzKSB7XG4gIC8vICAgdHJ5e1xuICAvLyAgICAgbGV0IGlzTWVudVZpc2libGVCeW9yZ1NldHRpbmcgPSB0cnVlO1xuICAvLyAgICAgbGV0IGlzTWVudVZpc2libGVCeVJvbGUgPSB0cnVlO1xuICAvLyAgICAgbGV0IGlzTWVudU5vdFZpc2libGVCeVJvbGUgPSB0cnVlO1xuICAvLyAgICAgbGV0IGlzTWVudXJPcmdXaXRoVXNlclJvbGUgPSB0cnVlO1xuICAvLyAgICAgbGV0IGlzTWVudU5vdFZpc2libGVCeWFwcHNwYWNpZmljY29uZmlnY2hlY2sgPXRydWU7XG4gIC8vICAgICBsZXQgaXNyZWRpcmVjdGVkID0gZmFsc2U7XG4gIC8vICAgICBsZXQgYXBwbGljYXRpb25JZExpc3QgPSBbXCJhZHNfYW1hem9uX3NlbGxlcl9zZWxsZXJfYW5hbHl0aWNzXCIgLCBcImFkc19hbWF6b25fc2VsbGVyX3ZlbmRvcl9hbmFseXRpY3NcIl1cblxuICAvLyAgICAgbGV0IG1lbnVsaXN0ID0gYXBwbGljYXRpb25JZExpc3QuaW5kZXhPZihhcHBsaWNhdGlvbkRldGFpbHMuYXBwbGljYXRpb25JZCkgPiAtMSAmJiBhcHBsaWNhdGlvbkRldGFpbHMubGlzdE1lbnVzICYmIGFwcGxpY2F0aW9uRGV0YWlscy5saXN0TWVudXMubGVuZ3RoID4gMCA/IGFwcGxpY2F0aW9uRGV0YWlscy5saXN0TWVudXMgOiBtZW51bGlzdHM7XG5cbiAgLy8gICAgIGNvbnN0IHJvbGUgPSBbJ1NVUEVSX0FETUlOJywgJ1NVUEVSX0FETUlOX1JFQURfT05MWSddO1xuICAvLyAgICAgaWYgKHJvbGUuaW5kZXhPZihhcHBsaWNhdGlvbkRldGFpbHMudXNlckluZm8ucm9sZSkgPT0gLTEpIHtcbiAgICAgICAgXG4gIC8vICAgICAgIGxldCBhcHBsaWNhdGlvbk1lbnVlcyA9IG1lbnVsaXN0ICYmIG1lbnVsaXN0Lmxlbmd0aCA+IDAgJiYgbWVudWxpc3QuZmluZCgobWVudXMpPT57XG4gIC8vICAgICAgICAgcmV0dXJuIG1lbnVzLmlkID09IGFwcGxpY2F0aW9uRGV0YWlscy5hcHBsaWNhdGlvbklkXG4gIC8vICAgICAgIH0pXG5cbiAgLy8gICAgICAgaWYgKGFwcGxpY2F0aW9uTWVudWVzICYmIGFwcGxpY2F0aW9uTWVudWVzLm9yZ2FuaXphdGlvbl9zZXR0aW5nX25vdF9pbikge1xuICAvLyAgICAgICAgIGlzTWVudVZpc2libGVCeW9yZ1NldHRpbmcgPSB0aGlzLm5hdmlnYXRpb24uY2hlY2tGb3JOb3RPcmdTZXR0aW5ncyhhcHBsaWNhdGlvbk1lbnVlcy5vcmdhbml6YXRpb25fc2V0dGluZ19ub3RfaW4pO1xuICAvLyAgICAgICB9XG5cbiAgLy8gICAgICAgaWYgKGFwcGxpY2F0aW9uTWVudWVzICYmIGFwcGxpY2F0aW9uTWVudWVzLnZpc2liaWxpdHlfcm9sZXMpIHtcbiAgLy8gICAgICAgICBpc01lbnVWaXNpYmxlQnlSb2xlID0gdGhpcy5uYXZpZ2F0aW9uLmNoZWNrRm9yUm9sZXMoYXBwbGljYXRpb25NZW51ZXMudmlzaWJpbGl0eV9yb2xlcyk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgaWYgKGFwcGxpY2F0aW9uTWVudWVzICYmIGFwcGxpY2F0aW9uTWVudWVzLnZpc2liaWxpdHlfcm9sZXNfbm90X2luKSB7XG4gIC8vICAgICAgICAgaXNNZW51Tm90VmlzaWJsZUJ5Um9sZSA9IHRoaXMubmF2aWdhdGlvbi5jaGVja0ZvcnZpc2liaWxpdHlSb2xlc05vdEluKGFwcGxpY2F0aW9uTWVudWVzLnZpc2liaWxpdHlfcm9sZXNfbm90X2luKTtcbiAgLy8gICAgICAgfVxuXG4gIC8vICAgICAgIGlmIChhcHBsaWNhdGlvbk1lbnVlcyAmJiBhcHBsaWNhdGlvbk1lbnVlcy5hcHBfc3BhY2lmaWNfY29uZmlnX2NoZWNrKSB7XG4gIC8vICAgICAgICAgaXNNZW51Tm90VmlzaWJsZUJ5YXBwc3BhY2lmaWNjb25maWdjaGVjayA9IHRoaXMubmF2aWdhdGlvbi5hcHBTcGVjaWZpY0NvbmZpZyhhcHBsaWNhdGlvbk1lbnVlcy5hcHBfc3BhY2lmaWNfY29uZmlnX2NoZWNrKTtcbiAgLy8gICAgICAgfVxuXG4gIC8vICAgICAgIGlmIChhcHBsaWNhdGlvbk1lbnVlcyAmJiBhcHBsaWNhdGlvbk1lbnVlcy5vcmdfdXNlcl9jdHJsKSB7XG4gIC8vICAgICAgICAgaXNNZW51ck9yZ1dpdGhVc2VyUm9sZSA9IHRoaXMubmF2aWdhdGlvbi5jaGVja0Zvck9yZ1dpdGhVc2VyUm9sZShhcHBsaWNhdGlvbk1lbnVlcy5vcmdfdXNlcl9jdHJsLGFwcGxpY2F0aW9uTWVudWVzLCBhcHBsaWNhdGlvbkRldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgaWYgKGFwcGxpY2F0aW9uTWVudWVzICYmIGFwcGxpY2F0aW9uTWVudWVzLmlkID09IFwiYW1jLXBsYXRmb3JtLXdlYlwiICYmIGFwcGxpY2F0aW9uTWVudWVzLmNoaWxkcmVuKSB7XG4gIC8vICAgICAgICAgbGV0IGlzQ2hpbGRNZW51VmlzaWJsZUJ5Um9sZSA9IHRydWU7XG4gIC8vICAgICAgICAgbGV0IGlzQ2hpbGRNZW51Tm90VmlzaWJsZUJ5Um9sZSA9IHRydWU7XG4gIC8vICAgICAgICAgbGV0IGlzQ2hpbGRNZW51ck9yZ1dpdGhVc2VyUm9sZSA9IHRydWU7XG5cbiAgLy8gICAgICAgICBjb25zdCBjaGlsZG1lbnUgPSB0aGlzLnZhbGlkYXRlUm91dGVCeVN0YXRlKCB0aGlzLnJvdXRlciAsIGFwcGxpY2F0aW9uTWVudWVzLmNoaWxkcmVuKTtcblxuICAvLyAgICAgICAgIGlmIChjaGlsZG1lbnUgJiYgY2hpbGRtZW51LnZpc2liaWxpdHlfcm9sZXNfbm90X2luKSB7XG4gIC8vICAgICAgICAgICBpc0NoaWxkTWVudU5vdFZpc2libGVCeVJvbGUgPSB0aGlzLm5hdmlnYXRpb24uY2hlY2tGb3J2aXNpYmlsaXR5Um9sZXNOb3RJbihjaGlsZG1lbnUudmlzaWJpbGl0eV9yb2xlc19ub3RfaW4pO1xuICAvLyAgICAgICAgIH1cblxuICAvLyAgICAgICAgIGlmIChjaGlsZG1lbnUgJiYgY2hpbGRtZW51LnZpc2liaWxpdHlfcm9sZXMpIHtcbiAgLy8gICAgICAgICAgIGlzQ2hpbGRNZW51VmlzaWJsZUJ5Um9sZSA9IHRoaXMubmF2aWdhdGlvbi5jaGVja0ZvclJvbGVzKGNoaWxkbWVudS52aXNpYmlsaXR5X3JvbGVzKTtcbiAgLy8gICAgICAgICB9XG5cbiAgLy8gICAgICAgICBpZiAoY2hpbGRtZW51ICYmIGNoaWxkbWVudS5vcmdfdXNlcl9jdHJsKSB7XG4gIC8vICAgICAgICAgICBpc0NoaWxkTWVudXJPcmdXaXRoVXNlclJvbGUgPSB0aGlzLm5hdmlnYXRpb24uY2hlY2tGb3JPcmdXaXRoVXNlclJvbGUoY2hpbGRtZW51Lm9yZ191c2VyX2N0cmwsY2hpbGRtZW51LCBhcHBsaWNhdGlvbkRldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCk7XG4gIC8vICAgICAgICAgfVxuXG4gIC8vICAgICAgICAgaWYgKCghaXNDaGlsZE1lbnVOb3RWaXNpYmxlQnlSb2xlIHx8ICFpc0NoaWxkTWVudVZpc2libGVCeVJvbGUgfHwgIWlzQ2hpbGRNZW51ck9yZ1dpdGhVc2VyUm9sZSkgJiYgY2hpbGRtZW51KSB7XG4gIC8vICAgICAgICAgICBpc3JlZGlyZWN0ZWQgPSB0cnVlO1xuICAvLyAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL1wiXSk7XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9XG4gIC8vICAgICAgIGlmICgoIWlzTWVudVZpc2libGVCeW9yZ1NldHRpbmcgfHwgIWlzTWVudVZpc2libGVCeVJvbGUgfHwgIWlzTWVudU5vdFZpc2libGVCeVJvbGUgfHwgIWlzTWVudXJPcmdXaXRoVXNlclJvbGUgfHwgIWlzTWVudU5vdFZpc2libGVCeWFwcHNwYWNpZmljY29uZmlnY2hlY2spICYmICFpc3JlZGlyZWN0ZWQpIHtcbiAgLy8gICAgICAgICBpZiAoIXRoaXMuY3VycmVudEFwcCkge1xuICAvLyAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uLmdldEhvc3RPcmlnaW5BbmROYXZpZ2F0ZSh0aGlzLnRvRGlzcGxheUFwcGxpY2F0aW9uc1swXS5kZWZhdWx0dXJsKTsgIFxuICAvLyAgICAgICAgIH1lbHNle1xuICAvLyAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uLmdldEhvc3RPcmlnaW5BbmROYXZpZ2F0ZShhcHBsaWNhdGlvbk1lbnVlcy5kZWZhdWx0dXJsKTtcbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICB9Y2F0Y2goZXJyb3Ipe1xuICAvLyAgICAgICB0aHJvdyBlcnJvcjtcbiAgLy8gICB9XG4gIC8vIH1cblxuICB2YWxpZGF0ZVJvdXRlQnlTdGF0ZShzdGF0ZSAsIGxpc3RNZW51cyl7XG4gICAgdHJ5e1xuICAgICAgICBjb25zdCBmaW5kUm91dGUgPSBsaXN0TWVudXMuZmluZChsaXN0ID0+IHtcbiAgICAgICAgICAgIGlmKGxpc3QubGluayA9PSAnYW1jJytzdGF0ZS51cmwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZihsaXN0Lm1hdGNoUm91dGVzICYmIGxpc3QubWF0Y2hSb3V0ZXMubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgaWYobGlzdC5tYXRjaFJvdXRlcy5pbmNsdWRlcyhzdGF0ZS51cmwpKXtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBsaXN0O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmluZFJvdXRlO1xuICAgIH1jYXRjaChlcnJvcil7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbn1cbiAgXG4gIC8vIHB1YmxpYyBjaGVja0ZvclJlZGlyZWN0aW9uKGFwcGxpY2F0aW9uRGV0YWlsczogYXBwRGV0YWlscykge1xuICAvLyAgIGxldCByb3V0ZSA9ICcnO1xuICAvLyAgIGlmKGFwcGxpY2F0aW9uRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiAhKHRoaXMubmF2aWdhdGlvbi5pc0hhdmluZ0FueUFjdGl2ZVN1YnMoYXBwbGljYXRpb25EZXRhaWxzLmFwcGxpY2F0aW9uSWQsYXBwbGljYXRpb25EZXRhaWxzLmN1cnJlbnRBY2NvdW50LnN1YnNjcmlwdGlvbixhcHBsaWNhdGlvbkRldGFpbHMuY3VycmVudEFjY291bnQudHlwZSkpKXtcbiAgLy8gICAgIHN3aXRjaChhcHBsaWNhdGlvbkRldGFpbHMuY3VycmVudEFjY291bnQudHlwZSl7XG4gIC8vICAgICAgIGNhc2UgJ0NPTlRFTlQnOiB7XG4gIC8vICAgICAgICAgICByb3V0ZSA9ICdjb250ZW50L3NoYXJlLW9mLXZvaWNlJ1xuICAvLyAgICAgICAgICAgYnJlYWs7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgY2FzZSAnRFNQJzoge1xuICAvLyAgICAgICAgIHJvdXRlID0gJ2RzcC9vcmRlcidcbiAgLy8gICAgICAgICBicmVhaztcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICBjYXNlICdBTVNfQVRUUklCVVRJT04nOiB7XG4gIC8vICAgICAgICAgcm91dGUgPSAnYXR0cmlidXRpb24vYXR0cmlidXRpb24tY2FtcGFpZ25zJ1xuICAvLyAgICAgICAgIGJyZWFrO1xuICAvLyAgICAgICB9XG4gIC8vICAgICAgIGNhc2UgJ1NFTExFUl9DRU5UUkFMJzoge1xuICAvLyAgICAgICAgIHJvdXRlID0gJyMhL2Ftcy1jb250ZW50LWRhc2hib2FyZC9zZWxsZXItc2FsZXMtb3ZlcnZpZXcnO1xuICAvLyAgICAgICAgIGJyZWFrO1xuICAvLyAgICAgICB9XG4gIC8vICAgICAgIGNhc2UgJ1ZFTkRPUl9DRU5UUkFMJzoge1xuICAvLyAgICAgICAgIHJvdXRlID0gJyMhL2Ftcy1jb250ZW50LWRhc2hib2FyZC9jdXN0b20tcmVwb3J0cy12ZW5kb3Itc2FsZXMtb3ZlcnZpZXcnO1xuICAvLyAgICAgICAgIGJyZWFrO1xuICAvLyAgICAgICB9XG4gIC8vICAgICAgIGNhc2UgJ0lOU1RBQ0FSVCc6IHtcbiAgLy8gICAgICAgICByb3V0ZSA9ICdpbnN0YWNhcnQvaW5zdGFjYXJ0LW92ZXJ2aWV3JztcbiAgLy8gICAgICAgICBicmVhaztcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICBjYXNlICdDUklURU8nOiB7XG4gIC8vICAgICAgICAgcm91dGUgPSAnY3JpdGVvL2NyaXRlby1vdmVydmlldyc7XG4gIC8vICAgICAgICAgYnJlYWs7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgY2FzZSAnV0FMTUFSVCc6IHtcbiAgLy8gICAgICAgICByb3V0ZSA9ICd3YWxtYXJ0Lyc7XG4gIC8vICAgICAgICAgYnJlYWs7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgY2FzZSAnQU1BWk9OX01BUktFVElOR19DTE9VRCc6IHtcbiAgLy8gICAgICAgICByb3V0ZSA9ICdkcC9kYXRhLWFuYWx5dGljcy1nZXR0aW5nLXN0YXJ0ZWQnO1xuICAvLyAgICAgICAgIGJyZWFrO1xuICAvLyAgICAgICB9XG4gIC8vICAgICAgIGNhc2UgJ0FNU19WRU5ET1InOlxuICAvLyAgICAgICBjYXNlICdBTVNfU0VMTEVSJzoge1xuICAvLyAgICAgICAgIHJvdXRlID0gJyMhL2Ftcy1wYWdlLW92ZXJ2aWV3JztcbiAgLy8gICAgICAgICBicmVhaztcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuICAvLyAgICAgdGhpcy5uYXZpZ2F0aW9uLmdldEhvc3RPcmlnaW5BbmROYXZpZ2F0ZShyb3V0ZSk7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcHVibGljIGFzeW5jIGdldFN0cnVjdHVyZUFQSVN1cHBvcnREYXRhKGN1cnJlbnRBY2NvdW50KXtcbiAgICB0cnkge1xuICAgIHRoaXMuUmVzdEFwaVNlcnZpY2UuZ2V0U3RydWN0dXJlQVBJU3VwcG9ydERhdGEoY3VycmVudEFjY291bnQub3JnYW5pemF0aW9uSWQsY3VycmVudEFjY291bnQuYnVzaW5lc3NHcm91cElkLGN1cnJlbnRBY2NvdW50LmFtc0FjY291bnRJZCkuc3Vic2NyaWJlKCBcbiAgICAgIChyZXNwb25zZTphbnkpID0+IHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uLmlzU3RydWN0dXJlQXBpU3VwcG9ydCA9IHJlc3BvbnNlID8gcmVzcG9uc2VbJ3N0cnVjdHVyZUFwaVN1cHBvcnQnXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uLmlzTWFuYWdlZFNlcnZpY2VBY2MgPSByZXNwb25zZSA/IHJlc3BvbnNlWydpc01hbmFnZWRBY2NvdW50J10gOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY3JlYXRlQXBwRGV0YWlscyh0aGlzLmFwcGxpY2F0aW9uRGV0YWlscyk7XG4gICAgICB9LFxuICAgICAgKGVycm9yOmFueSkgPT57XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbi5pc1N0cnVjdHVyZUFwaVN1cHBvcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbi5pc01hbmFnZWRTZXJ2aWNlQWNjID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmNyZWF0ZUFwcERldGFpbHModGhpcy5hcHBsaWNhdGlvbkRldGFpbHMpO1xuICAgICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICB9XG4gIFxuICBwdWJsaWMgc2Nyb2xsVG9BY3RpdmVNZW51KCl7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZih0aGlzLmxpc3RJdGVtcyAmJiB0aGlzLmxpc3RJdGVtcy5maW5kKChfLCBpKSA9PiAgXy5pc0FjdGl2ZUl0ZW0pICE9IHVuZGVmaW5lZCl7XG4gICAgICAgIHRoaXMubGlzdC5zY3JvbGxUb3AgPSB0aGlzLmxpc3RJdGVtcy5maW5kKChfLCBpKSA9PiAgXy5pc0FjdGl2ZUl0ZW0pLm9mZnNldFRvcDtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG5cbiAgcHVibGljIGlzQ2hlY2tBY3RpdmVSb3V0ZShtZW51LGhlYWRtZW51LHBhcmVudE1lbnUgPSBudWxsKSB7XG4gICAgLy8gbGV0IHVybEFycmF5ID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCcvJyk7XG4gICAgLy8gbGV0IHJvdXRlVXJsID0gdXJsQXJyYXlbdXJsQXJyYXkubGVuZ3RoIC0gMV07XG4gICAgLy8gbGV0IGN1cnJlbnRSb3V0ZSA9IHJvdXRlVXJsLnNwbGl0KCc/JylbMF07XG4gICAgLy8gbGV0IHJvdXRlPW1lbnUucm91dGU7XG4gICAgLy8gbGV0IHBhZ2VOYW1lO1xuICAgIC8vIGlmKHJvdXRlKXtcbiAgICAvLyBsZXQgc3BsaXRlZFVSTCA9IHJvdXRlLnNwbGl0KFwiL1wiKTtcbiAgICAvLyBwYWdlTmFtZSA9IHNwbGl0ZWRVUkwubGVuZ3RoID4wID8gIHNwbGl0ZWRVUkxbc3BsaXRlZFVSTC5sZW5ndGggLSAxXSA6IHJvdXRlO1xuICAgIC8vIH1cblxuICAgIGxldCByb3V0ZVVybCA9IHRoaXMucm91dGVyLnVybDtcbiAgICBsZXQgY3VycmVudFJvdXRlID0gcm91dGVVcmwuc3BsaXQoJz8nKVswXTtcbiAgICBsZXQgcm91dGU9bWVudS5yb3V0ZTtcbiAgICBsZXQgcGFnZU5hbWU7XG4gICAgaWYocm91dGUpe1xuICAgICAgcGFnZU5hbWUgPSByb3V0ZTtcbiAgICB9XG5cbiAgICBpZiAoKGN1cnJlbnRSb3V0ZSA9PT0gXCIvXCIrcGFnZU5hbWUgfHwgY3VycmVudFJvdXRlID09PSBcIi9cIitwYWdlTmFtZStcIi9rZXl3b3JkLXJlcG9ydFwiIHx8IGN1cnJlbnRSb3V0ZSA9PT0gXCIvXCIrcGFnZU5hbWUrXCIva2V5d29yZC1zdWdnZXN0aW9ucy9hdXRvXCIgfHwgY3VycmVudFJvdXRlID09PSBcIi9cIitwYWdlTmFtZStcIi9rZXl3b3JkLXN1Z2dlc3Rpb25zL21hbnVhbFwiKSAmJiBoZWFkbWVudSE9dW5kZWZpbmVkKSB7XG4gICAgICBpZih0aGlzLnByZXZBY3RpdmVIZWFkTWVudT09PSB1bmRlZmluZWQpe1xuICAgICAgICBoZWFkbWVudS5pc0FjdGl2ZT10cnVlO1xuICAgICAgICB0aGlzLnByZXZBY3RpdmVIZWFkTWVudT1oZWFkbWVudTtcbiAgICAgIH1lbHNle1xuICAgICAgICB0aGlzLnByZXZBY3RpdmVIZWFkTWVudS5pc0FjdGl2ZT1mYWxzZTtcbiAgICAgICAgaGVhZG1lbnUuaXNBY3RpdmU9dHJ1ZTtcbiAgICAgICAgdGhpcy5wcmV2QWN0aXZlSGVhZE1lbnU9aGVhZG1lbnU7XG4gICAgICB9XG4gICAgICBpZihwYXJlbnRNZW51ICE9IG51bGwpe1xuICAgICAgICB0aGlzLmFjdGl2ZVBhbmVsID0gcGFyZW50TWVudS5pZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1lbHNlIGlmKG1lbnUgJiYgbWVudS5tYXRjaFJvdXRlcyAmJiB0aGlzLnJvdXRlci51cmwpe1xuICAgICAgaWYgKG1lbnUubWF0Y2hSb3V0ZXMuaW5kZXhPZih0aGlzLnJvdXRlci51cmwuc3BsaXQoJz8nKVswXSkgPiAtMSkge1xuICAgICAgICBoZWFkbWVudS5pc0FjdGl2ZT10cnVlO1xuICAgICAgICB0aGlzLnByZXZBY3RpdmVIZWFkTWVudT1oZWFkbWVudTtcblxuICAgICAgICBpZihwYXJlbnRNZW51ICE9IG51bGwpe1xuICAgICAgICAgIHRoaXMuYWN0aXZlUGFuZWwgPSBwYXJlbnRNZW51LmlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZWxzZXtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNle1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBrZWVwTWVudUV4cGFuZGVkKHBhcmVudE1lbnVJZDpzdHJpbmcpIHtcbiAgICBpZihwYXJlbnRNZW51SWQuaW5kZXhPZih0aGlzLmFwcGxpY2F0aW9uRGV0YWlscy5hcHBsaWNhdGlvbklkKSA+PSAwICApe1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFsbE1lbnVDb2xsYXBzZSgpe1xuICAgIGZvcihsZXQgaGVhZE1lbnUgb2YgdGhpcy50b0Rpc3BsYXlHbG9iYWxTZXR0aW5nc01lbnUpIHtcbiAgICAgICAgaGVhZE1lbnUucGFuZWxPcGVuU3RhdGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbW9kZmljYXRpb25EYXRhKGRhdGE6IGFueSk6IGFueSB7XG4gICAgbGV0IGNvbmZpZ3MgPSB0aGlzLm5hdmlnYXRpb24uZ2V0VHlwZVN0YXR1c0NvbmZpZ3MoKTtcblx0XHRsZXQgb3JkZXIgPSBPYmplY3Qua2V5cyhjb25maWdzKTtcblx0XHRpZihvcmRlci5pbmRleE9mKGRhdGEudHlwZSkgPiAtMSl7XG5cdFx0XHRkYXRhLmFjdGl2ZSA9IGNvbmZpZ3NbZGF0YS50eXBlXSA/IGNvbmZpZ3NbZGF0YS50eXBlXSA6IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIC8vIHRoaXMuc2hvd01lbnVJY29uKCk7XG4gICAgdGhpcy5jaGVja0FwcGxpY2F0aW9uRGV0YWlscyh0aGlzLmFwcGxpY2F0aW9uRGV0YWlscyk7XG4gICAgaWYodGhpcy5hcHBsaWNhdGlvbkRldGFpbHMuYXBwbGljYXRpb25JZCA9PSAnYWRzX2FtYXpvbl9kc3AnKXtcbiAgICAgIHRoaXMuZ2V0U3RydWN0dXJlQVBJU3VwcG9ydERhdGEodGhpcy5hcHBsaWNhdGlvbkRldGFpbHMuY3VycmVudEFjY291bnQpO1xuICAgIH1cblxuICB9XG5cbiAgcHVibGljIGdvVG9BcHBsaWNhdGlvbihpdGVtKSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdzZWxlY3RlZEFwcElkJyk7XG4gICAgaWYoaXRlbS5kZWZhdWx0dXJsKXtcbiAgICAgIHRoaXMuZ29Ub0FwcERlZmF1bHRQYWdlKGl0ZW0sIGl0ZW0uaWQpO1xuICAgIH1lbHNle1xuICAgICAgaWYoaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYoaXRlbS5jaGlsZHJlblswXS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuWzBdLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmdvVG9BcHBEZWZhdWx0UGFnZShpdGVtLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLCBpdGVtLmlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmdvVG9BcHBEZWZhdWx0UGFnZShpdGVtLmNoaWxkcmVuWzBdLCBpdGVtLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nb1RvQXBwRGVmYXVsdFBhZ2UoaXRlbSwgaXRlbS5pZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmKHRoaXMuc2lkZU5hdlN0YXR1c1N1YnNjcmlwdGlvbil7XG4gICAgICB0aGlzLnNpZGVOYXZTdGF0dXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ29Ub0FwcERlZmF1bHRQYWdlKGl0ZW0sIGFwcElkKSB7XG4gICAgdGhpcy5uYXZNZW51c0NvbXBvbmVudC5vblNlbGVjdE1lbnUoZXZlbnQsIGl0ZW0sIGFwcElkKTtcbiAgfVxuXG4gIHB1YmxpYyBoaWRlTWVudUZvcldMKCl7XG4gICAgICBsZXQgaXNPcmdTZXR0aW5nO1xuICAgICAgaWYodGhpcy5hcHBsaWNhdGlvbkRldGFpbHNbJ3VzZXJJbmZvJ10ucm9sZSA9PT0gJ0lBQ19CUkFORF9SRUFEX09OTFknIHx8ICh0aGlzLmFwcGxpY2F0aW9uRGV0YWlscy5vcmdTZXR0aW5ncyAmJiB0aGlzLmFwcGxpY2F0aW9uRGV0YWlscy5vcmdTZXR0aW5ncy5sZW5ndGggPT0gMCkpe1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1lbHNle1xuICAgICAgICBpZiAodGhpcy5hcHBsaWNhdGlvbkRldGFpbHMub3JnU2V0dGluZ3MgJiYgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHMub3JnU2V0dGluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlzT3JnU2V0dGluZyA9IHRoaXMuYXBwbGljYXRpb25EZXRhaWxzLm9yZ1NldHRpbmdzLmZpbHRlcihmdW5jdGlvbihvcmdTZXR0aW5nKXtcbiAgICAgICAgICAgIGlmKCBvcmdTZXR0aW5nLnNldHRpbmcgPT09ICdJQUNfSU5TSUdIVFMnICYmICghb3JnU2V0dGluZy52YWx1ZSB8fCBvcmdTZXR0aW5nLnZhbHVlICYmIG9yZ1NldHRpbmcudmFsdWUgPT0gJ0FDVElWRScpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoaXNPcmdTZXR0aW5nICE9IG51bGwgJiYgKCB0aGlzLmFwcGxpY2F0aW9uRGV0YWlscy5zaWRlYmFySW5mby5zaXRlSWQgPiAxMSB8fCB0aGlzLmFwcGxpY2F0aW9uRGV0YWlsc1sndXNlckluZm8nXS5yb2xlID09PSAnSUFDX0JSQU5EX1JFQURfT05MWScpKTtcbiAgICAgIH1cbiAgfVxuXG4gIC8vIHB1YmxpYyBpc0FwcGxpY2F0aW9uQWN0aXZlKHBhcmVudE1lbnVJZCkge1xuICAvLyAgIGlmKHBhcmVudE1lbnVJZC5pbmRleE9mKHRoaXMuYXBwbGljYXRpb25EZXRhaWxzLmFwcGxpY2F0aW9uSWQpID49IDAgICYmIHRoaXMuaXNHbG9iYWxTZXR0aW5nc01lbnVBY3RpdmUpe1xuICAvLyAgICAgcmV0dXJuIHRydWU7XG4gIC8vICAgfVxuICAvLyAgIGVsc2V7XG4gIC8vICAgICByZXR1cm4gZmFsc2U7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgXG59XG4iLCI8ZGl2IGlkPVwibG9hZGVyX3NvdlwiPlxuICA8ZGl2IGlkPVwibG9hZGluZ19kaXZcIiAqbmdJZj1cImFwcGxpY2F0aW9uRGV0YWlscz8uc2lkZWJhckluZm9cIj5cbiAgICA8ZGl2PlxuICAgICAgPGRpdiBpZD1cImxvYWRlclwiICpuZ0lmPVwic2lkZUlkSW5mbyAhPT0gMVwiXG4gICAgICAgIGNsYXNzPVwic2l0ZV97e3NpZGVJZEluZm99fVwiPlxuICAgICAgICA8aW1nIHNyYz1cInt7YXBwbGljYXRpb25EZXRhaWxzPy5zaWRlYmFySW5mbz8ubG9nb319XCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJsb2FkZXJfaW1nXCIgKm5nSWY9XCJzaWRlSWRJbmZvID09IDFcIj5cbiAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltYWdlcy9oYXBweV9leWVzX2Nsb3NlZF9zbWFsbC5zdmdcIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgY2xhc3M9XCJsb2FkZXJfcHJvZ3Jlc3MtYmFyLXBvc2l0aW9uXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZsZXhGaWxsICpuZ0lmPVwiZXJyb3JNc2cubGVuZ3RoID09IDAgZWxzZSBlcnJvckJsb2NrXCIgdHJhbnNsYXRlPVwibm9cIiBpZD1cImFuZ3VsYXItMTYtdmVyc2lvblwiPlxuICA8bWF0LXRvb2xiYXIgY2xhc3M9XCJwb3J0YWwtc2lkZS1tZW51LXRvcC10b29sYmFyXCI+XG4gICAgPG1hdC10b29sYmFyLXJvdyBmeExheW91dD1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInBvcnRhbC1mb3JnZXQtaGVhZGluZy1jYXJkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlbWVudS1sb2dvLWhvbGRlclwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaWRlSWRJbmZvICE9PSAxXCI+XG4gICAgICAgICAgICAgIDxpbWcgW3NyY109XCJhcHBsaWNhdGlvbkRldGFpbHM/LnNpZGViYXJJbmZvPy5mYXZpY29uXCIgc3R5bGU9XCJ3aWR0aDogNDBweCAhaW1wb3J0YW50O2Rpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcIiAqbmdJZj1cIiFuYXZDb2xsYXBzZWRcIiBbYWx0XT1cImFwcGxpY2F0aW9uRGV0YWlscz8uc2lkZWJhckluZm8/LmZpcnN0TmFtZVwiIGNsYXNzPVwiZmF2aWNvbi1kaW1lbnNpb25cIiAvPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiYXBwbGljYXRpb25EZXRhaWxzPy5zaWRlYmFySW5mbz8ubG9nb1wiIHN0eWxlPVwiZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1wiICAqbmdJZj1cIm5hdkNvbGxhcHNlZFwiIGNsYXNzPVwibG9nby1kaW1lbnNpb25cIiAvPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaWRlSWRJbmZvID09IDFcIj5cbiAgICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvbG9nb3MvaW50ZW50d2lzZWxvZ28uc3ZnXCIgc3R5bGU9XCJ3aWR0aDogNDBweCAhaW1wb3J0YW50O2Rpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcIiAqbmdJZj1cIiFuYXZDb2xsYXBzZWRcIiBbYWx0XT1cImFwcGxpY2F0aW9uRGV0YWlscz8uc2lkZWJhckluZm8/LmZpcnN0TmFtZVwiIGNsYXNzPVwiZmF2aWNvbi1kaW1lbnNpb24gaW50ZW50d2lzZS1mYXZpY29uXCI+XG4gICAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2xvZ29zL0ludGVudHdpc2Uuc3ZnXCIgIHN0eWxlPVwiZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1wiICpuZ0lmPVwibmF2Q29sbGFwc2VkXCIgW2FsdF09XCJhcHBsaWNhdGlvbkRldGFpbHM/LnNpZGViYXJJbmZvPy5maXJzdE5hbWVcIiBjbGFzcz1cImxvZ28tZGltZW5zaW9uIGludGVudHdpc2UtbG9nb1wiPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXItcm93PlxuICA8L21hdC10b29sYmFyPlxuICA8IS0tIDxkaXYgY2xhc3M9XCJzaWRlYmFyLWNvbGxhcHNlLWljb25cIiAqbmdJZj1cImlzQWRtaW5Sb2xlXCI+XG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cInNpZGVtZW51LWljb24tdG9wXCIgKGNsaWNrKT1cImFsbE1lbnVDb2xsYXBzZSgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic2lkZW5hdiAmJiBzaWRlbmF2Lm9wZW5lZFwiPmtleWJvYXJkX2Fycm93X3VwPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj4gLS0+XG4gIDxkaXYgKm5nSWY9XCJzaWRlbmF2ICYmIHNpZGVuYXYub3BlbmVkICYmICFpbkNvbnRleHRJbnNpZ2h0c1dMQXBwXCIgY2xhc3M9XCJhcHAtbWVudS1jb250YWluZXJcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYXBwLW1lbnUtYnV0dG9uXCIgKm5nSWY9XCJ0b0Rpc3BsYXlBcHBsaWNhdGlvbnMgJiYgdG9EaXNwbGF5QXBwbGljYXRpb25zLmxlbmd0aCA9PSAxXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImFwcC1uYW1lXCI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImN1cnJlbnRBcHA/Lm5hbWVcIiBjbGFzcz1cInNpZGVOYXZJY29uIHt7Y3VycmVudEFwcD8ubmFtZS5zcGxpdCgnICcpLmpvaW4oJycpfX1cIj48L21hdC1pY29uPlxuICAgICAgICA8bGFiZWwgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTRweDtcIiBbaW5uZXJIVE1MXT1cInNlbGVjdGVkQXBwbGljYXRpb24oY3VycmVudEFwcClcIj48L2xhYmVsPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImN1cnJlbnRBcHA/LmJhZGdlXCIgY2xhc3M9XCJiYWRnZS10ZXh0IHNvdi1iZXRhLXBvc2l0aW9uXCI+e3tjdXJyZW50QXBwLmJhZGdlfX08L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImFwcC1tZW51LWJ1dHRvblwiIFttYXQtbWVudS10cmlnZ2VyLWZvcl09XCJhcHBNZW51XCIgKm5nSWY9XCJ0b0Rpc3BsYXlBcHBsaWNhdGlvbnMgJiYgdG9EaXNwbGF5QXBwbGljYXRpb25zLmxlbmd0aCA+IDFcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYXBwLW5hbWVcIj5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiY3VycmVudEFwcD8ubmFtZVwiIGNsYXNzPVwic2lkZU5hdkljb24ge3tjdXJyZW50QXBwPy5uYW1lLnNwbGl0KCcgJykuam9pbignJyl9fVwiPjwvbWF0LWljb24+XG4gICAgICAgIDxsYWJlbCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtNHB4O1wiIFtpbm5lckhUTUxdPVwic2VsZWN0ZWRBcHBsaWNhdGlvbihjdXJyZW50QXBwKVwiPjwvbGFiZWw+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiY3VycmVudEFwcD8uYmFkZ2VcIiBjbGFzcz1cImJhZGdlLXRleHQgc292LWJldGEtcG9zaXRpb25cIj57e2N1cnJlbnRBcHAuYmFkZ2V9fTwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcGRvd24taWNvblwiPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bWF0LW1lbnUgI2FwcE1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJhcHAtbWVudVwiIFtiYWNrZHJvcENsYXNzXT1cIidhbGwtbW9kdWxlLW1lbnVzJ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGVhZG1lbnUgb2YgdG9EaXNwbGF5QXBwbGljYXRpb25zXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtZW51LW9wdGlvblwiIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImdvVG9BcHBsaWNhdGlvbihoZWFkbWVudSlcIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGhlYWRtZW51LnBhbmVsT3BlblN0YXRlfVwiIGNsYXNzPVwie3toZWFkbWVudS5pZH19X2ljb25cIiAqbmdJZj1cImhlYWRtZW51Lm5hbWUgIT0gJ0FjY291bnQgTWFuYWdlbWVudCdcIiB0cmFuc2xhdGU9XCJub1wiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInNpZGVOYXZJY29uIGNoaWxkcmVuLWljb25cIiBbbmdDbGFzc109XCJoZWFkbWVudS5uYW1lLnNwbGl0KCcgJykuam9pbignJylcIj48L21hdC1pY29uPlxuICAgICAgICAgIDxsYWJlbCBbaW5uZXJIVE1MXT1cInNlbGVjdGVkQXBwbGljYXRpb24oaGVhZG1lbnUpXCI+PC9sYWJlbD5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImhlYWRtZW51LmJhZGdlXCIgY2xhc3M9XCJiYWRnZS10ZXh0IHNvdi1iZXRhLXBvc2l0aW9uXCIgW2lubmVySFRNTF09XCJoZWFkbWVudS5iYWRnZVwiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L21hdC1tZW51PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInBvcnRhbC1zaWRuYXYtbWVudVwiIGZ4RmxleD1cIm5vZ3JvdyBub3Nocmlua1wiIGFwcFNjcm9sbGFibGUgW25nQ2xhc3NdPVwieyd3aGl0ZUxhYmVsU2lkZW5hdicgOiBpbkNvbnRleHRJbnNpZ2h0c1dMQXBwfVwiPlxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtleHBhbmRlZF09XCJoZWFkbWVudS5wYW5lbE9wZW5TdGF0ZSA9PSB0cnVlXCIgaGlkZVRvZ2dsZT1cInRydWVcIlxuICAgICAgKm5nRm9yPVwibGV0IGhlYWRtZW51IG9mIHRvRGlzcGxheUFwcGxpY2F0aW9uc1wiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaGVhZG1lbnUuaXNBY3RpdmUgfVwiXG4gICAgICAob3BlbmVkKT1cImhlYWRtZW51LnBhbmVsT3BlblN0YXRlID0gdHJ1ZVwiIChjbG9zZWQpPVwiaGVhZG1lbnUucGFuZWxPcGVuU3RhdGUgPSBmYWxzZVwiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIG1hdFRvb2x0aXA9XCJ7e2dldFRvb2x0aXBJbmZvKGhlYWRtZW51KX19XCIgbWF0VG9vbHRpcENsYXNzPVwibGVmdC1uYXYtdG9vbHRpcFwiXG4gICAgICAgICpuZ0lmPVwiaGVhZG1lbnUudHlwZSA9PSAnZXhwYW5kYWJsZScgZWxzZSBzaW5nbGVNZW51c1wiIGNsYXNzPVwibWFpbi1leHBhbnNpb24tcGFuZWwtaGVhZGVyXCJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9BcHBsaWNhdGlvbihoZWFkbWVudSlcIj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7aGVhZG1lbnUuaWR9fV9pY29uXCI+PC9zcGFuPlxuICAgICAgICAgIDxoMyBjbGFzcz1cInNpZGVtZW51LWhlYWRpbmcgYXBwbGljYXRpb25NZW51XCI+XG4gICAgICAgICAgICA8bGFiZWwgW2lubmVySFRNTF09XCJzZWxlY3RlZEFwcGxpY2F0aW9uKGhlYWRtZW51KVwiPjwvbGFiZWw+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImhlYWRtZW51LmJhZGdlXCIgY2xhc3M9XCJiYWRnZS10ZXh0IHNvdi1iZXRhLXBvc2l0aW9uXCIgW2lubmVySFRNTF09XCJoZWFkbWVudS5iYWRnZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2gzPlxuICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYWluLWNoZXZyb24taWNvblwiICpuZ0lmPVwiIWhlYWRtZW51LnBhbmVsT3BlblN0YXRlXCI+YXJyb3dfcmlnaHQ8L21hdC1pY29uPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1haW4tY2hldnJvbi1pY29uXCIgKm5nSWY9XCJoZWFkbWVudS5wYW5lbE9wZW5TdGF0ZVwiPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgIDxtYXQtbGlzdCBjbGFzcz1cInBhZGRpbmctMHB4XCIgKm5nRm9yPVwibGV0IG1lbnUgb2YgaGVhZG1lbnUuY2hpbGRyZW5cIiBbYXR0ci5pZF09XCJoZWFkbWVudS5pZFwiIFtuZ0NsYXNzXT1cInsnZ3JvdXAtbmF2LW1lbnUnOiBtZW51LmNoaWxkcmVuIH1cIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgKm5nSWY9XCJtZW51LmNoaWxkcmVuIGVsc2UgbGlzdE1lbnVcIiBjbGFzcz1cImRpdi1iYWNrZ3JvdW5kLWNvbG9yLXdoaXRlXCIgW2V4cGFuZGVkXT1cIm1lbnUuaWQgPT0gYWN0aXZlUGFuZWxcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlUGFuZWwnOiBtZW51LmlkID09IGFjdGl2ZVBhbmVsICwgJ3doaXRlTGFiZWxBY3RpdmUnIDogaW5Db250ZXh0SW5zaWdodHNXTEFwcH1cIiBoaWRlVG9nZ2xlPVwidHJ1ZVwiXG4gICAgICAgICAgKG9wZW5lZCk9XCJtZW51LnBhbmVsT3BlblN0YXRlID0gdHJ1ZVwiIChjbG9zZWQpPVwibWVudS5wYW5lbE9wZW5TdGF0ZSA9IGZhbHNlXCI+XG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hlYWRlci1ib3JkZXInOiBtZW51LnBhbmVsT3BlblN0YXRlID09PSB0cnVlLCAnaGVhZGVyLWJvcmRlci1ub25lJzogbWVudS5wYW5lbE9wZW5TdGF0ZSA9PT0gZmFsc2UgfVwiPlxuICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ7e21lbnUuaWR9fV9pY29uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8aW1nIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4XCIgKm5nSWY9XCIobWVudS5pY29uICYmIG1lbnUuaWNvbiAhPSAnJykgZWxzZSBkaXNwbGF5SW5pdGlhbHNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2lkZS1tZW51LWljb24gc2lkZS1tZW51LWljb24tY29sb3JcIiBzcmM9XCJhc3NldHMvc2lkZW1lbnUtaWNvbnMve3ttZW51Lmljb259fVwiIC8+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheUluaXRpYWxzPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlbWVudS1zeW1ib2xcIj5cbiAgICAgICAgICAgICAgICAgIHt7bWVudS5zeW1ib2x9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJtZW51LWhlYWRpbmcgYXBwbGljYXRpb25TdWJtZW51c1wiPjxzcGFuIGNsYXNzPVwibWVudS1uYW1lLWV4cGFuZGFibGVcIiBbaW5uZXJIVE1MXT1cInNlbGVjdGVkQXBwbGljYXRpb24obWVudSlcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtZW51LmJhZGdlXCIgY2xhc3M9XCJiYWRnZS10ZXh0IHNvdi1iZXRhLXBvc2l0aW9uIGxldmVsLXR3by1iYWRnZVwiXG4gICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm1lbnUuYmFkZ2VcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDxtYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInN1Yi1jaGV2cm9uLWljb25cIiAqbmdJZj1cIiFtZW51LnBhbmVsT3BlblN0YXRlXCI+a2V5Ym9hcmRfYXJyb3dfcmlnaHQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzdWItY2hldnJvbi1pY29uXCIgKm5nSWY9XCJtZW51LnBhbmVsT3BlblN0YXRlXCI+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cbiAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDwhLS0gPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+IC0tPlxuICAgICAgICAgIDxtYXQtbmF2LWxpc3QgKm5nRm9yPVwibGV0IGNoaWxkTWVudSBvZiBtZW51LmNoaWxkcmVuO1wiIGNsYXNzPVwic3ViLWNoaWxkLW1lbnVcIj5cbiAgICAgICAgICAgIDxsbmMtbmF2LW1lbnVzIGFwcE9mZnNldFRvcCBbaXNBY3RpdmVJdGVtXT1cImlzQ2hlY2tBY3RpdmVSb3V0ZShjaGlsZE1lbnUsaGVhZG1lbnUsbWVudSlcIiBbaXRlbV09XCJjaGlsZE1lbnVcIlxuICAgICAgICAgICAgICBbYXBwbGljYXRpb25JZF09XCJhcHBsaWNhdGlvbkRldGFpbHMuYXBwbGljYXRpb25JZFwiIFtwYXJlbnRNZW51SWRdPVwiaGVhZG1lbnUuaWRcIiBbcGFyZW50UGFuZWxJZF09XCJtZW51LmlkXCJcbiAgICAgICAgICAgICAgKG1lbnVDbGlja2VkKT1cIm1lbnVDbGlja2VkKCRldmVudClcIiAjbmF2TWVudXNDb21wb25lbnQ+XG4gICAgICAgICAgICA8L2xuYy1uYXYtbWVudXM+XG4gICAgICAgICAgPC9tYXQtbmF2LWxpc3Q+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNsaXN0TWVudT5cbiAgICAgICAgICA8bWF0LW5hdi1saXN0PlxuICAgICAgICAgICAgPGxuYy1uYXYtbWVudXMgYXBwT2Zmc2V0VG9wIFtpc0FjdGl2ZUl0ZW1dPVwiaXNDaGVja0FjdGl2ZVJvdXRlKG1lbnUsaGVhZG1lbnUpXCIgW2l0ZW1dPVwibWVudVwiXG4gICAgICAgICAgICAgIFthcHBsaWNhdGlvbklkXT1cImFwcGxpY2F0aW9uRGV0YWlscy5hcHBsaWNhdGlvbklkXCIgW3BhcmVudE1lbnVJZF09XCJoZWFkbWVudS5pZFwiXG4gICAgICAgICAgICAgIChtZW51Q2xpY2tlZCk9XCJtZW51Q2xpY2tlZCgkZXZlbnQpXCIgI25hdk1lbnVzQ29tcG9uZW50PlxuICAgICAgICAgICAgPC9sbmMtbmF2LW1lbnVzPlxuICAgICAgICAgIDwvbWF0LW5hdi1saXN0PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9tYXQtbGlzdD5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlTWVudXM+XG4gICAgICAgIDxtYXQtbGlzdD5cbiAgICAgICAgICA8bG5jLW5hdi1tZW51cyBpZD1cInt7aGVhZG1lbnUuaWR9fVwiIGFwcE9mZnNldFRvcCBbaXNBY3RpdmVJdGVtXT1cImlzQ2hlY2tBY3RpdmVSb3V0ZShoZWFkbWVudSxoZWFkbWVudSlcIlxuICAgICAgICAgICAgW2l0ZW1dPVwiaGVhZG1lbnVcIiBbYXBwbGljYXRpb25JZF09XCJhcHBsaWNhdGlvbkRldGFpbHMuYXBwbGljYXRpb25JZFwiIFtwYXJlbnRNZW51SWRdPVwiaGVhZG1lbnUuaWRcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cInt7Z2V0VG9vbHRpcEluZm8oaGVhZG1lbnUpfX1cIiBtYXRUb29sdGlwQ2xhc3M9XCJsZWZ0LW5hdi10b29sdGlwXCJcbiAgICAgICAgICAgIChtZW51Q2xpY2tlZCk9XCJtZW51Q2xpY2tlZCgkZXZlbnQpXCIgI25hdk1lbnVzQ29tcG9uZW50PlxuICAgICAgICAgIDwvbG5jLW5hdi1tZW51cz5cbiAgICAgICAgPC9tYXQtbGlzdD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInBvcnRhbC1nbG9iYWwtc2V0dGluZy1tZW51IHN0aWNreV9ib3R0b21fbWVudVwiICpuZ0lmPVwiIWluQ29udGV4dEluc2lnaHRzV0xBcHBcIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbZXhwYW5kZWRdPVwic2V0dGluZ3NIZWFkTWVudS5wYW5lbE9wZW5TdGF0ZSA9PSB0cnVlIHx8IGV4cGFuZEdsb2JhbFNldHRpbmdzXCIgaGlkZVRvZ2dsZT1cInRydWVcIiBpZD1cInt7c2V0dGluZ3NIZWFkTWVudS5pZCArICdtZW51J319XCJcbiAgICAgICpuZ0Zvcj1cImxldCBzZXR0aW5nc0hlYWRNZW51IG9mIHRvRGlzcGxheUdsb2JhbFNldHRpbmdzTWVudVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogc2V0dGluZ3NIZWFkTWVudS5pc0FjdGl2ZSB9XCJcbiAgICAgIChvcGVuZWQpPVwic2lkZW5hdi5vcGVuKCk7IHNldHRpbmdzSGVhZE1lbnUucGFuZWxPcGVuU3RhdGUgPSB0cnVlXCIgKGNsb3NlZCk9XCJzZXR0aW5nc0hlYWRNZW51LnBhbmVsT3BlblN0YXRlID0gZmFsc2U7IGV4cGFuZEdsb2JhbFNldHRpbmdzID0gZmFsc2VcIj5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBtYXRUb29sdGlwPVwie3tnZXRUb29sdGlwSW5mbyhzZXR0aW5nc0hlYWRNZW51KX19XCIgbWF0VG9vbHRpcENsYXNzPVwibGVmdC1uYXYtdG9vbHRpcFwiXG4gICAgICAgICpuZ0lmPVwic2V0dGluZ3NIZWFkTWVudS50eXBlID09ICdleHBhbmRhYmxlJyBlbHNlIHNpbmdsZU1lbnVzXCIgY2xhc3M9XCJtYWluLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJcIlxuICAgICAgICBbbmdDbGFzc109XCJzaWRlbmF2ICYmIHNpZGVuYXYub3BlbmVkID8gJycgOiAnc3RpY2t5LWJvdHRvbS1jbG9zZWQnXCI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZHNfYWNjb3VudF9tZ210X2ljb25cIj48L3NwYW4+XG4gICAgICAgICAgPGgzIGNsYXNzPVwic2lkZW1lbnUtaGVhZGluZyBhcHBsaWNhdGlvbk1lbnVcIj5cbiAgICAgICAgICAgIDxsYWJlbCBbaW5uZXJIVE1MXT1cInNlbGVjdGVkQXBwbGljYXRpb24oc2V0dGluZ3NIZWFkTWVudSlcIj48L2xhYmVsPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZXR0aW5nc0hlYWRNZW51LmJhZGdlXCIgY2xhc3M9XCJiYWRnZS10ZXh0IHNvdi1iZXRhLXBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJzZXR0aW5nc0hlYWRNZW51LmJhZGdlXCI+PC9zcGFuPlxuICAgICAgICAgIDwvaDM+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1haW4tY2hldnJvbi1pY29uXCIgKm5nSWY9XCIhc2V0dGluZ3NIZWFkTWVudS5wYW5lbE9wZW5TdGF0ZVwiPmFycm93X3JpZ2h0PC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYWluLWNoZXZyb24taWNvblwiICpuZ0lmPVwic2V0dGluZ3NIZWFkTWVudS5wYW5lbE9wZW5TdGF0ZVwiPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgIDxtYXQtbGlzdCBjbGFzcz1cInBhZGRpbmctMHB4XCIgKm5nRm9yPVwibGV0IG1lbnUgb2Ygc2V0dGluZ3NIZWFkTWVudS5jaGlsZHJlblwiIFthdHRyLmlkXT1cInNldHRpbmdzSGVhZE1lbnUuaWRcIlxuICAgICAgICBbbmdDbGFzc109XCJ7J2dyb3VwLW5hdi1tZW51JzogbWVudS5jaGlsZHJlbiB9XCI+XG4gICAgICAgIDxtYXQtbmF2LWxpc3Q+XG4gICAgICAgICAgPGxuYy1uYXYtbWVudXMgYXBwT2Zmc2V0VG9wIFtpc0FjdGl2ZUl0ZW1dPVwiaXNDaGVja0FjdGl2ZVJvdXRlKG1lbnUsc2V0dGluZ3NIZWFkTWVudSlcIiBbaXRlbV09XCJtZW51XCJcbiAgICAgICAgICAgIFthcHBsaWNhdGlvbklkXT1cImFwcGxpY2F0aW9uRGV0YWlscy5hcHBsaWNhdGlvbklkXCIgW3BhcmVudE1lbnVJZF09XCJzZXR0aW5nc0hlYWRNZW51LmlkXCJcbiAgICAgICAgICAgIChtZW51Q2xpY2tlZCk9XCJtZW51Q2xpY2tlZCgkZXZlbnQpXCIgI25hdk1lbnVzQ29tcG9uZW50PlxuICAgICAgICAgIDwvbG5jLW5hdi1tZW51cz5cbiAgICAgICAgPC9tYXQtbmF2LWxpc3Q+XG4gICAgICA8L21hdC1saXN0PlxuICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVNZW51cz5cbiAgICAgICAgPG1hdC1saXN0PlxuICAgICAgICAgIDxsbmMtbmF2LW1lbnVzIFthdHRyLmlkXT1cInNldHRpbmdzSGVhZE1lbnUuaWRcIiBhcHBPZmZzZXRUb3BcbiAgICAgICAgICAgIFtpc0FjdGl2ZUl0ZW1dPVwiaXNDaGVja0FjdGl2ZVJvdXRlKHNldHRpbmdzSGVhZE1lbnUsc2V0dGluZ3NIZWFkTWVudSlcIiBbaXRlbV09XCJzZXR0aW5nc0hlYWRNZW51XCJcbiAgICAgICAgICAgIFthcHBsaWNhdGlvbklkXT1cImFwcGxpY2F0aW9uRGV0YWlscy5hcHBsaWNhdGlvbklkXCIgW3BhcmVudE1lbnVJZF09XCJzZXR0aW5nc0hlYWRNZW51LmlkXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7e2dldFRvb2x0aXBJbmZvKHNldHRpbmdzSGVhZE1lbnUpfX1cIiBtYXRUb29sdGlwQ2xhc3M9XCJsZWZ0LW5hdi10b29sdGlwXCJcbiAgICAgICAgICAgIChtZW51Q2xpY2tlZCk9XCJtZW51Q2xpY2tlZCgkZXZlbnQpXCIgI25hdk1lbnVzQ29tcG9uZW50PlxuICAgICAgICAgIDwvbG5jLW5hdi1tZW51cz5cbiAgICAgICAgPC9tYXQtbGlzdD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gIDwvZGl2PlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI2Vycm9yQmxvY2s+XG4gIDxkaXYgY2xhc3M9XCJlcnJvck1zZ1wiPlxuICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5lcnJvcjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cImVycm9yVHh0XCI+e3tlcnJvck1zZ319PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxhIGNsYXNzPVwiaGFtYnVyZ2VyLWljb24gZXhwYW5kZWQtaGFtYnVyZ2VyLWljb25cIiB0aXRsZT1cIlRvZ2dsZSBNZW51XCIgKGNsaWNrKT1cInNpZGVuYXYuY2xvc2UoKTthbGxNZW51Q29sbGFwc2UoKTsgXCI+XG4gIDxtYXQtaWNvbiBjbGFzcz1cImxlZnQtY2hldnJvbi1pY29uXCI+a2V5Ym9hcmRfYXJyb3dfbGVmdDwvbWF0LWljb24+XG48L2E+XG5cbjwhLS0gPGltZyAqbmdJZj1cInNob3dNZW51SWNvbigpXCIgY2xhc3M9XCJmYXZpY29uLWRpbWVuc2lvblwiIHNyYz17e2FwcGxpY2F0aW9uRGV0YWlscy5zaWRlYmFySW5mby5mYXZpY29ufX0gYWx0PVwiSW50ZW50d2lzZSBGYXZpY29uXCIgLz5cbiAgPGEgKm5nSWY9XCJzaG93TWVudUljb24oKVwiIHRpdGxlPVwiVG9nZ2xlIE1lbnVcIiBjbGFzcz1cImhhbWJ1cmdlci1pY29uIGNvbGxhcHNlZC1oYW1idXJnZXJcIlxuICAgIChjbGljayk9XCJzaWRlbmF2Lm9wZW4oKVwiPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cInJpZ2h0LWNoZXZyb24taWNvblwiPmtleWJvYXJkX2Fycm93X3JpZ2h0PC9tYXQtaWNvbj5cbiAgPC9hPiAtLT4iXX0=