igniteui-angular 17.1.0-beta.3 → 17.1.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22,6 +22,12 @@ export class IgxTextHighlightService {
22
22
  });
23
23
  this.onActiveElementChanged.emit(groupName);
24
24
  }
25
+ /**
26
+ * Destroys a highlight group.
27
+ */
28
+ destroyGroup(groupName) {
29
+ this.highlightGroupsMap.delete(groupName);
30
+ }
25
31
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxTextHighlightService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
26
32
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxTextHighlightService, providedIn: 'root' }); }
27
33
  }
@@ -31,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
31
37
  providedIn: 'root'
32
38
  }]
33
39
  }], ctorParameters: () => [] });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1oaWdobGlnaHQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kaXJlY3RpdmVzL3RleHQtaGlnaGxpZ2h0L3RleHQtaGlnaGxpZ2h0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTXpELE1BQU0sT0FBTyx1QkFBdUI7SUFJaEM7UUFITyx1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztRQUM3RCwyQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRTNDLENBQUM7SUFFakI7OztPQUdHO0lBQ0ksa0JBQWtCLENBQUMsU0FBaUIsRUFBRSxTQUErQjtRQUN4RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7T0FFRztJQUNJLG9CQUFvQixDQUFDLFNBQVM7UUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUU7WUFDbkMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUNaLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEQsQ0FBQzs4R0F2QlEsdUJBQXVCO2tIQUF2Qix1QkFBdUIsY0FGdEIsTUFBTTs7MkZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUFjdGl2ZUhpZ2hsaWdodEluZm8gfSBmcm9tICcuL3RleHQtaGlnaGxpZ2h0LmRpcmVjdGl2ZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIElneFRleHRIaWdobGlnaHRTZXJ2aWNlIHtcbiAgICBwdWJsaWMgaGlnaGxpZ2h0R3JvdXBzTWFwID0gbmV3IE1hcDxzdHJpbmcsIElBY3RpdmVIaWdobGlnaHRJbmZvPigpO1xuICAgIHB1YmxpYyBvbkFjdGl2ZUVsZW1lbnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVzIHRoZSBoaWdobGlnaHQgYXQgYSBnaXZlbiBpbmRleC5cbiAgICAgKiAoaWYgc3VjaCBpbmRleCBleGlzdHMpXG4gICAgICovXG4gICAgcHVibGljIHNldEFjdGl2ZUhpZ2hsaWdodChncm91cE5hbWU6IHN0cmluZywgaGlnaGxpZ2h0OiBJQWN0aXZlSGlnaGxpZ2h0SW5mbykge1xuICAgICAgICB0aGlzLmhpZ2hsaWdodEdyb3Vwc01hcC5zZXQoZ3JvdXBOYW1lLCBoaWdobGlnaHQpO1xuICAgICAgICB0aGlzLm9uQWN0aXZlRWxlbWVudENoYW5nZWQuZW1pdChncm91cE5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyBhbnkgZXhpc3RpbmcgaGlnaGxpZ2h0LlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhckFjdGl2ZUhpZ2hsaWdodChncm91cE5hbWUpIHtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRHcm91cHNNYXAuc2V0KGdyb3VwTmFtZSwge1xuICAgICAgICAgICAgaW5kZXg6IC0xXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uQWN0aXZlRWxlbWVudENoYW5nZWQuZW1pdChncm91cE5hbWUpO1xuICAgIH1cblxufVxuIl19
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1oaWdobGlnaHQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kaXJlY3RpdmVzL3RleHQtaGlnaGxpZ2h0L3RleHQtaGlnaGxpZ2h0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTXpELE1BQU0sT0FBTyx1QkFBdUI7SUFJaEM7UUFITyx1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztRQUM3RCwyQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRTNDLENBQUM7SUFFakI7OztPQUdHO0lBQ0ksa0JBQWtCLENBQUMsU0FBaUIsRUFBRSxTQUErQjtRQUN4RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7T0FFRztJQUNJLG9CQUFvQixDQUFDLFNBQVM7UUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUU7WUFDbkMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUNaLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWSxDQUFDLFNBQWlCO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsQ0FBQzs4R0E5QlEsdUJBQXVCO2tIQUF2Qix1QkFBdUIsY0FGdEIsTUFBTTs7MkZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUFjdGl2ZUhpZ2hsaWdodEluZm8gfSBmcm9tICcuL3RleHQtaGlnaGxpZ2h0LmRpcmVjdGl2ZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIElneFRleHRIaWdobGlnaHRTZXJ2aWNlIHtcbiAgICBwdWJsaWMgaGlnaGxpZ2h0R3JvdXBzTWFwID0gbmV3IE1hcDxzdHJpbmcsIElBY3RpdmVIaWdobGlnaHRJbmZvPigpO1xuICAgIHB1YmxpYyBvbkFjdGl2ZUVsZW1lbnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVzIHRoZSBoaWdobGlnaHQgYXQgYSBnaXZlbiBpbmRleC5cbiAgICAgKiAoaWYgc3VjaCBpbmRleCBleGlzdHMpXG4gICAgICovXG4gICAgcHVibGljIHNldEFjdGl2ZUhpZ2hsaWdodChncm91cE5hbWU6IHN0cmluZywgaGlnaGxpZ2h0OiBJQWN0aXZlSGlnaGxpZ2h0SW5mbykge1xuICAgICAgICB0aGlzLmhpZ2hsaWdodEdyb3Vwc01hcC5zZXQoZ3JvdXBOYW1lLCBoaWdobGlnaHQpO1xuICAgICAgICB0aGlzLm9uQWN0aXZlRWxlbWVudENoYW5nZWQuZW1pdChncm91cE5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyBhbnkgZXhpc3RpbmcgaGlnaGxpZ2h0LlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhckFjdGl2ZUhpZ2hsaWdodChncm91cE5hbWUpIHtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRHcm91cHNNYXAuc2V0KGdyb3VwTmFtZSwge1xuICAgICAgICAgICAgaW5kZXg6IC0xXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uQWN0aXZlRWxlbWVudENoYW5nZWQuZW1pdChncm91cE5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc3Ryb3lzIGEgaGlnaGxpZ2h0IGdyb3VwLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZXN0cm95R3JvdXAoZ3JvdXBOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRHcm91cHNNYXAuZGVsZXRlKGdyb3VwTmFtZSk7XG4gICAgfVxufVxuIl19
@@ -1102,4 +1102,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
1102
1102
  type: HostListener,
1103
1103
  args: ['contextmenu', ['$event']]
1104
1104
  }] } });
1105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY2VsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY2VsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQU1ULE1BQU0sRUFDTixZQUFZLEVBR1osZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3SyxPQUFPLEVBQTBCLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0UsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBMEQsYUFBYSxFQUFXLE1BQU0seUJBQXlCLENBQUM7QUFD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RSxDQUFDLFFBQVEsQ0FBQztnQkFhMUIsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgTmdab25lLFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgSW5qZWN0LFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBib29sZWFuQXR0cmlidXRlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ybWF0UGVyY2VudCwgTmdJZiwgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCwgRGVjaW1hbFBpcGUsIFBlcmNlbnRQaXBlLCBDdXJyZW5jeVBpcGUsIERhdGVQaXBlLCBnZXRMb2NhbGVDdXJyZW5jeUNvZGUsIGdldEN1cnJlbmN5U3ltYm9sIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IGZpcnN0LCB0YWtlVW50aWwsIHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSWd4VGV4dEhpZ2hsaWdodERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGV4dC1oaWdobGlnaHQvdGV4dC1oaWdobGlnaHQuZGlyZWN0aXZlJztcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5LCBmb3JtYXREYXRlLCBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZWxlY3Rpb24vc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFtbWVyR2VzdHVyZXNNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZS90b3VjaCc7XG5pbXBvcnQgeyBHcmlkU2VsZWN0aW9uTW9kZSB9IGZyb20gJy4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IENlbGxUeXBlLCBDb2x1bW5UeXBlLCBHcmlkVHlwZSwgSWd4Q2VsbFRlbXBsYXRlQ29udGV4dCwgSUdYX0dSSURfQkFTRSwgUm93VHlwZSB9IGZyb20gJy4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgSWd4Um93RGlyZWN0aXZlIH0gZnJvbSAnLi9yb3cuZGlyZWN0aXZlJztcbmltcG9ydCB7IElTZWFyY2hJbmZvIH0gZnJvbSAnLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IElneEdyaWRDZWxsIH0gZnJvbSAnLi9ncmlkLXB1YmxpYy1jZWxsJztcbmltcG9ydCB7IElTZWxlY3Rpb25Ob2RlIH0gZnJvbSAnLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgQXV0b1Bvc2l0aW9uU3RyYXRlZ3ksIEhvcml6b250YWxBbGlnbm1lbnQsIElneE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hHcmlkQ2VsbEltYWdlQWx0UGlwZSwgSWd4U3RyaW5nUmVwbGFjZVBpcGUsIElneENvbHVtbkZvcm1hdHRlclBpcGUgfSBmcm9tICcuL2NvbW1vbi9waXBlcyc7XG5pbXBvcnQgeyBJZ3hUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFRvb2x0aXBUYXJnZXREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3Rvb2x0aXAvdG9vbHRpcC10YXJnZXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFN1ZmZpeERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc3VmZml4L3N1ZmZpeC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4UHJlZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9wcmVmaXgvcHJlZml4LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hEYXRlVGltZUVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGF0ZS10aW1lLWVkaXRvci9kYXRlLXRpbWUtZWRpdG9yLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElneERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4VGV4dFNlbGVjdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGV4dC1zZWxlY3Rpb24vdGV4dC1zZWxlY3Rpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEZvY3VzRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9mb2N1cy9mb2N1cy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SW5wdXREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2lucHV0L2lucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQtZ3JvdXAvaW5wdXQtZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneENoaXBDb21wb25lbnQgfSBmcm9tICcuLi9jaGlwcy9jaGlwLmNvbXBvbmVudCc7XG5cbi8qKlxuICogUHJvdmlkaW5nIHJlZmVyZW5jZSB0byBgSWd4R3JpZENlbGxDb21wb25lbnRgOlxuICogYGBgdHlwZXNjcmlwdFxuICogQFZpZXdDaGlsZCgnZ3JpZCcsIHsgcmVhZDogSWd4R3JpZENvbXBvbmVudCB9KVxuICogIHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50O1xuICogYGBgXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgbGV0IGNvbHVtbiA9IHRoaXMuZ3JpZC5jb2x1bW5MaXN0LmZpcnN0O1xuICogYGBgXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgbGV0IGNlbGwgPSBjb2x1bW4uY2VsbHNbMF07XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc2VsZWN0b3I6ICdpZ3gtZ3JpZC1jZWxsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2VsbC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbSGFtbWVyR2VzdHVyZXNNYW5hZ2VyXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgRGVjaW1hbFBpcGUsXG4gICAgICAgIFBlcmNlbnRQaXBlLFxuICAgICAgICBDdXJyZW5jeVBpcGUsXG4gICAgICAgIERhdGVQaXBlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBJZ3hDaGlwQ29tcG9uZW50LFxuICAgICAgICBJZ3hUZXh0SGlnaGxpZ2h0RGlyZWN0aXZlLFxuICAgICAgICBJZ3hJY29uQ29tcG9uZW50LFxuICAgICAgICBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50LFxuICAgICAgICBJZ3hJbnB1dERpcmVjdGl2ZSxcbiAgICAgICAgSWd4Rm9jdXNEaXJlY3RpdmUsXG4gICAgICAgIElneFRleHRTZWxlY3Rpb25EaXJlY3RpdmUsXG4gICAgICAgIElneENoZWNrYm94Q29tcG9uZW50LFxuICAgICAgICBJZ3hEYXRlUGlja2VyQ29tcG9uZW50LFxuICAgICAgICBJZ3hUaW1lUGlja2VyQ29tcG9uZW50LFxuICAgICAgICBJZ3hEYXRlVGltZUVkaXRvckRpcmVjdGl2ZSxcbiAgICAgICAgSWd4UHJlZml4RGlyZWN0aXZlLFxuICAgICAgICBJZ3hTdWZmaXhEaXJlY3RpdmUsXG4gICAgICAgIElneFRvb2x0aXBUYXJnZXREaXJlY3RpdmUsXG4gICAgICAgIElneFRvb2x0aXBEaXJlY3RpdmUsXG4gICAgICAgIElneEdyaWRDZWxsSW1hZ2VBbHRQaXBlLFxuICAgICAgICBJZ3hTdHJpbmdSZXBsYWNlUGlwZSxcbiAgICAgICAgSWd4Q29sdW1uRm9ybWF0dGVyUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZENlbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBDZWxsVHlwZSwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tbmV3JylcbiAgICBwdWJsaWMgZ2V0IGlzRW1wdHlBZGRSb3dDZWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRSb3cuYWRkUm93VUkgJiYgKHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnZhbHVlID09PSBudWxsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbignZXJyb3InLCB7IHJlYWQ6IElneFRvb2x0aXBEaXJlY3RpdmUgfSlcbiAgICBwdWJsaWMgZXJyb3JUb29sdGlwOiBRdWVyeUxpc3Q8SWd4VG9vbHRpcERpcmVjdGl2ZT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZXJyb3JJY29uJywgeyByZWFkOiBJZ3hJY29uQ29tcG9uZW50LCBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGVycm9ySWNvbjogSWd4SWNvbkNvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGRlZmF1bHQgZXJyb3IgdGVtcGxhdGUuXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0RXJyb3InLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgZGVmYXVsdEVycm9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb2x1bW4gb2YgdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBsZXQgY2VsbENvbHVtbiA9IHRoaXMuY2VsbC5jb2x1bW47XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb2x1bW46IENvbHVtblR5cGU7XG5cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IGZvcm1Hcm91cCgpOiBGb3JtR3JvdXAge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnZhbGlkYXRpb24uZ2V0Rm9ybUdyb3VwKHRoaXMuaW50Um93LmtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGludFJvdzogSWd4Um93RGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcm93IG9mIHRoZSBjZWxsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2VsbFJvdyA9IHRoaXMuY2VsbC5yb3c7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgcm93KCk6IFJvd1R5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmNyZWF0ZVJvdyh0aGlzLmludFJvdy5pbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZGF0YSBvZiB0aGUgcm93IG9mIHRoZSBjZWxsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgcm93RGF0YSA9IHRoaXMuY2VsbC5yb3dEYXRhO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcm93RGF0YTogYW55O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbkRhdGE6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgdGVtcGxhdGUgb2YgdGhlIGNlbGwuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxuZy10ZW1wbGF0ZSAjY2VsbFRlbXBsYXRlIGlneENlbGwgbGV0LXZhbHVlPlxuICAgICAqICAgPGRpdiBzdHlsZT1cImZvbnQtc3R5bGU6IG9ibGlxdWU7IGNvbG9yOmJsdWV2aW9sZXQ7IGJhY2tncm91bmQ6cmVkXCI+XG4gICAgICogICAgICAgPHNwYW4+e3t2YWx1ZX19PC9zcGFuPlxuICAgICAqICAgPC9kaXY+XG4gICAgICogPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZCgnY2VsbFRlbXBsYXRlJyx7cmVhZDogVGVtcGxhdGVSZWZ9KVxuICAgICAqIGNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jZWxsLmNlbGxUZW1wbGF0ZSA9IHRoaXMuY2VsbFRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdGVtcGxhdGUgPSAgdGhpcy5jZWxsLmNlbGxUZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNlbGxWYWxpZGF0aW9uRXJyb3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBpbm5lZEluZGljYXRvcjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgY2VsbCB2YWx1ZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jZWxsLnZhbHVlID0gXCJDZWxsIFZhbHVlXCI7XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsVmFsdWUgPSB0aGlzLmNlbGwudmFsdWU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2YWx1ZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY2VsbCBmb3JtYXR0ZXIuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsRm9yYW1hdHRlciA9IHRoaXMuY2VsbC5mb3JtYXR0ZXI7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb3JtYXR0ZXI6ICh2YWx1ZTogYW55LCByb3dEYXRhPzogYW55LCBjb2x1bW5EYXRhPzogYW55KSA9PiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjZWxsIHRlbXBsYXRlIGNvbnRleHQgb2JqZWN0LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgbGV0IGNvbnRleHQgPSB0aGlzLmNlbGwuY29udGV4dCgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBjb250ZXh0KCk6IElneENlbGxUZW1wbGF0ZUNvbnRleHQge1xuICAgICAgICBjb25zdCBnZXRDZWxsVHlwZSA9ICgpID0+IHRoaXMuZ2V0Q2VsbFR5cGUodHJ1ZSk7XG4gICAgICAgIGNvbnN0IGN0eDogSWd4Q2VsbFRlbXBsYXRlQ29udGV4dCA9IHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxUZW1wbGF0ZUNvbnRleHQ6IHRoaXMuY29sdW1uLmFkZGl0aW9uYWxUZW1wbGF0ZUNvbnRleHQsXG4gICAgICAgICAgICBnZXQgY2VsbCgpIHtcbiAgICAgICAgICAgICAgICAvKiBUdXJucyB0aGUgYGNlbGxgIHByb3BlcnR5IGZyb20gdGhlIHRlbXBsYXRlIGNvbnRleHQgb2JqZWN0IGludG8gbGF6eS1ldmFsdWF0ZWQgb25lLlxuICAgICAgICAgICAgICAgICAqIE90aGVyd2lzZSBvbiBlYWNoIGRldGVjdGlvbiBjeWNsZSB0aGUgY2VsbCB0ZW1wbGF0ZSBpcyByZWNyZWF0aW5nIE4gY2VsbCBpbnN0YW5jZXMgd2hlcmVcbiAgICAgICAgICAgICAgICAgKiBOID0gbnVtYmVyIG9mIHZpc2libGUgY2VsbHMgaW4gdGhlIGdyaWQsIGxlYWRpbmcgdG8gbWFzc2l2ZSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBsYXJnZSBncmlkcy5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q2VsbFR5cGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZWRpdE1vZGUpIHtcbiAgICAgICAgICAgIGN0eC5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNJbnZhbGlkKSB7XG4gICAgICAgICAgICBjdHguZGVmYXVsdEVycm9yVGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRFcnJvclRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdHg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY2VsbCB0ZW1wbGF0ZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHRlbXBsYXRlID0gdGhpcy5jZWxsLnRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCB0ZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdE1vZGUgJiYgdGhpcy5mb3JtR3JvdXApIHtcbiAgICAgICAgICAgIGNvbnN0IGlubGluZUVkaXRvclRlbXBsYXRlID0gdGhpcy5jb2x1bW4uaW5saW5lRWRpdG9yVGVtcGxhdGU7XG4gICAgICAgICAgICByZXR1cm4gaW5saW5lRWRpdG9yVGVtcGxhdGUgPyBpbmxpbmVFZGl0b3JUZW1wbGF0ZSA6IHRoaXMuaW5saW5lRWRpdG9yVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2VsbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jZWxsVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb3dFZGl0YWJsZSAmJiB0aGlzLmludFJvdy5hZGRSb3dVSSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkUm93Q2VsbFRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRDZWxsVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcGlubmVkIGluZGljYXRvciB0ZW1wbGF0ZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHRlbXBsYXRlID0gdGhpcy5jZWxsLnBpbm5lZEluZGljYXRvclRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBwaW5uZWRJbmRpY2F0b3JUZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucGlubmVkSW5kaWNhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waW5uZWRJbmRpY2F0b3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBpbm5lZEluZGljYXRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgaWRgIG9mIHRoZSBncmlkIGluIHdoaWNoIHRoZSBjZWxsIGlzIHN0b3JlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGdyaWRJZCA9IHRoaXMuY2VsbC5ncmlkSUQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGdyaWRJRCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRSb3cuZ3JpZElEO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYGluZGV4YCBvZiB0aGUgcm93IHdoZXJlIHRoZSBjZWxsIGlzIHN0b3JlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHJvd0luZGV4ID0gdGhpcy5jZWxsLnJvd0luZGV4O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtcm93SW5kZXgnKVxuICAgIHB1YmxpYyBnZXQgcm93SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50Um93LmluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGBpbmRleGAgb2YgdGhlIGNlbGwgY29sdW1uLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY29sdW1uSW5kZXggPSB0aGlzLmNlbGwuY29sdW1uSW5kZXg7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5pbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjb2x1bW4gdmlzaWJsZSBpbmRleC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHZpc2libGVDb2x1bW5JbmRleCA9IHRoaXMuY2VsbC52aXNpYmxlQ29sdW1uSW5kZXg7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS12aXNpYmxlSW5kZXgnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB2aXNpYmxlQ29sdW1uSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5jb2x1bW5MYXlvdXRDaGlsZCA/IHRoaXMuY29sdW1uLnZpc2libGVJbmRleCA6IHRoaXMuX3ZJbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHZpc2libGVDb2x1bW5JbmRleCh2YWwpIHtcbiAgICAgICAgdGhpcy5fdkluZGV4ID0gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIElEIG9mIHRoZSBjZWxsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2VsbElEID0gdGhpcy5jZWxsLmNlbGxJRDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2VsbElEKCkge1xuICAgICAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5ncmlkLnByaW1hcnlLZXk7XG4gICAgICAgIGNvbnN0IHJvd0lEID0gcHJpbWFyeUtleSA/IHRoaXMucm93RGF0YVtwcmltYXJ5S2V5XSA6IHRoaXMucm93RGF0YTtcbiAgICAgICAgcmV0dXJuIHsgcm93SUQsIGNvbHVtbklEOiB0aGlzLmNvbHVtbkluZGV4LCByb3dJbmRleDogdGhpcy5yb3dJbmRleCB9O1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgcHVibGljIGdldCBhdHRyQ2VsbElEKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5pbnRSb3cuZ3JpZElEfV8ke3RoaXMucm93SW5kZXh9XyR7dGhpcy52aXNpYmxlQ29sdW1uSW5kZXh9YDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGl0bGUnKVxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRNb2RlIHx8IHRoaXMuY2VsbFRlbXBsYXRlIHx8IHRoaXMuZXJyb3JTaG93aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlcih0aGlzLnZhbHVlLCB0aGlzLnJvd0RhdGEsIHRoaXMuY29sdW1uRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jb2x1bW4ucGlwZUFyZ3M7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuZ3JpZC5sb2NhbGU7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmNvbHVtbi5kYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuUGVyY2VudDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0UGVyY2VudCh0aGlzLnZhbHVlLCBsb2NhbGUsIGFyZ3MuZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5DdXJyZW5jeTpcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0Q3VycmVuY3kodGhpcy52YWx1ZSwgdGhpcy5jdXJyZW5jeUNvZGUsIGFyZ3MuZGlzcGxheSwgYXJncy5kaWdpdHNJbmZvLCBsb2NhbGUpO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZTpcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZSh0aGlzLnZhbHVlLCBhcmdzLmZvcm1hdCwgbG9jYWxlLCBhcmdzLnRpbWV6b25lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tYm9vbC10cnVlJylcbiAgICBwdWJsaWMgZ2V0IGJvb2xlYW5DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbicgJiYgdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBuYXRpdmVFbGVtZW50IG9mIHRoZSBjZWxsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2VsbE5hdGl2ZUVsZW1lbnQgPSB0aGlzLmNlbGwubmF0aXZlRWxlbWVudDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGNlbGxTZWxlY3Rpb25Nb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2VsbFNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGNlbGxTZWxlY3Rpb25Nb2RlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9jZWxsU2VsZWN0aW9uID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRQb2ludGVyTGlzdGVuZXJzKHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVQb2ludGVyTGlzdGVuZXJzKHRoaXMuX2NlbGxTZWxlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fY2VsbFNlbGVjdGlvbiA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbGFzdFNlYXJjaEluZm8odmFsdWU6IElTZWFyY2hJbmZvKSB7XG4gICAgICAgIHRoaXMuX2xhc3RTZWFyY2hJbmZvID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0VGV4dCh0aGlzLl9sYXN0U2VhcmNoSW5mby5zZWFyY2hUZXh0LCB0aGlzLl9sYXN0U2VhcmNoSW5mby5jYXNlU2Vuc2l0aXZlLCB0aGlzLl9sYXN0U2VhcmNoSW5mby5leGFjdE1hdGNoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tcGlubmVkLWxhc3QnKVxuICAgIHB1YmxpYyBsYXN0UGlubmVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tcGlubmVkLWZpcnN0JylcbiAgICBwdWJsaWMgZmlyc3RQaW5uZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgY2VsbCBpcyBpbiBlZGl0IG1vZGUuXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZF9fdGQtLWVkaXRpbmcnKVxuICAgIHB1YmxpYyBlZGl0TW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXQgdGhlIGByb2xlYCBwcm9wZXJ0eSBvZiB0aGUgY2VsbC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBcImdyaWRjZWxsXCJgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNlbGwucm9sZSA9ICdncmlkLWNlbGwnO1xuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2VsbFJvbGUgPSB0aGlzLmNlbGwucm9sZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBwdWJsaWMgcm9sZSA9ICdncmlkY2VsbCc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGNlbGwgaXMgZWRpdGFibGUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0NlbGxSZWFkb25seSA9IHRoaXMuY2VsbC5yZWFkb25seTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJlYWRvbmx5JylcbiAgICBwdWJsaWMgZ2V0IHJlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZWRpdGFibGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKVxuICAgIHB1YmxpYyBnZXQgYXJpYURlc2NyaWJlQnkoKSB7XG4gICAgICAgIGxldCBkZXNjcmliZUJ5ID0gKHRoaXMuZ3JpZElEICsgJ18nICsgdGhpcy5jb2x1bW4uZmllbGQpLnJlcGxhY2UoJy4nLCAnXycpO1xuICAgICAgICBpZiAodGhpcy5pc0ludmFsaWQpIHtcbiAgICAgICAgICAgIGRlc2NyaWJlQnkgKz0gJyAnICsgdGhpcy5hcmlhRXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXNjcmliZUJ5O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgYXJpYUVycm9yTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pZCArICdfJyArIHRoaXMuY29sdW1uLmZpZWxkICsgJ18nICsgdGhpcy5pbnRSb3cuaW5kZXggKyAnX2Vycm9yJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZF9fdGQtLWludmFsaWQnKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWludmFsaWQnKVxuICAgIHB1YmxpYyBnZXQgaXNJbnZhbGlkKCkge1xuICAgICAgICBjb25zdCBpc0ludmFsaWQgPSB0aGlzLmZvcm1Hcm91cD8uZ2V0KHRoaXMuY29sdW1uPy5maWVsZCk/LmludmFsaWQgJiYgdGhpcy5mb3JtR3JvdXA/LmdldCh0aGlzLmNvbHVtbj8uZmllbGQpPy50b3VjaGVkO1xuICAgICAgICByZXR1cm4gIXRoaXMuaW50Um93LmRlbGV0ZWQgJiYgaXNJbnZhbGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tdmFsaWQnKVxuICAgIHB1YmxpYyBnZXQgaXNWYWxpZEFmdGVyRWRpdCgpIHtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cD8uZ2V0KHRoaXMuY29sdW1uPy5maWVsZCk7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRNb2RlICYmIGZvcm1Db250cm9sICYmICFmb3JtQ29udHJvbC5pbnZhbGlkICYmIGZvcm1Db250cm9sLmRpcnR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGZvcm1Db250cm9sIHJlc3BvbnNpYmxlIGZvciB2YWx1ZSBjaGFuZ2VzIGFuZCB2YWxpZGF0aW9uIGZvciB0aGlzIGNlbGwuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldCBmb3JtQ29udHJvbCgpOiBGb3JtQ29udHJvbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQudmFsaWRhdGlvbi5nZXRGb3JtQ29udHJvbCh0aGlzLmludFJvdy5rZXksIHRoaXMuY29sdW1uLmZpZWxkKSBhcyBGb3JtQ29udHJvbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdyaWRSb3dTcGFuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5ncmlkUm93U3BhbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdyaWRDb2x1bW5TcGFuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5ncmlkQ29sdW1uU3BhbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0VuZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4ucm93RW5kO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sRW5kKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5jb2xFbmQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dTdGFydCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4ucm93U3RhcnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2xTdGFydCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uY29sU3RhcnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgd2lkdGggb2YgdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsV2lkdGggPSB0aGlzLmNlbGwud2lkdGg7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB3aWR0aCA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZF9fdGQtLWFjdGl2ZScpXG4gICAgcHVibGljIGFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2VsZWN0ZWQnKVxuICAgIHB1YmxpYyBnZXQgYXJpYVNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZCB8fCB0aGlzLmNvbHVtbi5zZWxlY3RlZCB8fCB0aGlzLmludFJvdy5zZWxlY3RlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGNlbGwgaXMgc2VsZWN0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc1NlbGVjdGVkID0gdGhpcy5jZWxsLnNlbGVjdGVkO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZF9fdGQtLXNlbGVjdGVkJylcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGVkKHRoaXMuc2VsZWN0aW9uTm9kZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cy9kZXNlbGVjdHMgdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2VsbC5zZWxlY3RlZCA9IHRydWUuXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25Ob2RlO1xuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWRkKG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnJlbW92ZShub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgY2VsbCBjb2x1bW4gaXMgc2VsZWN0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0NlbGxDb2x1bW5TZWxlY3RlZCA9IHRoaXMuY2VsbC5jb2x1bW5TZWxlY3RlZDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3RkLS1jb2x1bW4tc2VsZWN0ZWQnKVxuICAgIHB1YmxpYyBnZXQgY29sdW1uU2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNDb2x1bW5TZWxlY3RlZCh0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY3VycmVudCBlZGl0IHZhbHVlIHdoaWxlIGEgY2VsbCBpcyBpbiBlZGl0IG1vZGUuXG4gICAgICogT25seSBmb3IgY2VsbCBlZGl0aW5nIG1vZGUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2VsbC5lZGl0VmFsdWUgPSB2YWx1ZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgZWRpdFZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbEluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsLmVkaXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBlZGl0IHZhbHVlIHdoaWxlIGEgY2VsbCBpcyBpbiBlZGl0IG1vZGUuXG4gICAgICogT25seSBmb3IgY2VsbCBlZGl0aW5nIG1vZGUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBlZGl0VmFsdWUgPSB0aGlzLmNlbGwuZWRpdFZhbHVlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBlZGl0VmFsdWUoKSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbEluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbC5lZGl0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGNlbGwgaXMgZWRpdGFibGUuXG4gICAgICovXG4gICAgcHVibGljIGdldCBlZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmVkaXRhYmxlICYmICF0aGlzLmludFJvdy5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tcm93LXBpbm5lZC1maXJzdCcpXG4gICAgcHVibGljIGRpc3BsYXlQaW5uZWRDaGlwID0gZmFsc2U7XG5cblxuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRDZWxsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRDZWxsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0UGlubmVkSW5kaWNhdG9yJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRQaW5uZWRJbmRpY2F0b3I6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdpbmxpbmVFZGl0b3InLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgaW5saW5lRWRpdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdhZGRSb3dDZWxsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGFkZFJvd0NlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoSWd4VGV4dEhpZ2hsaWdodERpcmVjdGl2ZSwgeyByZWFkOiBJZ3hUZXh0SGlnaGxpZ2h0RGlyZWN0aXZlIH0pXG4gICAgcHJvdGVjdGVkIHNldCBoaWdobGlnaHQodmFsdWU6IElneFRleHRIaWdobGlnaHREaXJlY3RpdmUpIHtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0ID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHRoaXMuX2hpZ2hsaWdodCAmJiB0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0LmhpZ2hsaWdodCh0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uY2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uZXhhY3RNYXRjaCk7XG4gICAgICAgICAgICB0aGlzLl9oaWdobGlnaHQuYWN0aXZhdGVJZk5lY2Vzc2FyeSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBoaWdobGlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWdobGlnaHQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBzZWxlY3Rpb25Ob2RlKCk6IElTZWxlY3Rpb25Ob2RlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJvdzogdGhpcy5yb3dJbmRleCxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4uY29sdW1uTGF5b3V0Q2hpbGQgPyB0aGlzLmNvbHVtbi5wYXJlbnQudmlzaWJsZUluZGV4IDogdGhpcy52aXNpYmxlQ29sdW1uSW5kZXgsXG4gICAgICAgICAgICBsYXlvdXQ6IHRoaXMuY29sdW1uLmNvbHVtbkxheW91dENoaWxkID8ge1xuICAgICAgICAgICAgICAgIHJvd1N0YXJ0OiB0aGlzLmNvbHVtbi5yb3dTdGFydCxcbiAgICAgICAgICAgICAgICBjb2xTdGFydDogdGhpcy5jb2x1bW4uY29sU3RhcnQsXG4gICAgICAgICAgICAgICAgcm93RW5kOiB0aGlzLmNvbHVtbi5yb3dFbmQsXG4gICAgICAgICAgICAgICAgY29sRW5kOiB0aGlzLmNvbHVtbi5jb2xFbmQsXG4gICAgICAgICAgICAgICAgY29sdW1uVmlzaWJsZUluZGV4OiB0aGlzLnZpc2libGVDb2x1bW5JbmRleFxuICAgICAgICAgICAgfSA6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGhpZ2hsaWdodCBjbGFzcyBvZiB0aGUgY2VsbC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBcImlneC1oaWdobGlnaHRcImAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBoaWdobGlnaHRDbGFzcyA9IHRoaXMuY2VsbC5oaWdobGlnaHRDbGFzcztcbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jZWxsLmhpZ2hsaWdodENsYXNzID0gJ2lneC1jZWxsLWhpZ2hsaWdodCc7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlnaGxpZ2h0Q2xhc3MgPSAnaWd4LWhpZ2hsaWdodCc7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGFjdGl2ZSBoaWdobGlnaHQgY2xhc3MgY2xhc3Mgb2YgdGhlIGNlbGwuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgXCJpZ3gtaGlnaGxpZ2h0X19hY3RpdmVcImAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBhY3RpdmVIaWdobGlnaHRDbGFzcyA9IHRoaXMuY2VsbC5hY3RpdmVIaWdobGlnaHRDbGFzcztcbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jZWxsLmFjdGl2ZUhpZ2hsaWdodENsYXNzID0gJ2lneC1jZWxsLWhpZ2hsaWdodF9hY3RpdmUnO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGFjdGl2ZUhpZ2hsaWdodENsYXNzID0gJ2lneC1oaWdobGlnaHRfX2FjdGl2ZSc7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHN0ZXAoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IHRoaXMuY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm87XG4gICAgICAgIGlmICghZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RlcCA9ICtkaWdpdHNJbmZvLnN1YnN0cihkaWdpdHNJbmZvLmluZGV4T2YoJy4nKSArIDEsIDEpO1xuICAgICAgICByZXR1cm4gMSAvIChNYXRoLnBvdygxMCwgc3RlcCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgY3VycmVuY3lDb2RlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5waXBlQXJncy5jdXJyZW5jeUNvZGUgP1xuICAgICAgICAgICAgdGhpcy5jb2x1bW4ucGlwZUFyZ3MuY3VycmVuY3lDb2RlIDogZ2V0TG9jYWxlQ3VycmVuY3lDb2RlKHRoaXMuZ3JpZC5sb2NhbGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgY3VycmVuY3lDb2RlU3ltYm9sKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBnZXRDdXJyZW5jeVN5bWJvbCh0aGlzLmN1cnJlbmN5Q29kZSwgJ3dpZGUnLCB0aGlzLmdyaWQubG9jYWxlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2xhc3RTZWFyY2hJbmZvOiBJU2VhcmNoSW5mbztcbiAgICBwcml2YXRlIF9oaWdobGlnaHQ6IElneFRleHRIaWdobGlnaHREaXJlY3RpdmU7XG4gICAgcHJpdmF0ZSBfY2VsbFNlbGVjdGlvbjogR3JpZFNlbGVjdGlvbk1vZGUgPSBHcmlkU2VsZWN0aW9uTW9kZS5tdWx0aXBsZTtcbiAgICBwcml2YXRlIF92SW5kZXggPSAtMTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgc2VsZWN0aW9uU2VydmljZTogSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHVibGljIGdyaWQ6IEdyaWRUeXBlLFxuICAgICAgICBASW5qZWN0KElneE92ZXJsYXlTZXJ2aWNlKSBwcm90ZWN0ZWQgb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJvdGVjdGVkIHpvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSB0b3VjaE1hbmFnZXI6IEhhbW1lckdlc3R1cmVzTWFuYWdlcixcbiAgICAgICAgcHJvdGVjdGVkIHBsYXRmb3JtVXRpbDogUGxhdGZvcm1VdGlsXG4gICAgKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdkYmxjbGljaycsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uRG91YmxlQ2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdkb3VibGV0YXAnKSB7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRvdWJsZS10YXAgdG8gem9vbSBvbiBpT1NcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZWRpdGFibGUgJiYgIXRoaXMuZWRpdE1vZGUgJiYgIXRoaXMuaW50Um93LmRlbGV0ZWQgJiYgIXRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dFZGl0aW5nQmxvY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVudGVyRWRpdE1vZGUodGhpcywgZXZlbnQgYXMgRXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ncmlkLmRvdWJsZUNsaWNrLmVtaXQoe1xuICAgICAgICAgICAgY2VsbDogdGhpcy5nZXRDZWxsVHlwZSgpLFxuICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5ncmlkLmNlbGxDbGljay5lbWl0KHtcbiAgICAgICAgICAgIGNlbGw6IHRoaXMuZ2V0Q2VsbFR5cGUoKSxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdjb250ZXh0bWVudScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uQ29udGV4dE1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5ncmlkLmNvbnRleHRNZW51LmVtaXQoe1xuICAgICAgICAgICAgY2VsbDogdGhpcy5nZXRDZWxsVHlwZSgpLFxuICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMucG9pbnRlcmRvd24pO1xuICAgICAgICAgICAgdGhpcy5hZGRQb2ludGVyTGlzdGVuZXJzKHRoaXMuY2VsbFNlbGVjdGlvbk1vZGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm1VdGlsLmlzSU9TKSB7XG4gICAgICAgICAgICB0aGlzLnRvdWNoTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMubmF0aXZlRWxlbWVudCwgJ2RvdWJsZXRhcCcsIHRoaXMub25Eb3VibGVDbGljaywge1xuICAgICAgICAgICAgICAgIGNzc1Byb3BzOiB7fSAvKiBkb24ndCBkaXNhYmxlIHVzZXItc2VsZWN0LCBldGMgKi9cbiAgICAgICAgICAgIH0gYXMgSGFtbWVyT3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuZXJyb3JUb29sdGlwLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXJyb3JUb29sdGlwLmxlbmd0aCA+IDAgJiYgdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAvLyBlcnJvciBvY3VycmVkXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbkVycm9yVG9vbHRpcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGVycm9yU2hvd2luZyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBvcGVuRXJyb3JUb29sdGlwKCkge1xuICAgICAgICBjb25zdCB0b29sdGlwID0gdGhpcy5lcnJvclRvb2x0aXAuZmlyc3Q7XG4gICAgICAgIHRvb2x0aXAub3BlbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMuZXJyb3JJY29uLmVsLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgICAgICAgICBleGNsdWRlRnJvbU91dHNpZGVDbGljazogW3RoaXMubmF0aXZlRWxlbWVudF0sXG4gICAgICAgICAgICAgICAgY2xvc2VPbkVzY2FwZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgb3V0bGV0OiB0aGlzLmdyaWQub3V0bGV0LFxuICAgICAgICAgICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koe1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5wb2ludGVyZG93bik7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVBvaW50ZXJMaXN0ZW5lcnModGhpcy5jZWxsU2VsZWN0aW9uTW9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRvdWNoTWFuYWdlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuZWRpdE1vZGUgJiYgY2hhbmdlcy5lZGl0TW9kZS5jdXJyZW50VmFsdWUgJiYgdGhpcy5mb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgLy8gZW5zdXJlIHdoZW4gdmFsdWVzIGNoYW5nZSwgZm9ybSBjb250cm9sIGlzIGZvcmNlZCB0byBiZSBtYXJrZWQgYXMgdG91Y2hlLlxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5lZGl0TW9kZSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKSk7XG4gICAgICAgICAgICAvLyB3aGlsZSBpbiBlZGl0IG1vZGUgc3Vic2NyaWJlIHRvIHZhbHVlIGNoYW5nZXMgb24gdGhlIGN1cnJlbnQgZm9ybSBjb250cm9sIGFuZCBzZXQgdG8gZWRpdFZhbHVlXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXMucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5lZGl0TW9kZSkpLnN1YnNjcmliZShzdGF0dXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdJTlZBTElEJyAmJiB0aGlzLmVycm9yVG9vbHRpcC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMuZXJyb3JUb29sdGlwLmZpcnN0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZUFuZFJlcG9zaXRpb25PdmVybGF5QnlJZCh0b29sdGlwLm92ZXJsYXlJZCwgdGhpcy5lcnJvclRvb2x0aXAuZmlyc3QuZWxlbWVudC5vZmZzZXRXaWR0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMudmFsdWUgJiYgIWNoYW5nZXMudmFsdWUuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Lmxhc3RTZWFyY2hJbmZvLnNlYXJjaFRleHQgPSB0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uc2VhcmNoVGV4dDtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodC5sYXN0U2VhcmNoSW5mby5jYXNlU2Vuc2l0aXZlID0gdGhpcy5ncmlkLmxhc3RTZWFyY2hJbmZvLmNhc2VTZW5zaXRpdmU7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHQubGFzdFNlYXJjaEluZm8uZXhhY3RNYXRjaCA9IHRoaXMuZ3JpZC5sYXN0U2VhcmNoSW5mby5leGFjdE1hdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNpemVBbmRSZXBvc2l0aW9uT3ZlcmxheUJ5SWQob3ZlcmxheUlkOiBzdHJpbmcsIG5ld1NpemU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvdmVybGF5ID0gdGhpcy5vdmVybGF5U2VydmljZS5nZXRPdmVybGF5QnlJZChvdmVybGF5SWQpO1xuICAgICAgICBpZiAoIW92ZXJsYXkpIHJldHVybjtcbiAgICAgICAgb3ZlcmxheS5pbml0aWFsU2l6ZS53aWR0aCA9IG5ld1NpemU7XG4gICAgICAgIG92ZXJsYXkuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuc3R5bGUud2lkdGggPSBuZXdTaXplICsgJ3B4JztcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5yZXBvc2l0aW9uKG92ZXJsYXlJZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RhcnRzL2VuZHMgZWRpdCBtb2RlIGZvciB0aGUgY2VsbC5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjZWxsLnNldEVkaXRNb2RlKHRydWUpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRFZGl0TW9kZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbnRSb3cuZGVsZXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVkaXRhYmxlICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmNydWRTZXJ2aWNlLmNlbGxJbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX2NlbGwodGhpcy5ncmlkLmNydWRTZXJ2aWNlLmNlbGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbmRDZWxsRWRpdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVudGVyRWRpdE1vZGUodGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW5kQ2VsbEVkaXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgbmV3IHZhbHVlIHRvIHRoZSBjZWxsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNlbGwudXBkYXRlKCdOZXcgVmFsdWUnKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIC8vIFRPRE86IFJlZmFjdG9yXG4gICAgcHVibGljIHVwZGF0ZSh2YWw6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5pbnRSb3cuZGVsZXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNlbGwgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbDtcbiAgICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgICAgICBjZWxsID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmNyZWF0ZUNlbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2VsbC5lZGl0VmFsdWUgPSB2YWw7XG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnVwZGF0ZV9jZWxsKGNlbGwpO1xuICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW5kQ2VsbEVkaXQoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHBvaW50ZXJkb3duID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2VsbFNlbGVjdGlvbk1vZGUgIT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMucGxhdGZvcm1VdGlsLmlzTGVmdENsaWNrKGV2ZW50KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLnNldEFjdGl2ZU5vZGUoeyByb3dJbmRleDogdGhpcy5yb3dJbmRleCwgY29sSW5kZXg6IHRoaXMudmlzaWJsZUNvbHVtbkluZGV4IH0pO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFkZEtleWJvYXJkUmFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pbml0S2V5Ym9hcmRTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnByaW1hcnlCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIEVuc3VyZSBSTUIgQ2xpY2sgb24gZWRpdGVkIGNlbGwgZG9lcyBub3QgZW5kIGNlbGwgZWRpdGluZ1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnVwZGF0ZUNlbGwodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnByaW1hcnlCdXR0b24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5wb2ludGVyRG93bih0aGlzLnNlbGVjdGlvbk5vZGUsIGV2ZW50LnNoaWZ0S2V5LCBldmVudC5jdHJsS2V5KTtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZShldmVudCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBwb2ludGVyZW50ZXIgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBpc0hpZXJhcmNoaWNhbEdyaWQgPSB0aGlzLmdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpZ3gtaGllcmFyY2hpY2FsLWdyaWQnO1xuICAgICAgICBpZiAoaXNIaWVyYXJjaGljYWxHcmlkICYmICghdGhpcy5ncmlkLm5hdmlnYXRpb24/LmFjdGl2ZU5vZGU/LmdyaWRJRCB8fCB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlLmdyaWRJRCAhPT0gdGhpcy5ncmlkSUQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHJhZ01vZGUgPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UucG9pbnRlckVudGVyKHRoaXMuc2VsZWN0aW9uTm9kZSwgZXZlbnQpO1xuICAgICAgICBpZiAoZHJhZ01vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZm9jdXNvdXQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VFcnJvclRvb2x0aXAoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlRXJyb3JUb29sdGlwKCkge1xuICAgICAgICBjb25zdCB0b29sdGlwID0gdGhpcy5lcnJvclRvb2x0aXAuZmlyc3Q7XG4gICAgICAgIGlmICh0b29sdGlwKSB7XG4gICAgICAgICAgICB0b29sdGlwLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHBvaW50ZXJ1cCA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzSGllcmFyY2hpY2FsR3JpZCA9IHRoaXMuZ3JpZC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lneC1oaWVyYXJjaGljYWwtZ3JpZCc7XG4gICAgICAgIGlmICghdGhpcy5wbGF0Zm9ybVV0aWwuaXNMZWZ0Q2xpY2soZXZlbnQpIHx8IChpc0hpZXJhcmNoaWNhbEdyaWQgJiYgKCF0aGlzLmdyaWQubmF2aWdhdGlvbj8uYWN0aXZlTm9kZT8uZ3JpZElEIHx8XG4gICAgICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlLmdyaWRJRCAhPT0gdGhpcy5ncmlkSUQpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNlcnZpY2UucG9pbnRlclVwKHRoaXMuc2VsZWN0aW9uTm9kZSwgdGhpcy5ncmlkLnJhbmdlU2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGFjdGl2YXRlKGV2ZW50OiBGb2N1c0V2ZW50IHwgS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25Ob2RlO1xuICAgICAgICBsZXQgc2hvdWxkRW1pdFNlbGVjdGlvbiA9ICF0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNBY3RpdmVOb2RlKG5vZGUpO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNlcnZpY2UucHJpbWFyeUJ1dHRvbikge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEFjdGl2ZSA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHRoaXMuY2VsbFNlbGVjdGlvbk1vZGUgPT09IEdyaWRTZWxlY3Rpb25Nb2RlLnNpbmdsZSAmJiAoZXZlbnQgYXMgYW55KT8uY3RybEtleSAmJiB0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHNob3VsZEVtaXRTZWxlY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWN0aXZlRWxlbWVudCA9IG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjYW5jZWwgPSB0aGlzLl91cGRhdGVDUlVEU3RhdHVzKGV2ZW50KTtcbiAgICAgICAgICAgIGlmIChjYW5jZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRBY3RpdmU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBhY3RpdmVFbGVtZW50ID8gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19ieV9pbmRleChhY3RpdmVFbGVtZW50LnJvdykgOiBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dFZGl0aW5nQmxvY2tlZCAmJiByb3cgJiYgdGhpcy5pbnRSb3cua2V5ICE9PSByb3cua2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmNydWRTZXJ2aWNlLmNlbGxJbkVkaXRNb2RlICYmICF0aGlzLmVkaXRNb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnVwZGF0ZUNlbGwodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRpb24uc2V0QWN0aXZlTm9kZSh7IHJvdzogdGhpcy5yb3dJbmRleCwgY29sdW1uOiB0aGlzLnZpc2libGVDb2x1bW5JbmRleCB9KTtcblxuICAgICAgICBjb25zdCBpc1RhcmdldEVycm9ySWNvbiA9IGV2ZW50ICYmIGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQgPT09IHRoaXMuZXJyb3JJY29uPy5lbC5uYXRpdmVFbGVtZW50XG4gICAgICAgIGlmICh0aGlzLmlzSW52YWxpZCAmJiAhaXNUYXJnZXRFcnJvckljb24pIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMub3BlbkVycm9yVG9vbHRpcCgpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLmFjdGl2ZU5vZGVDaGFuZ2UucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VFcnJvclRvb2x0aXAoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5wcmltYXJ5QnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuY2VsbFNlbGVjdGlvbk1vZGUgPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlICYmIHRoaXMuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmlzSW5NYXAodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFjdGl2ZUVsZW1lbnQpICYmIChldmVudCBhcyBhbnkpPy5jdHJsS2V5ICYmICEoZXZlbnQgYXMgYW55KT8uc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UucmVtb3ZlKHRoaXMuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBzaG91bGRFbWl0U2VsZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFkZCh0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWN0aXZlRWxlbWVudCwgZmFsc2UpOyAvLyBwb2ludGVyIGV2ZW50cyBoYW5kbGUgcmFuZ2UgZ2VuZXJhdGlvblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5rZXlib2FyZFN0YXRlT25Gb2N1cyhub2RlLCB0aGlzLmdyaWQucmFuZ2VTZWxlY3RlZCwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkLmlzQ2VsbFNlbGVjdGFibGUgJiYgc2hvdWxkRW1pdFNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmdyaWQuc2VsZWN0ZWQuZW1pdCh7IGNlbGw6IHRoaXMuZ2V0Q2VsbFR5cGUoKSwgZXZlbnQgfSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIHByb3ZpZGVkIHN0cmluZyBtYXRjaGVzIHRoZSB0ZXh0IGluIHRoZSBjZWxsLCB0aGUgdGV4dCBnZXRzIGhpZ2hsaWdodGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNlbGwuaGlnaGxpZ2h0VGV4dCgnQ2VsbCBWYWx1ZScsIHRydWUpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGhpZ2hsaWdodFRleHQodGV4dDogc3RyaW5nLCBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbiwgZXhhY3RNYXRjaD86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHQgJiYgdGhpcy5jb2x1bW4uc2VhcmNoYWJsZSA/IHRoaXMuaGlnaGxpZ2h0LmhpZ2hsaWdodCh0ZXh0LCBjYXNlU2Vuc2l0aXZlLCBleGFjdE1hdGNoKSA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBoaWdobGlnaHQgb2YgdGhlIHRleHQgaW4gdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2VsbC5jbGVhckhpZ2hMaWdodCgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGNsZWFySGlnaGxpZ2h0KCkge1xuICAgICAgICBpZiAodGhpcy5oaWdobGlnaHQgJiYgdGhpcy5jb2x1bW4uc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5oaWdobGlnaHQuY2xlYXJIaWdobGlnaHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2FsY3VsYXRlU2l6ZVRvRml0KHJhbmdlOiBhbnkpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybVV0aWwuZ2V0Tm9kZVNpemVWaWFSYW5nZShyYW5nZSwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWFyY2hNZXRhZGF0YSgpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgIG1ldGEuc2V0KCdwaW5uZWQnLCB0aGlzLmdyaWQuaXNSZWNvcmRQaW5uZWRCeVZpZXdJbmRleCh0aGlzLmludFJvdy5pbmRleCkpO1xuICAgICAgICByZXR1cm4gbWV0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlQ1JVRFN0YXR1cyhldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZWRpdGFibGVBcmdzO1xuICAgICAgICBjb25zdCBjcnVkID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlO1xuICAgICAgICBjb25zdCBlZGl0YWJsZUNlbGwgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbDtcbiAgICAgICAgY29uc3QgZWRpdE1vZGUgPSAhIShjcnVkLnJvdyB8fCBjcnVkLmNlbGwpO1xuXG4gICAgICAgIGlmICh0aGlzLmVkaXRhYmxlICYmIGVkaXRNb2RlICYmICF0aGlzLmludFJvdy5kZWxldGVkKSB7XG4gICAgICAgICAgICBpZiAoZWRpdGFibGVDZWxsKSB7XG4gICAgICAgICAgICAgICAgZWRpdGFibGVBcmdzID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnVwZGF0ZUNlbGwoZmFsc2UsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIC8qIFRoaXMgY2hlY2sgaXMgcmVsYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgaXNzdWUgIzY1MTc6XG4gICAgICAgICAgICAgICAgICogd2hlbiBlZGl0IGNlbGwgdGhhdCBiZWxvbmdzIHRvIGEgY29sdW1uIHdoaWNoIGlzIHNvcnRlZCBhbmQgcHJlc3MgdGFiLFxuICAgICAgICAgICAgICAgICAqIHRoZSBuZXh0IGNlbGwgaW4gZWRpdCBtb2RlIGlzIHdpdGggd3JvbmcgdmFsdWUgL2l0cyBjb250ZXh0IGlzIG5vdCB1cGRhdGVkLztcbiAgICAgICAgICAgICAgICAgKiBTbyB3ZSByZWFwcGx5IHNvcnRpbmcgYmVmb3JlIHRoZSBuZXh0IGNlbGwgZW50ZXJzIGVkaXQgbW9kZS5cbiAgICAgICAgICAgICAgICAgKiBBbHNvIHdlIG5lZWQgdG8ga2VlcCB0aGUgbm90aWZ5Q2hhbmdlcyBiZWxvdywgYmVjYXVzZSBvZiB0aGUgY3VycmVudFxuICAgICAgICAgICAgICAgICAqIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgd2hlbiB3ZSBoYXZlIGVkaXRpbmcgd2l0aCBlbmFibGVkIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmxlbmd0aCAmJiB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmluZGV4T2YoZWRpdGFibGVDZWxsLmNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGVkaXRhYmxlQXJncyAmJiBlZGl0YWJsZUFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNydWQuZXhpdENlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgICAgICAgICBjcnVkLmVudGVyRWRpdE1vZGUodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVkaXRhYmxlQ2VsbCAmJiBjcnVkLnNhbWVSb3codGhpcy5jZWxsSUQucm93SUQpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UudXBkYXRlQ2VsbCh0cnVlLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWRpdE1vZGUgJiYgIWNydWQuc2FtZVJvdyh0aGlzLmNlbGxJRC5yb3dJRCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbmRFZGl0KHRydWUsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkUG9pbnRlckxpc3RlbmVycyhzZWxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmVudGVyJywgdGhpcy5wb2ludGVyZW50ZXIpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5wb2ludGVydXApO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLmZvY3Vzb3V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVBvaW50ZXJMaXN0ZW5lcnMoc2VsZWN0aW9uKSB7XG4gICAgICAgIGlmIChzZWxlY3Rpb24gIT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJlbnRlcicsIHRoaXMucG9pbnRlcmVudGVyKTtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMucG9pbnRlcnVwKTtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5mb2N1c291dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDZWxsVHlwZSh1c2VSb3c/OiBib29sZWFuKTogQ2VsbFR5cGUge1xuICAgICAgICBjb25zdCByb3dJRCA9IHVzZVJvdyA/IHRoaXMuZ3JpZC5jcmVhdGVSb3codGhpcy5pbnRSb3cuaW5kZXgsIHRoaXMuaW50Um93LmRhdGEpIDogdGhpcy5pbnRSb3cuaW5kZXg7XG4gICAgICAgIHJldHVybiBuZXcgSWd4R3JpZENlbGwodGhpcy5ncmlkLCByb3dJRCwgdGhpcy5jb2x1bW4pO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFBpbm5lZEluZGljYXRvcj5cbiAgICA8aWd4LWNoaXBcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5UGlubmVkQ2hpcFwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWdyaWRfX3RkLS1waW5uZWQtY2hpcFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cIidjb21wYWN0J1wiXG4gICAgICAgID57eyBncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9waW5uZWRfcm93X2luZGljYXRvciB9fTwvaWd4LWNoaXBcbiAgICA+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2VsbD5cbiAgICA8ZGl2ICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlICE9PSAnYm9vbGVhbicgJiYgY29sdW1uLmRhdGFUeXBlICE9PSAnaW1hZ2UnIHx8IChjb2x1bW4uZGF0YVR5cGUgPT09ICdib29sZWFuJyAmJiB0aGlzLmZvcm1hdHRlcilcIlxuICAgICAgICBpZ3hUZXh0SGlnaGxpZ2h0XG4gICAgICAgIGNsYXNzPVwiaWd4LWdyaWRfX3RkLXRleHRcIlxuICAgICAgICBbY3NzQ2xhc3NdPVwiaGlnaGxpZ2h0Q2xhc3NcIlxuICAgICAgICBbYWN0aXZlQ3NzQ2xhc3NdPVwiYWN0aXZlSGlnaGxpZ2h0Q2xhc3NcIlxuICAgICAgICBbZ3JvdXBOYW1lXT1cImdyaWRJRFwiXG4gICAgICAgIFt2YWx1ZV09XCJcbiAgICAgICAgICAgIGZvcm1hdHRlclxuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgY29sdW1uRm9ybWF0dGVyOmZvcm1hdHRlcjpyb3dEYXRhOmNvbHVtbkRhdGEpXG4gICAgICAgICAgICAgICAgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgPyAodmFsdWUgfCBudW1iZXI6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICAgICAgOiAoY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZScgfHwgY29sdW1uLmRhdGFUeXBlID09PSAndGltZScgfHwgY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnKVxuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgZGF0ZTpjb2x1bW4ucGlwZUFyZ3MuZm9ybWF0OmNvbHVtbi5waXBlQXJncy50aW1lem9uZTpncmlkLmxvY2FsZSlcbiAgICAgICAgICAgICAgICA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgY3VycmVuY3k6Y3VycmVuY3lDb2RlOmNvbHVtbi5waXBlQXJncy5kaXNwbGF5OmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgIDogY29sdW1uLmRhdGFUeXBlID09PSAncGVyY2VudCdcbiAgICAgICAgICAgICAgICA/ICh2YWx1ZSB8IHBlcmNlbnQ6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBcIlxuICAgICAgICBbcm93XT1cInJvd0RhdGFcIlxuICAgICAgICBbY29sdW1uXT1cInRoaXMuY29sdW1uLmZpZWxkXCJcbiAgICAgICAgW2NvbnRhaW5lckNsYXNzXT1cIidpZ3gtZ3JpZF9fdGQtdGV4dCdcIlxuICAgICAgICBbbWV0YWRhdGFdPVwic2VhcmNoTWV0YWRhdGFcIlxuICAgID57e1xuICAgICAgICAgICAgZm9ybWF0dGVyXG4gICAgICAgICAgICAgICAgPyAodmFsdWUgfCBjb2x1bW5Gb3JtYXR0ZXI6Zm9ybWF0dGVyOnJvd0RhdGE6Y29sdW1uRGF0YSlcbiAgICAgICAgICAgICAgICA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgbnVtYmVyOmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgIDogKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGUnIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3RpbWUnIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGVUaW1lJylcbiAgICAgICAgICAgICAgICA/ICh2YWx1ZSB8IGRhdGU6Y29sdW1uLnBpcGVBcmdzLmZvcm1hdDpjb2x1bW4ucGlwZUFyZ3MudGltZXpvbmU6Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICAgICAgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdjdXJyZW5jeSdcbiAgICAgICAgICAgICAgICA/ICh2YWx1ZSB8IGN1cnJlbmN5OmN1cnJlbmN5Q29kZTpjb2x1bW4ucGlwZUFyZ3MuZGlzcGxheTpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSlcbiAgICAgICAgICAgICAgICA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnXG4gICAgICAgICAgICAgICAgPyAodmFsdWUgfCBwZXJjZW50OmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgfX08L2Rpdj5cbiAgICA8aWd4LWljb25cbiAgICAgICAgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdib29sZWFuJyAmJiAhdGhpcy5mb3JtYXR0ZXJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdpZ3gtaWNvbi0tc3VjY2Vzcyc6IHZhbHVlLCAnaWd4LWljb24tLWVycm9yJzogIXZhbHVlIH1cIlxuICAgICAgICA+e3sgdmFsdWUgPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX08L2lneC1pY29uPlxuICAgIDxpbWcgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdpbWFnZSdcIiBbc3JjXT1cInZhbHVlXCIgW2FsdF09XCJ2YWx1ZSB8IGlneENlbGxJbWFnZUFsdFwiIC8+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNhZGRSb3dDZWxsIGxldC1jZWxsPVwiY2VsbFwiPlxuICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgIT09ICdib29sZWFuJyB8fCAoY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbicgJiYgdGhpcy5mb3JtYXR0ZXIpXCJcbiAgICAgICAgaWd4VGV4dEhpZ2hsaWdodCBjbGFzcz1cImlneC1ncmlkX190ZC10ZXh0XCJcbiAgICBbY3NzQ2xhc3NdPVwiaGlnaGxpZ2h0Q2xhc3NcIlxuICAgIFthY3RpdmVDc3NDbGFzc109XCJhY3RpdmVIaWdobGlnaHRDbGFzc1wiXG4gICAgW2dyb3VwTmFtZV09XCJncmlkSURcIlxuICAgIFt2YWx1ZV09XCJmb3JtYXR0ZXIgPyAodmFsdWUgfCBjb2x1bW5Gb3JtYXR0ZXI6Zm9ybWF0dGVyOnJvd0RhdGEpIDogY29sdW1uLmRhdGFUeXBlID09PSAnbnVtYmVyJyA/XG4gICAgICAgICh2YWx1ZSB8IG51bWJlcjpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSkgOiAoY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZScgfHwgY29sdW1uLmRhdGFUeXBlID09PSAndGltZScgfHwgY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnKSA/XG4gICAgICAgICh2YWx1ZSB8IGRhdGU6Y29sdW1uLnBpcGVBcmdzLmZvcm1hdDpjb2x1bW4ucGlwZUFyZ3MudGltZXpvbmU6Z3JpZC5sb2NhbGUpIDogY29sdW1uLmRhdGFUeXBlID09PSAnY3VycmVuY3knID9cbiAgICAgICAgKHZhbHVlIHwgY3VycmVuY3k6Y3VycmVuY3lDb2RlOmNvbHVtbi5waXBlQXJncy5kaXNwbGF5OmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKSA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnID9cbiAgICAgICAgKHZhbHVlIHwgcGVyY2VudDpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSkgOiB2YWx1ZVwiXG4gICAgW3Jvd109XCJyb3dEYXRhXCJcbiAgICBbY29sdW1uXT1cInRoaXMuY29sdW1uLmZpZWxkXCJcbiAgICBbY29udGFpbmVyQ2xhc3NdPVwiJ2lneC1ncmlkX190ZC10ZXh0J1wiXG4gICAgW21ldGFkYXRhXT1cInNlYXJjaE1ldGFkYXRhXCI+e3tcbiAgICAgICAgIWlzRW1wdHlBZGRSb3dDZWxsID8gdmFsdWUgOiAoY29sdW1uLmhlYWRlciB8fCBjb2x1bW4uZmllbGQpXG4gICAgfX08L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2lubGluZUVkaXRvciBsZXQtY2VsbD1cImNlbGxcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnc3RyaW5nJyB8fCBjb2x1bW4uZGF0YVR5cGUgPT09ICdpbWFnZSdcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgICAgICA8aWd4LWlucHV0LWdyb3VwIGRpc3BsYXlEZW5zaXR5PVwiY29tcGFjdFwiID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVCeVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImlzSW52YWxpZFwiXG4gICAgICAgICAgICAgICAgW2lneEZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtpZ3hUZXh0U2VsZWN0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgKGNvbXBvc2l0aW9uc3RhcnQpPVwiZ3JpZC5jcnVkU2VydmljZS5pc0luQ29tcG9zaXRpb25Nb2RlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgKGNvbXBvc2l0aW9uZW5kKT1cImdyaWQuY3J1ZFNlcnZpY2UuaXNJbkNvbXBvc2l0aW9uTW9kZSA9IGZhbHNlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdudW1iZXInXCI+XG4gICAgICAgIDxpZ3gtaW5wdXQtZ3JvdXAgZGlzcGxheURlbnNpdHk9XCJjb21wYWN0XCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVCeVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImlzSW52YWxpZFwiXG4gICAgICAgICAgICAgICAgW2lneEZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtpZ3hUZXh0U2VsZWN0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzdGVwXT1cInN0ZXBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2lneC1pbnB1dC1ncm91cD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbidcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgICAgICA8aWd4LWNoZWNrYm94XG4gICAgICAgICAgICBbY2hlY2tlZF09XCJlZGl0VmFsdWVcIlxuICAgICAgICAgICAgW2lneEZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICA+PC9pZ3gtY2hlY2tib3g+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGUnXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgICAgICAgPGlneC1kYXRlLXBpY2tlclxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiMTAwXCJcbiAgICAgICAgICAgIFtvdXRsZXRdPVwiZ3JpZC5vdXRsZXRcIlxuICAgICAgICAgICAgbW9kZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgIFtsb2NhbGVdPVwiZ3JpZC5sb2NhbGVcIlxuICAgICAgICAgICAgW3dlZWtTdGFydF09XCJjb2x1bW4ucGlwZUFyZ3Mud2Vla1N0YXJ0XCJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImVkaXRWYWx1ZVwiXG4gICAgICAgICAgICBbaWd4Rm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICA+XG4gICAgICAgIDwvaWd4LWRhdGUtcGlja2VyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICd0aW1lJ1wiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gICAgICAgIDxpZ3gtdGltZS1waWNrZXJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cIjEwMFwiXG4gICAgICAgICAgICBbb3V0bGV0XT1cImdyaWQub3V0bGV0XCJcbiAgICAgICAgICAgIG1vZGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICBbbG9jYWxlXT1cImdyaWQubG9jYWxlXCJcbiAgICAgICAgICAgIFtpbnB1dEZvcm1hdF09XCJjb2x1bW4uZGVmYXVsdFRpbWVGb3JtYXRcIlxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiZWRpdFZhbHVlXCJcbiAgICAgICAgICAgIFtpZ3hGb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgID48L2lneC10aW1lLXBpY2tlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnXCI+XG4gICAgICAgIDxpZ3gtaW5wdXQtZ3JvdXAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImFyaWFEZXNjcmliZUJ5XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaXNJbnZhbGlkXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICAgICAgW2lneERhdGVUaW1lRWRpdG9yXT1cImNvbHVtbi5kZWZhdWx0RGF0ZVRpbWVGb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtpZ3hGb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdjdXJyZW5jeSdcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cCBkaXNwbGF5RGVuc2l0eT1cImNvbXBhY3RcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgICAgICAgICAgPGlneC1wcmVmaXggKm5nSWY9XCJncmlkLmN1cnJlbmN5UG9zaXRpb25MZWZ0XCI+e3sgY3VycmVuY3lDb2RlU3ltYm9sIH19PC9pZ3gtcHJlZml4PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWd4SW5wdXRcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImFyaWFEZXNjcmliZUJ5XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaXNJbnZhbGlkXCJcbiAgICAgICAgICAgICAgICBbaWd4Rm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2lneFRleHRTZWxlY3Rpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3N0ZXBdPVwic3RlcFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cIiFncmlkLmN1cnJlbmN5UG9zaXRpb25MZWZ0XCI+e3sgY3VycmVuY3lDb2RlU3ltYm9sIH19PC9pZ3gtc3VmZml4PlxuICAgICAgICA8L2lneC1pbnB1dC1ncm91cD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAncGVyY2VudCdcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cCBkaXNwbGF5RGVuc2l0eT1cImNvbXBhY3RcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWd4SW5wdXRcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImFyaWFEZXNjcmliZUJ5XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaXNJbnZhbGlkXCJcbiAgICAgICAgICAgICAgICBbaWd4Rm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2lneFRleHRTZWxlY3Rpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3N0ZXBdPVwic3RlcFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8aWd4LXN1ZmZpeD4ge3sgZWRpdFZhbHVlIHwgcGVyY2VudDpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSB9fSA8L2lneC1zdWZmaXg+XG4gICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwaW5uZWRJbmRpY2F0b3JUZW1wbGF0ZTsgY29udGV4dDogY29udGV4dFwiPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGU7IGNvbnRleHQ6IGNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzSW52YWxpZFwiPlxuICAgIDxpZ3gtaWNvbiAjZXJyb3JJY29uIFtpZ3hUb29sdGlwVGFyZ2V0XT1cInRvb2x0aXBSZWZcIiAgW2lneFRvZ2dsZU91dGxldF09XCJncmlkLm91dGxldFwiXG4gICAgKG1vdXNlb3Zlcik9J2Vycm9yU2hvd2luZyA9IHRydWUnIChtb3VzZW91dCk9J2Vycm9yU2hvd2luZyA9IGZhbHNlJz5lcnJvcjwvaWd4LWljb24+XG4gICAgPGRpdiBbaWRdPVwiYXJpYUVycm9yTWVzc2FnZVwiXG4gICAgaWd4VG9vbHRpcCAjZXJyb3IgI3Rvb2x0aXBSZWY9XCJ0b29sdGlwXCI+XG4gICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cIidtYXgtY29udGVudCdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsVmFsaWRhdGlvbkVycm9yVGVtcGxhdGUgfHwgZGVmYXVsdEVycm9yOyBjb250ZXh0OiBjb250ZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVycm9yPlxuICAgIDxkaXYgKm5nSWY9XCJmb3JtR3JvdXA/LmdldChjb2x1bW4/LmZpZWxkKS5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPlxuICAgICAgICB7e2dyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3JlcXVpcmVkX3ZhbGlkYXRpb25fZXJyb3J9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJmb3JtR3JvdXA/LmdldChjb2x1bW4/LmZpZWxkKS5lcnJvcnM/LlsnbWlubGVuZ3RoJ11cIj5cbiAgICAgICAge3tncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9taW5fbGVuZ3RoX3ZhbGlkYXRpb25fZXJyb3IgfCBpZ3hTdHJpbmdSZXBsYWNlOid7MH0nOmZvcm1Hcm91cC5nZXQoY29sdW1uLmZpZWxkKS5lcnJvcnMubWlubGVuZ3RoLnJlcXVpcmVkTGVuZ3RoIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImZvcm1Hcm91cD8uZ2V0KGNvbHVtbj8uZmllbGQpLmVycm9ycz8uWydtYXhsZW5ndGgnXVwiPlxuICAgICAgICB7e2dyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX21heF9sZW5ndGhfdmFsaWRhdGlvbl9lcnJvciB8IGlneFN0cmluZ1JlcGxhY2U6J3swfSc6Zm9ybUdyb3VwLmdldChjb2x1bW4uZmllbGQpLmVycm9ycy5tYXhsZW5ndGgucmVxdWlyZWRMZW5ndGggfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZm9ybUdyb3VwPy5nZXQoY29sdW1uPy5maWVsZCkuZXJyb3JzPy5bJ21pbiddXCI+XG4gICAgICAgIHt7Z3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfbWluX3ZhbGlkYXRpb25fZXJyb3IgfCBpZ3hTdHJpbmdSZXBsYWNlOid7MH0nOmZvcm1Hcm91cC5nZXQoY29sdW1uLmZpZWxkKS5lcnJvcnMubWluLm1pbiB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJmb3JtR3JvdXA/LmdldChjb2x1bW4/LmZpZWxkKS5lcnJvcnM/LlsnbWF4J11cIj5cbiAgICAgICAge3tncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9tYXhfdmFsaWRhdGlvbl9lcnJvciB8IGlneFN0cmluZ1JlcGxhY2U6J3swfSc6Zm9ybUdyb3VwLmdldChjb2x1bW4uZmllbGQpLmVycm9ycy5tYXgubWF4IH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImZvcm1Hcm91cD8uZ2V0KGNvbHVtbj8uZmllbGQpLmVycm9ycz8uWydlbWFpbCddXCI+XG4gICAgICAgIHt7Z3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZW1haWxfdmFsaWRhdGlvbl9lcnJvciB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJmb3JtR3JvdXA/LmdldChjb2x1bW4/LmZpZWxkKS5lcnJvcnM/LlsncGF0dGVybiddXCI+XG4gICAgICAgIHt7Z3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfcGF0dGVybl92YWxpZGF0aW9uX2Vycm9yfX1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
1105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY2VsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY2VsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQU1ULE1BQU0sRUFDTixZQUFZLEVBR1osZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3SyxPQUFPLEVBQTBCLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0UsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBMEQsYUFBYSxFQUFXLE1BQU0seUJBQXlCLENBQUM7QUFD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LENBQUMsUUFBUSxDQUFDO2dCQWExQixhQUFhO3NCQURuQixZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBOZ1pvbmUsXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBJbmplY3QsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3JtYXRQZXJjZW50LCBOZ0lmLCBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0LCBEZWNpbWFsUGlwZSwgUGVyY2VudFBpcGUsIEN1cnJlbmN5UGlwZSwgRGF0ZVBpcGUsIGdldExvY2FsZUN1cnJlbmN5Q29kZSwgZ2V0Q3VycmVuY3lTeW1ib2wgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgZmlyc3QsIHRha2VVbnRpbCwgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJZ3hUZXh0SGlnaGxpZ2h0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90ZXh0LWhpZ2hsaWdodC90ZXh0LWhpZ2hsaWdodC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgZm9ybWF0Q3VycmVuY3ksIGZvcm1hdERhdGUsIFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBIYW1tZXJHZXN0dXJlc01hbmFnZXIgfSBmcm9tICcuLi9jb3JlL3RvdWNoJztcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi9jb21tb24vZW51bXMnO1xuaW1wb3J0IHsgQ2VsbFR5cGUsIENvbHVtblR5cGUsIEdyaWRUeXBlLCBJZ3hDZWxsVGVtcGxhdGVDb250ZXh0LCBJR1hfR1JJRF9CQVNFLCBSb3dUeXBlIH0gZnJvbSAnLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRhdGFUeXBlIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBJZ3hSb3dEaXJlY3RpdmUgfSBmcm9tICcuL3Jvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSVNlYXJjaEluZm8gfSBmcm9tICcuL2NvbW1vbi9ldmVudHMnO1xuaW1wb3J0IHsgSWd4R3JpZENlbGwgfSBmcm9tICcuL2dyaWQtcHVibGljLWNlbGwnO1xuaW1wb3J0IHsgSVNlbGVjdGlvbk5vZGUgfSBmcm9tICcuL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBBdXRvUG9zaXRpb25TdHJhdGVneSwgSG9yaXpvbnRhbEFsaWdubWVudCwgSWd4T3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRDZWxsSW1hZ2VBbHRQaXBlLCBJZ3hTdHJpbmdSZXBsYWNlUGlwZSwgSWd4Q29sdW1uRm9ybWF0dGVyUGlwZSB9IGZyb20gJy4vY29tbW9uL3BpcGVzJztcbmltcG9ydCB7IElneFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3Rvb2x0aXAvdG9vbHRpcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4VG9vbHRpcFRhcmdldERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdG9vbHRpcC90b29sdGlwLXRhcmdldC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4U3VmZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9zdWZmaXgvc3VmZml4LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hQcmVmaXhEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3ByZWZpeC9wcmVmaXguZGlyZWN0aXZlJztcbmltcG9ydCB7IElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kYXRlLXRpbWUtZWRpdG9yL2RhdGUtdGltZS1lZGl0b3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFRpbWVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi90aW1lLXBpY2tlci90aW1lLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4RGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hUZXh0U2VsZWN0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90ZXh0LXNlbGVjdGlvbi90ZXh0LXNlbGVjdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4Rm9jdXNEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2ZvY3VzL2ZvY3VzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvaW5wdXQvaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneElucHV0R3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9pbnB1dC1ncm91cC9pbnB1dC1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q2hpcENvbXBvbmVudCB9IGZyb20gJy4uL2NoaXBzL2NoaXAuY29tcG9uZW50JztcblxuLyoqXG4gKiBQcm92aWRpbmcgcmVmZXJlbmNlIHRvIGBJZ3hHcmlkQ2VsbENvbXBvbmVudGA6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAVmlld0NoaWxkKCdncmlkJywgeyByZWFkOiBJZ3hHcmlkQ29tcG9uZW50IH0pXG4gKiAgcHVibGljIGdyaWQ6IElneEdyaWRDb21wb25lbnQ7XG4gKiBgYGBcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICBsZXQgY29sdW1uID0gdGhpcy5ncmlkLmNvbHVtbkxpc3QuZmlyc3Q7XG4gKiBgYGBcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICBsZXQgY2VsbCA9IGNvbHVtbi5jZWxsc1swXTtcbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzZWxlY3RvcjogJ2lneC1ncmlkLWNlbGwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jZWxsLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtIYW1tZXJHZXN0dXJlc01hbmFnZXJdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBEZWNpbWFsUGlwZSxcbiAgICAgICAgUGVyY2VudFBpcGUsXG4gICAgICAgIEN1cnJlbmN5UGlwZSxcbiAgICAgICAgRGF0ZVBpcGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIElneENoaXBDb21wb25lbnQsXG4gICAgICAgIElneFRleHRIaWdobGlnaHREaXJlY3RpdmUsXG4gICAgICAgIElneEljb25Db21wb25lbnQsXG4gICAgICAgIElneElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgICAgIElneElucHV0RGlyZWN0aXZlLFxuICAgICAgICBJZ3hGb2N1c0RpcmVjdGl2ZSxcbiAgICAgICAgSWd4VGV4dFNlbGVjdGlvbkRpcmVjdGl2ZSxcbiAgICAgICAgSWd4Q2hlY2tib3hDb21wb25lbnQsXG4gICAgICAgIElneERhdGVQaWNrZXJDb21wb25lbnQsXG4gICAgICAgIElneFRpbWVQaWNrZXJDb21wb25lbnQsXG4gICAgICAgIElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlLFxuICAgICAgICBJZ3hQcmVmaXhEaXJlY3RpdmUsXG4gICAgICAgIElneFN1ZmZpeERpcmVjdGl2ZSxcbiAgICAgICAgSWd4VG9vbHRpcFRhcmdldERpcmVjdGl2ZSxcbiAgICAgICAgSWd4VG9vbHRpcERpcmVjdGl2ZSxcbiAgICAgICAgSWd4R3JpZENlbGxJbWFnZUFsdFBpcGUsXG4gICAgICAgIElneFN0cmluZ1JlcGxhY2VQaXBlLFxuICAgICAgICBJZ3hDb2x1bW5Gb3JtYXR0ZXJQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkQ2VsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIENlbGxUeXBlLCBBZnRlclZpZXdJbml0IHtcbiAgICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3RkLS1uZXcnKVxuICAgIHB1YmxpYyBnZXQgaXNFbXB0eUFkZFJvd0NlbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmludFJvdy5hZGRSb3dVSSAmJiAodGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudmFsdWUgPT09IG51bGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKCdlcnJvcicsIHsgcmVhZDogSWd4VG9vbHRpcERpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyBlcnJvclRvb2x0aXA6IFF1ZXJ5TGlzdDxJZ3hUb29sdGlwRGlyZWN0aXZlPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdlcnJvckljb24nLCB7IHJlYWQ6IElneEljb25Db21wb25lbnQsIHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgZXJyb3JJY29uOiBJZ3hJY29uQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZGVmYXVsdCBlcnJvciB0ZW1wbGF0ZS5cbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRFcnJvcicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBkZWZhdWx0RXJyb3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbHVtbiBvZiB0aGUgY2VsbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGxldCBjZWxsQ29sdW1uID0gdGhpcy5jZWxsLmNvbHVtbjtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbjogQ29sdW1uVHlwZTtcblxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXQgZm9ybUdyb3VwKCk6IEZvcm1Hcm91cCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQudmFsaWRhdGlvbi5nZXRGb3JtR3JvdXAodGhpcy5pbnRSb3cua2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaW50Um93OiBJZ3hSb3dEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSByb3cgb2YgdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsUm93ID0gdGhpcy5jZWxsLnJvdztcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCByb3coKTogUm93VHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuY3JlYXRlUm93KHRoaXMuaW50Um93LmluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBkYXRhIG9mIHRoZSByb3cgb2YgdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCByb3dEYXRhID0gdGhpcy5jZWxsLnJvd0RhdGE7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByb3dEYXRhOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29sdW1uRGF0YTogYW55O1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSB0ZW1wbGF0ZSBvZiB0aGUgY2VsbC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPG5nLXRlbXBsYXRlICNjZWxsVGVtcGxhdGUgaWd4Q2VsbCBsZXQtdmFsdWU+XG4gICAgICogICA8ZGl2IHN0eWxlPVwiZm9udC1zdHlsZTogb2JsaXF1ZTsgY29sb3I6Ymx1ZXZpb2xldDsgYmFja2dyb3VuZDpyZWRcIj5cbiAgICAgKiAgICAgICA8c3Bhbj57e3ZhbHVlfX08L3NwYW4+XG4gICAgICogICA8L2Rpdj5cbiAgICAgKiA8L25nLXRlbXBsYXRlPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCdjZWxsVGVtcGxhdGUnLHtyZWFkOiBUZW1wbGF0ZVJlZn0pXG4gICAgICogY2VsbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNlbGwuY2VsbFRlbXBsYXRlID0gdGhpcy5jZWxsVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCB0ZW1wbGF0ZSA9ICB0aGlzLmNlbGwuY2VsbFRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY2VsbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY2VsbFZhbGlkYXRpb25FcnJvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcGlubmVkSW5kaWNhdG9yOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBjZWxsIHZhbHVlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNlbGwudmFsdWUgPSBcIkNlbGwgVmFsdWVcIjtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNlbGxWYWx1ZSA9IHRoaXMuY2VsbC52YWx1ZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHZhbHVlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjZWxsIGZvcm1hdHRlci5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNlbGxGb3JhbWF0dGVyID0gdGhpcy5jZWxsLmZvcm1hdHRlcjtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZvcm1hdHRlcjogKHZhbHVlOiBhbnksIHJvd0RhdGE/OiBhbnksIGNvbHVtbkRhdGE/OiBhbnkpID0+IGFueTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNlbGwgdGVtcGxhdGUgY29udGV4dCBvYmplY3QuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBsZXQgY29udGV4dCA9IHRoaXMuY2VsbC5jb250ZXh0KCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbnRleHQoKTogSWd4Q2VsbFRlbXBsYXRlQ29udGV4dCB7XG4gICAgICAgIGNvbnN0IGdldENlbGxUeXBlID0gKCkgPT4gdGhpcy5nZXRDZWxsVHlwZSh0cnVlKTtcbiAgICAgICAgY29uc3QgY3R4OiBJZ3hDZWxsVGVtcGxhdGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgYWRkaXRpb25hbFRlbXBsYXRlQ29udGV4dDogdGhpcy5jb2x1bW4uYWRkaXRpb25hbFRlbXBsYXRlQ29udGV4dCxcbiAgICAgICAgICAgIGdldCBjZWxsKCkge1xuICAgICAgICAgICAgICAgIC8qIFR1cm5zIHRoZSBgY2VsbGAgcHJvcGVydHkgZnJvbSB0aGUgdGVtcGxhdGUgY29udGV4dCBvYmplY3QgaW50byBsYXp5LWV2YWx1YXRlZCBvbmUuXG4gICAgICAgICAgICAgICAgICogT3RoZXJ3aXNlIG9uIGVhY2ggZGV0ZWN0aW9uIGN5Y2xlIHRoZSBjZWxsIHRlbXBsYXRlIGlzIHJlY3JlYXRpbmcgTiBjZWxsIGluc3RhbmNlcyB3aGVyZVxuICAgICAgICAgICAgICAgICAqIE4gPSBudW1iZXIgb2YgdmlzaWJsZSBjZWxscyBpbiB0aGUgZ3JpZCwgbGVhZGluZyB0byBtYXNzaXZlIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGluIGxhcmdlIGdyaWRzLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRDZWxsVHlwZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5lZGl0TW9kZSkge1xuICAgICAgICAgICAgY3R4LmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udHJvbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0ludmFsaWQpIHtcbiAgICAgICAgICAgIGN0eC5kZWZhdWx0RXJyb3JUZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdEVycm9yVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjZWxsIHRlbXBsYXRlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdGVtcGxhdGUgPSB0aGlzLmNlbGwudGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5lZGl0TW9kZSAmJiB0aGlzLmZvcm1Hcm91cCkge1xuICAgICAgICAgICAgY29uc3QgaW5saW5lRWRpdG9yVGVtcGxhdGUgPSB0aGlzLmNvbHVtbi5pbmxpbmVFZGl0b3JUZW1wbGF0ZTtcbiAgICAgICAgICAgIHJldHVybiBpbmxpbmVFZGl0b3JUZW1wbGF0ZSA/IGlubGluZUVkaXRvclRlbXBsYXRlIDogdGhpcy5pbmxpbmVFZGl0b3JUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNlbGxUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd0VkaXRhYmxlICYmIHRoaXMuaW50Um93LmFkZFJvd1VJKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGRSb3dDZWxsVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdENlbGxUZW1wbGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwaW5uZWQgaW5kaWNhdG9yIHRlbXBsYXRlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdGVtcGxhdGUgPSB0aGlzLmNlbGwucGlubmVkSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBpbm5lZEluZGljYXRvclRlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5waW5uZWRJbmRpY2F0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBpbm5lZEluZGljYXRvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UGlubmVkSW5kaWNhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGBpZGAgb2YgdGhlIGdyaWQgaW4gd2hpY2ggdGhlIGNlbGwgaXMgc3RvcmVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZ3JpZElkID0gdGhpcy5jZWxsLmdyaWRJRDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZ3JpZElEKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmludFJvdy5ncmlkSUQ7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgaW5kZXhgIG9mIHRoZSByb3cgd2hlcmUgdGhlIGNlbGwgaXMgc3RvcmVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgcm93SW5kZXggPSB0aGlzLmNlbGwucm93SW5kZXg7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1yb3dJbmRleCcpXG4gICAgcHVibGljIGdldCByb3dJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRSb3cuaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYGluZGV4YCBvZiB0aGUgY2VsbCBjb2x1bW4uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5JbmRleCA9IHRoaXMuY2VsbC5jb2x1bW5JbmRleDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29sdW1uSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbHVtbiB2aXNpYmxlIGluZGV4LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdmlzaWJsZUNvbHVtbkluZGV4ID0gdGhpcy5jZWxsLnZpc2libGVDb2x1bW5JbmRleDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXZpc2libGVJbmRleCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZpc2libGVDb2x1bW5JbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmNvbHVtbkxheW91dENoaWxkID8gdGhpcy5jb2x1bW4udmlzaWJsZUluZGV4IDogdGhpcy5fdkluZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdmlzaWJsZUNvbHVtbkluZGV4KHZhbCkge1xuICAgICAgICB0aGlzLl92SW5kZXggPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgSUQgb2YgdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsSUQgPSB0aGlzLmNlbGwuY2VsbElEO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBjZWxsSUQoKSB7XG4gICAgICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLmdyaWQucHJpbWFyeUtleTtcbiAgICAgICAgY29uc3Qgcm93SUQgPSBwcmltYXJ5S2V5ID8gdGhpcy5yb3dEYXRhW3ByaW1hcnlLZXldIDogdGhpcy5yb3dEYXRhO1xuICAgICAgICByZXR1cm4geyByb3dJRCwgY29sdW1uSUQ6IHRoaXMuY29sdW1uSW5kZXgsIHJvd0luZGV4OiB0aGlzLnJvd0luZGV4IH07XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBwdWJsaWMgZ2V0IGF0dHJDZWxsSUQoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmludFJvdy5ncmlkSUR9XyR7dGhpcy5yb3dJbmRleH1fJHt0aGlzLnZpc2libGVDb2x1bW5JbmRleH1gO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnYXR0ci50aXRsZScpXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdE1vZGUgfHwgdGhpcy5jZWxsVGVtcGxhdGUgfHwgdGhpcy5lcnJvclNob3dpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0dGVyKHRoaXMudmFsdWUsIHRoaXMucm93RGF0YSwgdGhpcy5jb2x1bW5EYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmNvbHVtbi5waXBlQXJncztcbiAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5ncmlkLmxvY2FsZTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMuY29sdW1uLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5QZXJjZW50OlxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXRQZXJjZW50KHRoaXMudmFsdWUsIGxvY2FsZSwgYXJncy5kaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkN1cnJlbmN5OlxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXRDdXJyZW5jeSh0aGlzLnZhbHVlLCB0aGlzLmN1cnJlbmN5Q29kZSwgYXJncy5kaXNwbGF5LCBhcmdzLmRpZ2l0c0luZm8sIGxvY2FsZSk7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlOlxuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWU6XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXREYXRlKHRoaXMudmFsdWUsIGFyZ3MuZm9ybWF0LCBsb2NhbGUsIGFyZ3MudGltZXpvbmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3RkLS1ib29sLXRydWUnKVxuICAgIHB1YmxpYyBnZXQgYm9vbGVhbkNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09ICdib29sZWFuJyAmJiB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIG5hdGl2ZUVsZW1lbnQgb2YgdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsTmF0aXZlRWxlbWVudCA9IHRoaXMuY2VsbC5uYXRpdmVFbGVtZW50O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgY2VsbFNlbGVjdGlvbk1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jZWxsU2VsZWN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgY2VsbFNlbGVjdGlvbk1vZGUodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NlbGxTZWxlY3Rpb24gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFBvaW50ZXJMaXN0ZW5lcnModmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVBvaW50ZXJMaXN0ZW5lcnModGhpcy5fY2VsbFNlbGVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9jZWxsU2VsZWN0aW9uID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBsYXN0U2VhcmNoSW5mbyh2YWx1ZTogSVNlYXJjaEluZm8pIHtcbiAgICAgICAgdGhpcy5fbGFzdFNlYXJjaEluZm8gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRUZXh0KHRoaXMuX2xhc3RTZWFyY2hJbmZvLnNlYXJjaFRleHQsIHRoaXMuX2xhc3RTZWFyY2hJbmZvLmNhc2VTZW5zaXRpdmUsIHRoaXMuX2xhc3RTZWFyY2hJbmZvLmV4YWN0TWF0Y2gpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3RkLS1waW5uZWQtbGFzdCcpXG4gICAgcHVibGljIGxhc3RQaW5uZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3RkLS1waW5uZWQtZmlyc3QnKVxuICAgIHB1YmxpYyBmaXJzdFBpbm5lZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBjZWxsIGlzIGluIGVkaXQgbW9kZS5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tZWRpdGluZycpXG4gICAgcHVibGljIGVkaXRNb2RlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldCB0aGUgYHJvbGVgIHByb3BlcnR5IG9mIHRoZSBjZWxsLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYFwiZ3JpZGNlbGxcImAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2VsbC5yb2xlID0gJ2dyaWQtY2VsbCc7XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsUm9sZSA9IHRoaXMuY2VsbC5yb2xlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ2dyaWRjZWxsJztcblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgY2VsbCBpcyBlZGl0YWJsZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzQ2VsbFJlYWRvbmx5ID0gdGhpcy5jZWxsLnJlYWRvbmx5O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcmVhZG9ubHknKVxuICAgIHB1YmxpYyBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5lZGl0YWJsZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kZXNjcmliZWRieScpXG4gICAgcHVibGljIGdldCBhcmlhRGVzY3JpYmVCeSgpIHtcbiAgICAgICAgbGV0IGRlc2NyaWJlQnkgPSAodGhpcy5ncmlkSUQgKyAnXycgKyB0aGlzLmNvbHVtbi5maWVsZCkucmVwbGFjZSgnLicsICdfJyk7XG4gICAgICAgIGlmICh0aGlzLmlzSW52YWxpZCkge1xuICAgICAgICAgICAgZGVzY3JpYmVCeSArPSAnICcgKyB0aGlzLmFyaWFFcnJvck1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBhcmlhRXJyb3JNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlkICsgJ18nICsgdGhpcy5jb2x1bW4uZmllbGQgKyAnXycgKyB0aGlzLmludFJvdy5pbmRleCArICdfZXJyb3InO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0taW52YWxpZCcpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtaW52YWxpZCcpXG4gICAgcHVibGljIGdldCBpc0ludmFsaWQoKSB7XG4gICAgICAgIGNvbnN0IGlzSW52YWxpZCA9IHRoaXMuZm9ybUdyb3VwPy5nZXQodGhpcy5jb2x1bW4/LmZpZWxkKT8uaW52YWxpZCAmJiB0aGlzLmZvcm1Hcm91cD8uZ2V0KHRoaXMuY29sdW1uPy5maWVsZCk/LnRvdWNoZWQ7XG4gICAgICAgIHJldHVybiAhdGhpcy5pbnRSb3cuZGVsZXRlZCAmJiBpc0ludmFsaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3RkLS12YWxpZCcpXG4gICAgcHVibGljIGdldCBpc1ZhbGlkQWZ0ZXJFZGl0KCkge1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwPy5nZXQodGhpcy5jb2x1bW4/LmZpZWxkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdE1vZGUgJiYgZm9ybUNvbnRyb2wgJiYgIWZvcm1Db250cm9sLmludmFsaWQgJiYgZm9ybUNvbnRyb2wuZGlydHk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZm9ybUNvbnRyb2wgcmVzcG9uc2libGUgZm9yIHZhbHVlIGNoYW5nZXMgYW5kIHZhbGlkYXRpb24gZm9yIHRoaXMgY2VsbC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IGZvcm1Db250cm9sKCk6IEZvcm1Db250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC52YWxpZGF0aW9uLmdldEZvcm1Db250cm9sKHRoaXMuaW50Um93LmtleSwgdGhpcy5jb2x1bW4uZmllbGQpIGFzIEZvcm1Db250cm9sO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ3JpZFJvd1NwYW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmdyaWRSb3dTcGFuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ3JpZENvbHVtblNwYW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmdyaWRDb2x1bW5TcGFuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93RW5kKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5yb3dFbmQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2xFbmQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmNvbEVuZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd1N0YXJ0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5yb3dTdGFydDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbFN0YXJ0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5jb2xTdGFydDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB3aWR0aCBvZiB0aGUgY2VsbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNlbGxXaWR0aCA9IHRoaXMuY2VsbC53aWR0aDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHdpZHRoID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tYWN0aXZlJylcbiAgICBwdWJsaWMgYWN0aXZlID0gZmFsc2U7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1zZWxlY3RlZCcpXG4gICAgcHVibGljIGdldCBhcmlhU2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkIHx8IHRoaXMuY29sdW1uLnNlbGVjdGVkIHx8IHRoaXMuaW50Um93LnNlbGVjdGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgY2VsbCBpcyBzZWxlY3RlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzU2VsZWN0ZWQgPSB0aGlzLmNlbGwuc2VsZWN0ZWQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tc2VsZWN0ZWQnKVxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0ZWQodGhpcy5zZWxlY3Rpb25Ob2RlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RzL2Rlc2VsZWN0cyB0aGUgY2VsbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jZWxsLnNlbGVjdGVkID0gdHJ1ZS5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWQodmFsOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnNlbGVjdGlvbk5vZGU7XG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5hZGQobm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UucmVtb3ZlKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBjZWxsIGNvbHVtbiBpcyBzZWxlY3RlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzQ2VsbENvbHVtblNlbGVjdGVkID0gdGhpcy5jZWxsLmNvbHVtblNlbGVjdGVkO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZF9fdGQtLWNvbHVtbi1zZWxlY3RlZCcpXG4gICAgcHVibGljIGdldCBjb2x1bW5TZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc0NvbHVtblNlbGVjdGVkKHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGVkaXQgdmFsdWUgd2hpbGUgYSBjZWxsIGlzIGluIGVkaXQgbW9kZS5cbiAgICAgKiBPbmx5IGZvciBjZWxsIGVkaXRpbmcgbW9kZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jZWxsLmVkaXRWYWx1ZSA9IHZhbHVlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNldCBlZGl0VmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsSW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmNlbGwuZWRpdFZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGVkaXQgdmFsdWUgd2hpbGUgYSBjZWxsIGlzIGluIGVkaXQgbW9kZS5cbiAgICAgKiBPbmx5IGZvciBjZWxsIGVkaXRpbmcgbW9kZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGVkaXRWYWx1ZSA9IHRoaXMuY2VsbC5lZGl0VmFsdWU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGVkaXRWYWx1ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsSW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsLmVkaXRWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgY2VsbCBpcyBlZGl0YWJsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZWRpdGFibGUgJiYgIXRoaXMuaW50Um93LmRpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3RkLS1yb3ctcGlubmVkLWZpcnN0JylcbiAgICBwdWJsaWMgZGlzcGxheVBpbm5lZENoaXAgPSBmYWxzZTtcblxuXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdENlbGwnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdENlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRQaW5uZWRJbmRpY2F0b3InLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdFBpbm5lZEluZGljYXRvcjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2lubGluZUVkaXRvcicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBpbmxpbmVFZGl0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2FkZFJvd0NlbGwnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgYWRkUm93Q2VsbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZChJZ3hUZXh0SGlnaGxpZ2h0RGlyZWN0aXZlLCB7IHJlYWQ6IElneFRleHRIaWdobGlnaHREaXJlY3RpdmUgfSlcbiAgICBwcm90ZWN0ZWQgc2V0IGhpZ2hsaWdodCh2YWx1ZTogSWd4VGV4dEhpZ2hsaWdodERpcmVjdGl2ZSkge1xuICAgICAgICB0aGlzLl9oaWdobGlnaHQgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5faGlnaGxpZ2h0ICYmIHRoaXMuZ3JpZC5sYXN0U2VhcmNoSW5mby5zZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICB0aGlzLl9oaWdobGlnaHQuaGlnaGxpZ2h0KHRoaXMuZ3JpZC5sYXN0U2VhcmNoSW5mby5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5sYXN0U2VhcmNoSW5mby5jYXNlU2Vuc2l0aXZlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5sYXN0U2VhcmNoSW5mby5leGFjdE1hdGNoKTtcbiAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodC5hY3RpdmF0ZUlmTmVjZXNzYXJ5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGhpZ2hsaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZ2hsaWdodDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IHNlbGVjdGlvbk5vZGUoKTogSVNlbGVjdGlvbk5vZGUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm93OiB0aGlzLnJvd0luZGV4LFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbi5jb2x1bW5MYXlvdXRDaGlsZCA/IHRoaXMuY29sdW1uLnBhcmVudC52aXNpYmxlSW5kZXggOiB0aGlzLnZpc2libGVDb2x1bW5JbmRleCxcbiAgICAgICAgICAgIGxheW91dDogdGhpcy5jb2x1bW4uY29sdW1uTGF5b3V0Q2hpbGQgPyB7XG4gICAgICAgICAgICAgICAgcm93U3RhcnQ6IHRoaXMuY29sdW1uLnJvd1N0YXJ0LFxuICAgICAgICAgICAgICAgIGNvbFN0YXJ0OiB0aGlzLmNvbHVtbi5jb2xTdGFydCxcbiAgICAgICAgICAgICAgICByb3dFbmQ6IHRoaXMuY29sdW1uLnJvd0VuZCxcbiAgICAgICAgICAgICAgICBjb2xFbmQ6IHRoaXMuY29sdW1uLmNvbEVuZCxcbiAgICAgICAgICAgICAgICBjb2x1bW5WaXNpYmxlSW5kZXg6IHRoaXMudmlzaWJsZUNvbHVtbkluZGV4XG4gICAgICAgICAgICB9IDogbnVsbFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgaGlnaGxpZ2h0IGNsYXNzIG9mIHRoZSBjZWxsLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYFwiaWd4LWhpZ2hsaWdodFwiYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGhpZ2hsaWdodENsYXNzID0gdGhpcy5jZWxsLmhpZ2hsaWdodENsYXNzO1xuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNlbGwuaGlnaGxpZ2h0Q2xhc3MgPSAnaWd4LWNlbGwtaGlnaGxpZ2h0JztcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBoaWdobGlnaHRDbGFzcyA9ICdpZ3gtaGlnaGxpZ2h0JztcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYWN0aXZlIGhpZ2hsaWdodCBjbGFzcyBjbGFzcyBvZiB0aGUgY2VsbC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBcImlneC1oaWdobGlnaHRfX2FjdGl2ZVwiYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGFjdGl2ZUhpZ2hsaWdodENsYXNzID0gdGhpcy5jZWxsLmFjdGl2ZUhpZ2hsaWdodENsYXNzO1xuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNlbGwuYWN0aXZlSGlnaGxpZ2h0Q2xhc3MgPSAnaWd4LWNlbGwtaGlnaGxpZ2h0X2FjdGl2ZSc7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgYWN0aXZlSGlnaGxpZ2h0Q2xhc3MgPSAnaWd4LWhpZ2hsaWdodF9fYWN0aXZlJztcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgc3RlcCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gdGhpcy5jb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbztcbiAgICAgICAgaWYgKCFkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGVwID0gK2RpZ2l0c0luZm8uc3Vic3RyKGRpZ2l0c0luZm8uaW5kZXhPZignLicpICsgMSwgMSk7XG4gICAgICAgIHJldHVybiAxIC8gKE1hdGgucG93KDEwLCBzdGVwKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBjdXJyZW5jeUNvZGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLnBpcGVBcmdzLmN1cnJlbmN5Q29kZSA/XG4gICAgICAgICAgICB0aGlzLmNvbHVtbi5waXBlQXJncy5jdXJyZW5jeUNvZGUgOiBnZXRMb2NhbGVDdXJyZW5jeUNvZGUodGhpcy5ncmlkLmxvY2FsZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBjdXJyZW5jeUNvZGVTeW1ib2woKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlbmN5U3ltYm9sKHRoaXMuY3VycmVuY3lDb2RlLCAnd2lkZScsIHRoaXMuZ3JpZC5sb2NhbGUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfbGFzdFNlYXJjaEluZm86IElTZWFyY2hJbmZvO1xuICAgIHByaXZhdGUgX2hpZ2hsaWdodDogSWd4VGV4dEhpZ2hsaWdodERpcmVjdGl2ZTtcbiAgICBwcml2YXRlIF9jZWxsU2VsZWN0aW9uOiBHcmlkU2VsZWN0aW9uTW9kZSA9IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlO1xuICAgIHByaXZhdGUgX3ZJbmRleCA9IC0xO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgQEluamVjdChJR1hfR1JJRF9CQVNFKSBwdWJsaWMgZ3JpZDogR3JpZFR5cGUsXG4gICAgICAgIEBJbmplY3QoSWd4T3ZlcmxheVNlcnZpY2UpIHByb3RlY3RlZCBvdmVybGF5U2VydmljZTogSWd4T3ZlcmxheVNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHRvdWNoTWFuYWdlcjogSGFtbWVyR2VzdHVyZXNNYW5hZ2VyLFxuICAgICAgICBwcm90ZWN0ZWQgcGxhdGZvcm1VdGlsOiBQbGF0Zm9ybVV0aWxcbiAgICApIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2RibGNsaWNrJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25Eb3VibGVDbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2RvdWJsZXRhcCcpIHtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgZG91YmxlLXRhcCB0byB6b29tIG9uIGlPU1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lZGl0YWJsZSAmJiAhdGhpcy5lZGl0TW9kZSAmJiAhdGhpcy5pbnRSb3cuZGVsZXRlZCAmJiAhdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0VkaXRpbmdCbG9ja2VkKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW50ZXJFZGl0TW9kZSh0aGlzLCBldmVudCBhcyBFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQuZG91YmxlQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICBjZWxsOiB0aGlzLmdldENlbGxUeXBlKCksXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25DbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmdyaWQuY2VsbENsaWNrLmVtaXQoe1xuICAgICAgICAgICAgY2VsbDogdGhpcy5nZXRDZWxsVHlwZSgpLFxuICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25Db250ZXh0TWVudShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmdyaWQuY29udGV4dE1lbnUuZW1pdCh7XG4gICAgICAgICAgICBjZWxsOiB0aGlzLmdldENlbGxUeXBlKCksXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5wb2ludGVyZG93bik7XG4gICAgICAgICAgICB0aGlzLmFkZFBvaW50ZXJMaXN0ZW5lcnModGhpcy5jZWxsU2VsZWN0aW9uTW9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybVV0aWwuaXNJT1MpIHtcbiAgICAgICAgICAgIHRoaXMudG91Y2hNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5uYXRpdmVFbGVtZW50LCAnZG91YmxldGFwJywgdGhpcy5vbkRvdWJsZUNsaWNrLCB7XG4gICAgICAgICAgICAgICAgY3NzUHJvcHM6IHt9IC8qIGRvbid0IGRpc2FibGUgdXNlci1zZWxlY3QsIGV0YyAqL1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuZXJyb3JUb29sdGlwLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXJyb3JUb29sdGlwLmxlbmd0aCA+IDAgJiYgdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAvLyBlcnJvciBvY3VycmVkXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbkVycm9yVG9vbHRpcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGVycm9yU2hvd2luZyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBvcGVuRXJyb3JUb29sdGlwKCkge1xuICAgICAgICBjb25zdCB0b29sdGlwID0gdGhpcy5lcnJvclRvb2x0aXAuZmlyc3Q7XG4gICAgICAgIHRvb2x0aXAub3BlbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMuZXJyb3JJY29uLmVsLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgICAgICAgICBleGNsdWRlRnJvbU91dHNpZGVDbGljazogW3RoaXMubmF0aXZlRWxlbWVudF0sXG4gICAgICAgICAgICAgICAgY2xvc2VPbkVzY2FwZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgb3V0bGV0OiB0aGlzLmdyaWQub3V0bGV0LFxuICAgICAgICAgICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koe1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5wb2ludGVyZG93bik7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVBvaW50ZXJMaXN0ZW5lcnModGhpcy5jZWxsU2VsZWN0aW9uTW9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRvdWNoTWFuYWdlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuZWRpdE1vZGUgJiYgY2hhbmdlcy5lZGl0TW9kZS5jdXJyZW50VmFsdWUgJiYgdGhpcy5mb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgLy8gZW5zdXJlIHdoZW4gdmFsdWVzIGNoYW5nZSwgZm9ybSBjb250cm9sIGlzIGZvcmNlZCB0byBiZSBtYXJrZWQgYXMgdG91Y2hlLlxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5lZGl0TW9kZSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKSk7XG4gICAgICAgICAgICAvLyB3aGlsZSBpbiBlZGl0IG1vZGUgc3Vic2NyaWJlIHRvIHZhbHVlIGNoYW5nZXMgb24gdGhlIGN1cnJlbnQgZm9ybSBjb250cm9sIGFuZCBzZXQgdG8gZWRpdFZhbHVlXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXMucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5lZGl0TW9kZSkpLnN1YnNjcmliZShzdGF0dXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdJTlZBTElEJyAmJiB0aGlzLmVycm9yVG9vbHRpcC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMuZXJyb3JUb29sdGlwLmZpcnN0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZUFuZFJlcG9zaXRpb25PdmVybGF5QnlJZCh0b29sdGlwLm92ZXJsYXlJZCwgdGhpcy5lcnJvclRvb2x0aXAuZmlyc3QuZWxlbWVudC5vZmZzZXRXaWR0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMudmFsdWUgJiYgIWNoYW5nZXMudmFsdWUuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Lmxhc3RTZWFyY2hJbmZvLnNlYXJjaFRleHQgPSB0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uc2VhcmNoVGV4dDtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodC5sYXN0U2VhcmNoSW5mby5jYXNlU2Vuc2l0aXZlID0gdGhpcy5ncmlkLmxhc3RTZWFyY2hJbmZvLmNhc2VTZW5zaXRpdmU7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHQubGFzdFNlYXJjaEluZm8uZXhhY3RNYXRjaCA9IHRoaXMuZ3JpZC5sYXN0U2VhcmNoSW5mby5leGFjdE1hdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNpemVBbmRSZXBvc2l0aW9uT3ZlcmxheUJ5SWQob3ZlcmxheUlkOiBzdHJpbmcsIG5ld1NpemU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvdmVybGF5ID0gdGhpcy5vdmVybGF5U2VydmljZS5nZXRPdmVybGF5QnlJZChvdmVybGF5SWQpO1xuICAgICAgICBpZiAoIW92ZXJsYXkpIHJldHVybjtcbiAgICAgICAgb3ZlcmxheS5pbml0aWFsU2l6ZS53aWR0aCA9IG5ld1NpemU7XG4gICAgICAgIG92ZXJsYXkuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuc3R5bGUud2lkdGggPSBuZXdTaXplICsgJ3B4JztcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5yZXBvc2l0aW9uKG92ZXJsYXlJZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RhcnRzL2VuZHMgZWRpdCBtb2RlIGZvciB0aGUgY2VsbC5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjZWxsLnNldEVkaXRNb2RlKHRydWUpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRFZGl0TW9kZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbnRSb3cuZGVsZXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVkaXRhYmxlICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmNydWRTZXJ2aWNlLmNlbGxJbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX2NlbGwodGhpcy5ncmlkLmNydWRTZXJ2aWNlLmNlbGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbmRDZWxsRWRpdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVudGVyRWRpdE1vZGUodGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW5kQ2VsbEVkaXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgbmV3IHZhbHVlIHRvIHRoZSBjZWxsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNlbGwudXBkYXRlKCdOZXcgVmFsdWUnKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIC8vIFRPRE86IFJlZmFjdG9yXG4gICAgcHVibGljIHVwZGF0ZSh2YWw6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5pbnRSb3cuZGVsZXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNlbGwgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbDtcbiAgICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgICAgICBjZWxsID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmNyZWF0ZUNlbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2VsbC5lZGl0VmFsdWUgPSB2YWw7XG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnVwZGF0ZV9jZWxsKGNlbGwpO1xuICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW5kQ2VsbEVkaXQoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHBvaW50ZXJkb3duID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2VsbFNlbGVjdGlvbk1vZGUgIT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMucGxhdGZvcm1VdGlsLmlzTGVmdENsaWNrKGV2ZW50KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLnNldEFjdGl2ZU5vZGUoeyByb3dJbmRleDogdGhpcy5yb3dJbmRleCwgY29sSW5kZXg6IHRoaXMudmlzaWJsZUNvbHVtbkluZGV4IH0pO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFkZEtleWJvYXJkUmFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pbml0S2V5Ym9hcmRTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnByaW1hcnlCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIEVuc3VyZSBSTUIgQ2xpY2sgb24gZWRpdGVkIGNlbGwgZG9lcyBub3QgZW5kIGNlbGwgZWRpdGluZ1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnVwZGF0ZUNlbGwodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnByaW1hcnlCdXR0b24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5wb2ludGVyRG93bih0aGlzLnNlbGVjdGlvbk5vZGUsIGV2ZW50LnNoaWZ0S2V5LCBldmVudC5jdHJsS2V5KTtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZShldmVudCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBwb2ludGVyZW50ZXIgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBpc0hpZXJhcmNoaWNhbEdyaWQgPSB0aGlzLmdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpZ3gtaGllcmFyY2hpY2FsLWdyaWQnO1xuICAgICAgICBpZiAoaXNIaWVyYXJjaGljYWxHcmlkICYmICghdGhpcy5ncmlkLm5hdmlnYXRpb24/LmFjdGl2ZU5vZGU/LmdyaWRJRCB8fCB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlLmdyaWRJRCAhPT0gdGhpcy5ncmlkSUQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHJhZ01vZGUgPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UucG9pbnRlckVudGVyKHRoaXMuc2VsZWN0aW9uTm9kZSwgZXZlbnQpO1xuICAgICAgICBpZiAoZHJhZ01vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZm9jdXNvdXQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VFcnJvclRvb2x0aXAoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlRXJyb3JUb29sdGlwKCkge1xuICAgICAgICBjb25zdCB0b29sdGlwID0gdGhpcy5lcnJvclRvb2x0aXAuZmlyc3Q7XG4gICAgICAgIGlmICh0b29sdGlwKSB7XG4gICAgICAgICAgICB0b29sdGlwLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHBvaW50ZXJ1cCA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzSGllcmFyY2hpY2FsR3JpZCA9IHRoaXMuZ3JpZC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lneC1oaWVyYXJjaGljYWwtZ3JpZCc7XG4gICAgICAgIGlmICghdGhpcy5wbGF0Zm9ybVV0aWwuaXNMZWZ0Q2xpY2soZXZlbnQpIHx8IChpc0hpZXJhcmNoaWNhbEdyaWQgJiYgKCF0aGlzLmdyaWQubmF2aWdhdGlvbj8uYWN0aXZlTm9kZT8uZ3JpZElEIHx8XG4gICAgICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlLmdyaWRJRCAhPT0gdGhpcy5ncmlkSUQpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNlcnZpY2UucG9pbnRlclVwKHRoaXMuc2VsZWN0aW9uTm9kZSwgdGhpcy5ncmlkLnJhbmdlU2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGFjdGl2YXRlKGV2ZW50OiBGb2N1c0V2ZW50IHwgS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25Ob2RlO1xuICAgICAgICBsZXQgc2hvdWxkRW1pdFNlbGVjdGlvbiA9ICF0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNBY3RpdmVOb2RlKG5vZGUpO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNlcnZpY2UucHJpbWFyeUJ1dHRvbikge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEFjdGl2ZSA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHRoaXMuY2VsbFNlbGVjdGlvbk1vZGUgPT09IEdyaWRTZWxlY3Rpb25Nb2RlLnNpbmdsZSAmJiAoZXZlbnQgYXMgYW55KT8uY3RybEtleSAmJiB0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHNob3VsZEVtaXRTZWxlY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWN0aXZlRWxlbWVudCA9IG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjYW5jZWwgPSB0aGlzLl91cGRhdGVDUlVEU3RhdHVzKGV2ZW50KTtcbiAgICAgICAgICAgIGlmIChjYW5jZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRBY3RpdmU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBhY3RpdmVFbGVtZW50ID8gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19ieV9pbmRleChhY3RpdmVFbGVtZW50LnJvdykgOiBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dFZGl0aW5nQmxvY2tlZCAmJiByb3cgJiYgdGhpcy5pbnRSb3cua2V5ICE9PSByb3cua2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmNydWRTZXJ2aWNlLmNlbGxJbkVkaXRNb2RlICYmICF0aGlzLmVkaXRNb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnVwZGF0ZUNlbGwodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRpb24uc2V0QWN0aXZlTm9kZSh7IHJvdzogdGhpcy5yb3dJbmRleCwgY29sdW1uOiB0aGlzLnZpc2libGVDb2x1bW5JbmRleCB9KTtcblxuICAgICAgICBjb25zdCBpc1RhcmdldEVycm9ySWNvbiA9IGV2ZW50ICYmIGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQgPT09IHRoaXMuZXJyb3JJY29uPy5lbC5uYXRpdmVFbGVtZW50XG4gICAgICAgIGlmICh0aGlzLmlzSW52YWxpZCAmJiAhaXNUYXJnZXRFcnJvckljb24pIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMub3BlbkVycm9yVG9vbHRpcCgpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLmFjdGl2ZU5vZGVDaGFuZ2UucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VFcnJvclRvb2x0aXAoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5wcmltYXJ5QnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuY2VsbFNlbGVjdGlvbk1vZGUgPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlICYmIHRoaXMuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmlzSW5NYXAodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFjdGl2ZUVsZW1lbnQpICYmIChldmVudCBhcyBhbnkpPy5jdHJsS2V5ICYmICEoZXZlbnQgYXMgYW55KT8uc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UucmVtb3ZlKHRoaXMuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBzaG91bGRFbWl0U2VsZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFkZCh0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWN0aXZlRWxlbWVudCwgZmFsc2UpOyAvLyBwb2ludGVyIGV2ZW50cyBoYW5kbGUgcmFuZ2UgZ2VuZXJhdGlvblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5rZXlib2FyZFN0YXRlT25Gb2N1cyhub2RlLCB0aGlzLmdyaWQucmFuZ2VTZWxlY3RlZCwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkLmlzQ2VsbFNlbGVjdGFibGUgJiYgc2hvdWxkRW1pdFNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmdyaWQuc2VsZWN0ZWQuZW1pdCh7IGNlbGw6IHRoaXMuZ2V0Q2VsbFR5cGUoKSwgZXZlbnQgfSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIHByb3ZpZGVkIHN0cmluZyBtYXRjaGVzIHRoZSB0ZXh0IGluIHRoZSBjZWxsLCB0aGUgdGV4dCBnZXRzIGhpZ2hsaWdodGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNlbGwuaGlnaGxpZ2h0VGV4dCgnQ2VsbCBWYWx1ZScsIHRydWUpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGhpZ2hsaWdodFRleHQodGV4dDogc3RyaW5nLCBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbiwgZXhhY3RNYXRjaD86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHQgJiYgdGhpcy5jb2x1bW4uc2VhcmNoYWJsZSA/IHRoaXMuaGlnaGxpZ2h0LmhpZ2hsaWdodCh0ZXh0LCBjYXNlU2Vuc2l0aXZlLCBleGFjdE1hdGNoKSA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBoaWdobGlnaHQgb2YgdGhlIHRleHQgaW4gdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2VsbC5jbGVhckhpZ2hMaWdodCgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGNsZWFySGlnaGxpZ2h0KCkge1xuICAgICAgICBpZiAodGhpcy5oaWdobGlnaHQgJiYgdGhpcy5jb2x1bW4uc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5oaWdobGlnaHQuY2xlYXJIaWdobGlnaHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2FsY3VsYXRlU2l6ZVRvRml0KHJhbmdlOiBhbnkpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybVV0aWwuZ2V0Tm9kZVNpemVWaWFSYW5nZShyYW5nZSwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWFyY2hNZXRhZGF0YSgpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgIG1ldGEuc2V0KCdwaW5uZWQnLCB0aGlzLmdyaWQuaXNSZWNvcmRQaW5uZWRCeVZpZXdJbmRleCh0aGlzLmludFJvdy5pbmRleCkpO1xuICAgICAgICByZXR1cm4gbWV0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlQ1JVRFN0YXR1cyhldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZWRpdGFibGVBcmdzO1xuICAgICAgICBjb25zdCBjcnVkID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlO1xuICAgICAgICBjb25zdCBlZGl0YWJsZUNlbGwgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbDtcbiAgICAgICAgY29uc3QgZWRpdE1vZGUgPSAhIShjcnVkLnJvdyB8fCBjcnVkLmNlbGwpO1xuXG4gICAgICAgIGlmICh0aGlzLmVkaXRhYmxlICYmIGVkaXRNb2RlICYmICF0aGlzLmludFJvdy5kZWxldGVkKSB7XG4gICAgICAgICAgICBpZiAoZWRpdGFibGVDZWxsKSB7XG4gICAgICAgICAgICAgICAgZWRpdGFibGVBcmdzID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnVwZGF0ZUNlbGwoZmFsc2UsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIC8qIFRoaXMgY2hlY2sgaXMgcmVsYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgaXNzdWUgIzY1MTc6XG4gICAgICAgICAgICAgICAgICogd2hlbiBlZGl0IGNlbGwgdGhhdCBiZWxvbmdzIHRvIGEgY29sdW1uIHdoaWNoIGlzIHNvcnRlZCBhbmQgcHJlc3MgdGFiLFxuICAgICAgICAgICAgICAgICAqIHRoZSBuZXh0IGNlbGwgaW4gZWRpdCBtb2RlIGlzIHdpdGggd3JvbmcgdmFsdWUgL2l0cyBjb250ZXh0IGlzIG5vdCB1cGRhdGVkLztcbiAgICAgICAgICAgICAgICAgKiBTbyB3ZSByZWFwcGx5IHNvcnRpbmcgYmVmb3JlIHRoZSBuZXh0IGNlbGwgZW50ZXJzIGVkaXQgbW9kZS5cbiAgICAgICAgICAgICAgICAgKiBBbHNvIHdlIG5lZWQgdG8ga2VlcCB0aGUgbm90aWZ5Q2hhbmdlcyBiZWxvdywgYmVjYXVzZSBvZiB0aGUgY3VycmVudFxuICAgICAgICAgICAgICAgICAqIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgd2hlbiB3ZSBoYXZlIGVkaXRpbmcgd2l0aCBlbmFibGVkIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmxlbmd0aCAmJiB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmluZGV4T2YoZWRpdGFibGVDZWxsLmNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGVkaXRhYmxlQXJncyAmJiBlZGl0YWJsZUFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNydWQuZXhpdENlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgICAgICAgICBjcnVkLmVudGVyRWRpdE1vZGUodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVkaXRhYmxlQ2VsbCAmJiBjcnVkLnNhbWVSb3codGhpcy5jZWxsSUQucm93SUQpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UudXBkYXRlQ2VsbCh0cnVlLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWRpdE1vZGUgJiYgIWNydWQuc2FtZVJvdyh0aGlzLmNlbGxJRC5yb3dJRCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbmRFZGl0KHRydWUsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkUG9pbnRlckxpc3RlbmVycyhzZWxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmVudGVyJywgdGhpcy5wb2ludGVyZW50ZXIpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5wb2ludGVydXApO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLmZvY3Vzb3V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVBvaW50ZXJMaXN0ZW5lcnMoc2VsZWN0aW9uKSB7XG4gICAgICAgIGlmIChzZWxlY3Rpb24gIT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJlbnRlcicsIHRoaXMucG9pbnRlcmVudGVyKTtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMucG9pbnRlcnVwKTtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5mb2N1c291dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDZWxsVHlwZSh1c2VSb3c/OiBib29sZWFuKTogQ2VsbFR5cGUge1xuICAgICAgICBjb25zdCByb3dJRCA9IHVzZVJvdyA/IHRoaXMuZ3JpZC5jcmVhdGVSb3codGhpcy5pbnRSb3cuaW5kZXgsIHRoaXMuaW50Um93LmRhdGEpIDogdGhpcy5pbnRSb3cuaW5kZXg7XG4gICAgICAgIHJldHVybiBuZXcgSWd4R3JpZENlbGwodGhpcy5ncmlkLCByb3dJRCwgdGhpcy5jb2x1bW4pO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFBpbm5lZEluZGljYXRvcj5cbiAgICA8aWd4LWNoaXBcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5UGlubmVkQ2hpcFwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWdyaWRfX3RkLS1waW5uZWQtY2hpcFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cIidjb21wYWN0J1wiXG4gICAgICAgID57eyBncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9waW5uZWRfcm93X2luZGljYXRvciB9fTwvaWd4LWNoaXBcbiAgICA+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2VsbD5cbiAgICA8ZGl2ICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlICE9PSAnYm9vbGVhbicgJiYgY29sdW1uLmRhdGFUeXBlICE9PSAnaW1hZ2UnIHx8IChjb2x1bW4uZGF0YVR5cGUgPT09ICdib29sZWFuJyAmJiB0aGlzLmZvcm1hdHRlcilcIlxuICAgICAgICBpZ3hUZXh0SGlnaGxpZ2h0XG4gICAgICAgIGNsYXNzPVwiaWd4LWdyaWRfX3RkLXRleHRcIlxuICAgICAgICBbY3NzQ2xhc3NdPVwiaGlnaGxpZ2h0Q2xhc3NcIlxuICAgICAgICBbYWN0aXZlQ3NzQ2xhc3NdPVwiYWN0aXZlSGlnaGxpZ2h0Q2xhc3NcIlxuICAgICAgICBbZ3JvdXBOYW1lXT1cImdyaWRJRFwiXG4gICAgICAgIFt2YWx1ZV09XCJcbiAgICAgICAgICAgIGZvcm1hdHRlclxuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgY29sdW1uRm9ybWF0dGVyOmZvcm1hdHRlcjpyb3dEYXRhOmNvbHVtbkRhdGEpXG4gICAgICAgICAgICAgICAgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgPyAodmFsdWUgfCBudW1iZXI6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICAgICAgOiAoY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZScgfHwgY29sdW1uLmRhdGFUeXBlID09PSAndGltZScgfHwgY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnKVxuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgZGF0ZTpjb2x1bW4ucGlwZUFyZ3MuZm9ybWF0OmNvbHVtbi5waXBlQXJncy50aW1lem9uZTpncmlkLmxvY2FsZSlcbiAgICAgICAgICAgICAgICA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgY3VycmVuY3k6Y3VycmVuY3lDb2RlOmNvbHVtbi5waXBlQXJncy5kaXNwbGF5OmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgIDogY29sdW1uLmRhdGFUeXBlID09PSAncGVyY2VudCdcbiAgICAgICAgICAgICAgICA/ICh2YWx1ZSB8IHBlcmNlbnQ6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBcIlxuICAgICAgICBbcm93XT1cInJvd0RhdGFcIlxuICAgICAgICBbY29sdW1uXT1cInRoaXMuY29sdW1uLmZpZWxkXCJcbiAgICAgICAgW2NvbnRhaW5lckNsYXNzXT1cIidpZ3gtZ3JpZF9fdGQtdGV4dCdcIlxuICAgICAgICBbbWV0YWRhdGFdPVwic2VhcmNoTWV0YWRhdGFcIlxuICAgID57e1xuICAgICAgICAgICAgZm9ybWF0dGVyXG4gICAgICAgICAgICAgICAgPyAodmFsdWUgfCBjb2x1bW5Gb3JtYXR0ZXI6Zm9ybWF0dGVyOnJvd0RhdGE6Y29sdW1uRGF0YSlcbiAgICAgICAgICAgICAgICA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgbnVtYmVyOmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgIDogKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGUnIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3RpbWUnIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGVUaW1lJylcbiAgICAgICAgICAgICAgICA/ICh2YWx1ZSB8IGRhdGU6Y29sdW1uLnBpcGVBcmdzLmZvcm1hdDpjb2x1bW4ucGlwZUFyZ3MudGltZXpvbmU6Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICAgICAgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdjdXJyZW5jeSdcbiAgICAgICAgICAgICAgICA/ICh2YWx1ZSB8IGN1cnJlbmN5OmN1cnJlbmN5Q29kZTpjb2x1bW4ucGlwZUFyZ3MuZGlzcGxheTpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSlcbiAgICAgICAgICAgICAgICA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnXG4gICAgICAgICAgICAgICAgPyAodmFsdWUgfCBwZXJjZW50OmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgfX08L2Rpdj5cbiAgICA8aWd4LWljb25cbiAgICAgICAgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdib29sZWFuJyAmJiAhdGhpcy5mb3JtYXR0ZXJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdpZ3gtaWNvbi0tc3VjY2Vzcyc6IHZhbHVlLCAnaWd4LWljb24tLWVycm9yJzogIXZhbHVlIH1cIlxuICAgICAgICA+e3sgdmFsdWUgPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX08L2lneC1pY29uPlxuICAgIDxpbWcgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdpbWFnZSdcIiBbc3JjXT1cInZhbHVlXCIgW2FsdF09XCJ2YWx1ZSB8IGlneENlbGxJbWFnZUFsdFwiIC8+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNhZGRSb3dDZWxsIGxldC1jZWxsPVwiY2VsbFwiPlxuICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgIT09ICdib29sZWFuJyB8fCAoY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbicgJiYgdGhpcy5mb3JtYXR0ZXIpXCJcbiAgICAgICAgaWd4VGV4dEhpZ2hsaWdodCBjbGFzcz1cImlneC1ncmlkX190ZC10ZXh0XCJcbiAgICBbY3NzQ2xhc3NdPVwiaGlnaGxpZ2h0Q2xhc3NcIlxuICAgIFthY3RpdmVDc3NDbGFzc109XCJhY3RpdmVIaWdobGlnaHRDbGFzc1wiXG4gICAgW2dyb3VwTmFtZV09XCJncmlkSURcIlxuICAgIFt2YWx1ZV09XCJmb3JtYXR0ZXIgPyAodmFsdWUgfCBjb2x1bW5Gb3JtYXR0ZXI6Zm9ybWF0dGVyOnJvd0RhdGEpIDogY29sdW1uLmRhdGFUeXBlID09PSAnbnVtYmVyJyA/XG4gICAgICAgICh2YWx1ZSB8IG51bWJlcjpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSkgOiAoY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZScgfHwgY29sdW1uLmRhdGFUeXBlID09PSAndGltZScgfHwgY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnKSA/XG4gICAgICAgICh2YWx1ZSB8IGRhdGU6Y29sdW1uLnBpcGVBcmdzLmZvcm1hdDpjb2x1bW4ucGlwZUFyZ3MudGltZXpvbmU6Z3JpZC5sb2NhbGUpIDogY29sdW1uLmRhdGFUeXBlID09PSAnY3VycmVuY3knID9cbiAgICAgICAgKHZhbHVlIHwgY3VycmVuY3k6Y3VycmVuY3lDb2RlOmNvbHVtbi5waXBlQXJncy5kaXNwbGF5OmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKSA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnID9cbiAgICAgICAgKHZhbHVlIHwgcGVyY2VudDpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSkgOiB2YWx1ZVwiXG4gICAgW3Jvd109XCJyb3dEYXRhXCJcbiAgICBbY29sdW1uXT1cInRoaXMuY29sdW1uLmZpZWxkXCJcbiAgICBbY29udGFpbmVyQ2xhc3NdPVwiJ2lneC1ncmlkX190ZC10ZXh0J1wiXG4gICAgW21ldGFkYXRhXT1cInNlYXJjaE1ldGFkYXRhXCI+e3tcbiAgICAgICAgIWlzRW1wdHlBZGRSb3dDZWxsID8gdmFsdWUgOiAoY29sdW1uLmhlYWRlciB8fCBjb2x1bW4uZmllbGQpXG4gICAgfX08L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2lubGluZUVkaXRvciBsZXQtY2VsbD1cImNlbGxcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnc3RyaW5nJyB8fCBjb2x1bW4uZGF0YVR5cGUgPT09ICdpbWFnZSdcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgICAgICA8aWd4LWlucHV0LWdyb3VwIGRpc3BsYXlEZW5zaXR5PVwiY29tcGFjdFwiID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVCeVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImlzSW52YWxpZFwiXG4gICAgICAgICAgICAgICAgW2lneEZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtpZ3hUZXh0U2VsZWN0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgKGNvbXBvc2l0aW9uc3RhcnQpPVwiZ3JpZC5jcnVkU2VydmljZS5pc0luQ29tcG9zaXRpb25Nb2RlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgKGNvbXBvc2l0aW9uZW5kKT1cImdyaWQuY3J1ZFNlcnZpY2UuaXNJbkNvbXBvc2l0aW9uTW9kZSA9IGZhbHNlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdudW1iZXInXCI+XG4gICAgICAgIDxpZ3gtaW5wdXQtZ3JvdXAgZGlzcGxheURlbnNpdHk9XCJjb21wYWN0XCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVCeVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImlzSW52YWxpZFwiXG4gICAgICAgICAgICAgICAgW2lneEZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtpZ3hUZXh0U2VsZWN0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzdGVwXT1cInN0ZXBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2lneC1pbnB1dC1ncm91cD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbidcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgICAgICA8aWd4LWNoZWNrYm94XG4gICAgICAgICAgICBbY2hlY2tlZF09XCJlZGl0VmFsdWVcIlxuICAgICAgICAgICAgW2lneEZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICA+PC9pZ3gtY2hlY2tib3g+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGUnXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgICAgICAgPGlneC1kYXRlLXBpY2tlclxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiMTAwXCJcbiAgICAgICAgICAgIFtvdXRsZXRdPVwiZ3JpZC5vdXRsZXRcIlxuICAgICAgICAgICAgbW9kZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgIFtsb2NhbGVdPVwiZ3JpZC5sb2NhbGVcIlxuICAgICAgICAgICAgW3dlZWtTdGFydF09XCJjb2x1bW4ucGlwZUFyZ3Mud2Vla1N0YXJ0XCJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImVkaXRWYWx1ZVwiXG4gICAgICAgICAgICBbaWd4Rm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICA+XG4gICAgICAgIDwvaWd4LWRhdGUtcGlja2VyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICd0aW1lJ1wiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gICAgICAgIDxpZ3gtdGltZS1waWNrZXJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cIjEwMFwiXG4gICAgICAgICAgICBbb3V0bGV0XT1cImdyaWQub3V0bGV0XCJcbiAgICAgICAgICAgIG1vZGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICBbbG9jYWxlXT1cImdyaWQubG9jYWxlXCJcbiAgICAgICAgICAgIFtpbnB1dEZvcm1hdF09XCJjb2x1bW4uZGVmYXVsdFRpbWVGb3JtYXRcIlxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiZWRpdFZhbHVlXCJcbiAgICAgICAgICAgIFtpZ3hGb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgID48L2lneC10aW1lLXBpY2tlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnXCI+XG4gICAgICAgIDxpZ3gtaW5wdXQtZ3JvdXAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImFyaWFEZXNjcmliZUJ5XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaXNJbnZhbGlkXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICAgICAgW2lneERhdGVUaW1lRWRpdG9yXT1cImNvbHVtbi5kZWZhdWx0RGF0ZVRpbWVGb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtpZ3hGb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdjdXJyZW5jeSdcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cCBkaXNwbGF5RGVuc2l0eT1cImNvbXBhY3RcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgICAgICAgICAgPGlneC1wcmVmaXggKm5nSWY9XCJncmlkLmN1cnJlbmN5UG9zaXRpb25MZWZ0XCI+e3sgY3VycmVuY3lDb2RlU3ltYm9sIH19PC9pZ3gtcHJlZml4PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWd4SW5wdXRcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImFyaWFEZXNjcmliZUJ5XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaXNJbnZhbGlkXCJcbiAgICAgICAgICAgICAgICBbaWd4Rm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2lneFRleHRTZWxlY3Rpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3N0ZXBdPVwic3RlcFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cIiFncmlkLmN1cnJlbmN5UG9zaXRpb25MZWZ0XCI+e3sgY3VycmVuY3lDb2RlU3ltYm9sIH19PC9pZ3gtc3VmZml4PlxuICAgICAgICA8L2lneC1pbnB1dC1ncm91cD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAncGVyY2VudCdcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cCBkaXNwbGF5RGVuc2l0eT1cImNvbXBhY3RcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWd4SW5wdXRcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImFyaWFEZXNjcmliZUJ5XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaXNJbnZhbGlkXCJcbiAgICAgICAgICAgICAgICBbaWd4Rm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2lneFRleHRTZWxlY3Rpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3N0ZXBdPVwic3RlcFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8aWd4LXN1ZmZpeD4ge3sgZWRpdFZhbHVlIHwgcGVyY2VudDpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSB9fSA8L2lneC1zdWZmaXg+XG4gICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwaW5uZWRJbmRpY2F0b3JUZW1wbGF0ZTsgY29udGV4dDogY29udGV4dFwiPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGU7IGNvbnRleHQ6IGNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzSW52YWxpZFwiPlxuICAgIDxpZ3gtaWNvbiAjZXJyb3JJY29uIFtpZ3hUb29sdGlwVGFyZ2V0XT1cInRvb2x0aXBSZWZcIiAgW2lneFRvZ2dsZU91dGxldF09XCJncmlkLm91dGxldFwiXG4gICAgKG1vdXNlb3Zlcik9J2Vycm9yU2hvd2luZyA9IHRydWUnIChtb3VzZW91dCk9J2Vycm9yU2hvd2luZyA9IGZhbHNlJz5lcnJvcjwvaWd4LWljb24+XG4gICAgPGRpdiBbaWRdPVwiYXJpYUVycm9yTWVzc2FnZVwiXG4gICAgaWd4VG9vbHRpcCAjZXJyb3IgI3Rvb2x0aXBSZWY9XCJ0b29sdGlwXCI+XG4gICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cIidtYXgtY29udGVudCdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsVmFsaWRhdGlvbkVycm9yVGVtcGxhdGUgfHwgZGVmYXVsdEVycm9yOyBjb250ZXh0OiBjb250ZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVycm9yPlxuICAgIDxkaXYgKm5nSWY9XCJmb3JtR3JvdXA/LmdldChjb2x1bW4/LmZpZWxkKS5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPlxuICAgICAgICB7e2dyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3JlcXVpcmVkX3ZhbGlkYXRpb25fZXJyb3J9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJmb3JtR3JvdXA/LmdldChjb2x1bW4/LmZpZWxkKS5lcnJvcnM/LlsnbWlubGVuZ3RoJ11cIj5cbiAgICAgICAge3tncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9taW5fbGVuZ3RoX3ZhbGlkYXRpb25fZXJyb3IgfCBpZ3hTdHJpbmdSZXBsYWNlOid7MH0nOmZvcm1Hcm91cC5nZXQoY29sdW1uLmZpZWxkKS5lcnJvcnMubWlubGVuZ3RoLnJlcXVpcmVkTGVuZ3RoIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImZvcm1Hcm91cD8uZ2V0KGNvbHVtbj8uZmllbGQpLmVycm9ycz8uWydtYXhsZW5ndGgnXVwiPlxuICAgICAgICB7e2dyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX21heF9sZW5ndGhfdmFsaWRhdGlvbl9lcnJvciB8IGlneFN0cmluZ1JlcGxhY2U6J3swfSc6Zm9ybUdyb3VwLmdldChjb2x1bW4uZmllbGQpLmVycm9ycy5tYXhsZW5ndGgucmVxdWlyZWRMZW5ndGggfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZm9ybUdyb3VwPy5nZXQoY29sdW1uPy5maWVsZCkuZXJyb3JzPy5bJ21pbiddXCI+XG4gICAgICAgIHt7Z3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfbWluX3ZhbGlkYXRpb25fZXJyb3IgfCBpZ3hTdHJpbmdSZXBsYWNlOid7MH0nOmZvcm1Hcm91cC5nZXQoY29sdW1uLmZpZWxkKS5lcnJvcnMubWluLm1pbiB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJmb3JtR3JvdXA/LmdldChjb2x1bW4/LmZpZWxkKS5lcnJvcnM/LlsnbWF4J11cIj5cbiAgICAgICAge3tncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9tYXhfdmFsaWRhdGlvbl9lcnJvciB8IGlneFN0cmluZ1JlcGxhY2U6J3swfSc6Zm9ybUdyb3VwLmdldChjb2x1bW4uZmllbGQpLmVycm9ycy5tYXgubWF4IH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImZvcm1Hcm91cD8uZ2V0KGNvbHVtbj8uZmllbGQpLmVycm9ycz8uWydlbWFpbCddXCI+XG4gICAgICAgIHt7Z3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZW1haWxfdmFsaWRhdGlvbl9lcnJvciB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJmb3JtR3JvdXA/LmdldChjb2x1bW4/LmZpZWxkKS5lcnJvcnM/LlsncGF0dGVybiddXCI+XG4gICAgICAgIHt7Z3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfcGF0dGVybl92YWxpZGF0aW9uX2Vycm9yfX1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=