@schneideress/dashboardframework 0.0.264 → 0.0.266
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/schneideress-dashboardframework.umd.js +9 -10
- package/bundles/schneideress-dashboardframework.umd.js.map +1 -1
- package/bundles/schneideress-dashboardframework.umd.min.js +1 -1
- package/bundles/schneideress-dashboardframework.umd.min.js.map +1 -1
- package/esm2015/lib/ra-dashboard-area/ra.dashboard.area.js +2 -5
- package/esm2015/lib/ra-widget-container/ra.widget.container.component.js +9 -7
- package/esm5/lib/ra-dashboard-area/ra.dashboard.area.js +2 -5
- package/esm5/lib/ra-widget-container/ra.widget.container.component.js +9 -7
- package/fesm2015/schneideress-dashboardframework.js +9 -10
- package/fesm2015/schneideress-dashboardframework.js.map +1 -1
- package/fesm5/schneideress-dashboardframework.js +9 -10
- package/fesm5/schneideress-dashboardframework.js.map +1 -1
- package/lib/ra-dashboard-area/ra.dashboard.area.d.ts +0 -1
- package/lib/ra-widget-container/ra.widget.container.component.d.ts +2 -2
- package/package.json +1 -1
- package/schneideress-dashboardframework.metadata.json +1 -1
|
@@ -96,13 +96,15 @@ let RAWidgetContainer = class RAWidgetContainer {
|
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
if (changes.globalFilter && changes.globalFilter.currentValue != changes.globalFilter.previousValue) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if (
|
|
99
|
+
if (!this.dashboardInfo.curatedFilters) {
|
|
100
|
+
let filterObj = this.getParsedConfig(this.globalFilter);
|
|
101
|
+
if (filterObj.WidgetInstanceId) {
|
|
102
|
+
if (this.data.widgetInfo.widgetInstanceId != filterObj.WidgetInstanceId)
|
|
103
|
+
this.refreshWidget(this.data.widgetInfo);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
102
106
|
this.refreshWidget(this.data.widgetInfo);
|
|
103
|
-
|
|
104
|
-
else {
|
|
105
|
-
this.refreshWidget(this.data.widgetInfo);
|
|
107
|
+
}
|
|
106
108
|
}
|
|
107
109
|
}
|
|
108
110
|
if (changes.width && changes.width.currentValue != changes.width.previousValue ||
|
|
@@ -829,4 +831,4 @@ RAWidgetContainer = tslib_1.__decorate([
|
|
|
829
831
|
DomService])
|
|
830
832
|
], RAWidgetContainer);
|
|
831
833
|
export { RAWidgetContainer };
|
|
832
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS13aWRnZXQtY29udGFpbmVyL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeE0sT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQWdELGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQStCLE1BQU0sK0JBQStCLENBQUM7QUFDak0sT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBU25FLElBQWEsaUJBQWlCLEdBQTlCLE1BQWEsaUJBQWlCO0lBd0Y1QixZQUFvQixnQkFBb0MsRUFDOUMsVUFBOEIsRUFDOUIsZ0JBQW9DLEVBQ3BDLE1BQWMsRUFDZCxR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QjtBQUN2QjtJQUExQixLQUFLLENBQUMsa0JBQWtCLENBQUM7O3lEQUE2QjtBQUU3QztJQUFULE1BQU0sRUFBRTs7d0RBQTRDO0FBQzNDO0lBQVQsTUFBTSxFQUFFOzsrREFBMkM7QUFjcEQ7SUFEQyxLQUFLLENBQUMsYUFBYSxDQUFDOzs7bURBR3BCO0FBdEZVLGlCQUFpQjtJQUo3QixTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUscUJBQXFCO1FBQy9CLHV6SEFBbUQ7S0FDcEQsQ0FBQzs2Q0F5RnNDLGtCQUFrQjtRQUNsQyxrQkFBa0I7UUFDWixrQkFBa0I7UUFDNUIsTUFBTTtRQUNKLGVBQWU7UUFDZixTQUFTO1FBQ0UsbUJBQW1CO1FBQzVCLFVBQVU7R0EvRnJCLGlCQUFpQixDQXN6QjdCO1NBdHpCWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgU2ltcGxlQ2hhbmdlLCBPbkRlc3Ryb3ksIE5nWm9uZSwgUmVuZGVyZXIyLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSYURhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuLy4uL3JhLmRhc2hib2FyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUkFEYXNoYm9hcmRFdmVudEJ1cyB9IGZyb20gJy4uL3JhLmRhc2hiYXJkLmV2ZW50LmJ1cyc7XHJcbmltcG9ydCB7IFJBRXZlbnQsIFJBRXZlbnRLZXkgfSBmcm9tICcuLi9yYS5ldmVudC5lbnVtJztcclxuaW1wb3J0IHsgSUFwcENvbmZpZywgSVdpZGdldENvbmZpZ0ZpbHRlciwgSVdpZGdldEluZm8sIFJBRG93bmxvYWRUeXBlLCBSQURvd25sb2FkT3B0aW9uLCBSYVdpZGdldGxvY2tTdGF0dXMsIFdpZGdldFZpZXdTdGF0ZSwgSWNvbmZpZ0NoYW5nZXMsIElCdWxrQWN0aW9uIH0gZnJvbSAnQHNjaG5laWRlcmVzcy93aWRnZXRmcmFtZXdvcmsnO1xyXG5pbXBvcnQgeyBOZ3hVaUxvYWRlclNlcnZpY2UgfSBmcm9tICduZ3gtdWktbG9hZGVyJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1ub3RpZmllcic7XHJcbmltcG9ydCB7IFJBVHJhbnNsYXRlU2VydmljZSwgUkFQZXJtaXNzaW9uU2VydmljZSwgRG9tU2VydmljZSB9IGZyb20gJ0BzY2huZWlkZXJlc3MvcmEtY29tbW9uJztcclxuaW1wb3J0IHsgTG9ja1Rvb2x0aXAgfSBmcm9tICcuL2xvY2stdG9vbHRpcC9sb2NrLnRvb2x0aXAuY29tcG9uZW50J1xyXG5cclxuZGVjbGFyZSB2YXIgalF1ZXJ5OiBhbnk7XHJcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyYS13aWRnZXQtY29udGFpbmVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJBV2lkZ2V0Q29udGFpbmVyIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyBzaG93UGFuZWw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgaXNXaWRnZXRMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHdpZGdldEVsZW1lbnQ6IGFueTtcclxuICBwcml2YXRlIGNvbmZpZ0NoYW5nZWQ6IGFueTtcclxuICBwdWJsaWMgd2lkZ2V0SGVpZ2h0OiBudW1iZXI7XHJcbiAgcHVibGljIGxvY2tDbGFzczogc3RyaW5nID0gXCJ1bmxvY2tlZFwiO1xyXG4gIHB1YmxpYyBsb2NrU3RhdHVzOiBSYVdpZGdldGxvY2tTdGF0dXMgPSBSYVdpZGdldGxvY2tTdGF0dXMuVW5sb2NrZWQ7XHJcbiAgcHVibGljIGlzRG93bmxvYWRJY29uVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0NoYXJ0RG93bmxvYWRWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzR3JpZERvd25sb2FkVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkb3dubG9hZEljb25UeXBlOiBSQURvd25sb2FkVHlwZTtcclxuICBwdWJsaWMgZW5hYmxlVGl0bGVMaW5lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzR2xvYmFsRmlsdGVyQXBwbGllZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB0b29sVGlwVmFsdWU6IHN0cmluZyA9ICcgICc7XHJcbiAgcHVibGljIHRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGxvY2tEZXRhaWxzOiBhbnk7XHJcbiAgcHVibGljIGxvY2tUZW1wbGF0ZUluZm86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgcHVibGljIGVkaXRUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgY29weVRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBtb3ZlVG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGV4Y2VsVG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGRlbGV0ZVRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBlZGl0VGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGNvcHlUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgbW92ZVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBleGNlbFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBkZWxldGVUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZWRpdFRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGNvcHlUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBtb3ZlVG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgZXhjZWxUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBkZWxldGVUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyB3aWRnZXRTZXR0aW5nczogYW55O1xyXG4gIHB1YmxpYyBub1BhZGRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNNb3VzZUhvdmVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dTZXR0aW5nc0xpbms6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBpc0twaVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0V4Y2VsbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGhpZGVUaXRsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbmFwcGxpY2FibGVGaWx0ZXJzOiBhbnkgPSBbXTtcclxuICBwdWJsaWMgcG9wdXBJbnN0YW5jZTogTG9ja1Rvb2x0aXA7XHJcbiAgcHVibGljIGN1cnJlbnRDb21wb25lbnQ6IGFueTtcclxuXHJcbiAgcHVibGljIGxvY2tJY29uVGl0bGU6IGFueTtcclxuICBwdWJsaWMgbG9ja0ljb25Gb290ZXI6IGFueTtcclxuICBwdWJsaWMgaW5hcHBsaWNhYmxlSWNvblRpdGxlOiBhbnk7XHJcbiAgcHVibGljIGluYXBwbGljYWJsZUljb25Gb290ZXI6IGFueTtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2N0bFdpZGdldCcsIHsgc3RhdGljOiBmYWxzZSB9KSBjdGxXaWRnZXQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnd2lkZ2V0RHJvcGRvd24nLCB7IHN0YXRpYzogZmFsc2UgfSkgd2lkZ2V0RHJvcGRvd246IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgc2VhcmNoSW5wdXQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnd2NXcmFwcGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHdjV3JhcHBlcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdiYW5Qb3B1cERpdicsIHsgc3RhdGljOiBmYWxzZSB9KSBiYW5Qb3B1cERpdjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdsb2NrUG9wdXBEaXYnLCB7IHN0YXRpYzogZmFsc2UgfSkgbG9ja1BvcHVwRGl2OiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoJ3dpZGdldC1pbnN0YW5jZS1pZCcpIHdpZGdldEluc3RhbmNlSWQ6IG51bWJlcjtcclxuICBASW5wdXQoJ2dsb2JhbC1maWx0ZXInKSBnbG9iYWxGaWx0ZXI6IGFueTtcclxuICBASW5wdXQoJ2Rhc2hib2FyZC1pbmZvJykgZGFzaGJvYXJkSW5mbzogYW55O1xyXG4gIEBJbnB1dCgnZGF0YScpIGRhdGE6IGFueTtcclxuICBASW5wdXQoJ2V2ZW50LWJ1cycpIHJhRGFzaGJvYXJkRXZlbnRCdXM6IFJBRGFzaGJvYXJkRXZlbnRCdXM7XHJcbiAgQElucHV0KCdhcHAtY29uZmlnJykgYXBwQ29uZmlnOiBJQXBwQ29uZmlnO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LXdpZHRoJykgd2lkdGg6IG51bWJlcjtcclxuICBASW5wdXQoJ3dpZGdldC1oZWlnaHQnKSBoZWlnaHQ6IG51bWJlcjtcclxuICBASW5wdXQoJ2dyaWQtY2VsbC1oZWlnaHQnKSBncmlkQ2VsbEhlaWdodDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnYnVsay1hY3Rpb24tZGF0YScpIGJ1bGtBY3Rpb25EYXRhOiBJQnVsa0FjdGlvbjtcclxuXHJcbiAgQE91dHB1dCgpIHdpZGdldERlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgdXBkYXRlQXBwbGllZEZpbHRlcnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgcHVibGljIGxvY2tUaXRsZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc1dpZGdldFN0YXRlQXBwbGljYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB3aWRnZXRFbXB0eVN0YXRlOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZG9tUmVzaXplZDogYm9vbGVhbjtcclxuICBwdWJsaWMgbG9ja1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgbG9ja2VkRmllbGRzOiBhbnk7XHJcbiAgcHVibGljIGRldGFpbFBhZ2VVcmw6IHN0cmluZztcclxuICBwdWJsaWMgYmFzZVVybDogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc1dpZGdldE1nbW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIFdpZGdldERpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIGVuYWJsZVRpdGxlTGluZUFjdHVhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB3aWRnZXRFbGVtZW50SGFuZGxlcjogYW55O1xyXG4gIEBJbnB1dCgnZG9tLXJlc2l6ZWQnKVxyXG4gIHNldCBzZXRSZXNpemVkKHJlc2l6ZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IFJhRGFzaGJvYXJkU2VydmljZSxcclxuICAgIHByaXZhdGUgbmd4U2VydmljZTogTmd4VWlMb2FkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBSQVRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBub3RpZmllcjogTm90aWZpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSByYVBlcm1pc3Npb25TZXJ2aWNlOiBSQVBlcm1pc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkb21TZXJ2aWNlOiBEb21TZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ2NsaWNrJywgKGU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZS50YXJnZXQuY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSAhPSAnZmFsIGZhLWVsbGlwc2lzLXYgd2lkZ2V0LW1lbnUtZWxsaXBzZScpIHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5XaWRnZXREaXNwbGF5TmFtZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi4nICsgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0VGl0bGUsIHRydWUpO1xyXG4gICAgdGhpcy5sb2NrSWNvblRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmxvY2tlZGZpZWxkcycpO1xyXG4gICAgdGhpcy5sb2NrSWNvbkZvb3RlciA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5sb2NrZWRmaWVsZHNlZGl0aW5mbycpO1xyXG4gICAgdGhpcy5pbmFwcGxpY2FibGVJY29uVGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uSW5hcHBsaWNhYmxlRmlsdGVycycpO1xyXG4gICAgdGhpcy5pbmFwcGxpY2FibGVJY29uRm9vdGVyID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkluYXBwbGljYWJsZUZpbHRlcnNEZXNjJyk7XHJcbiAgfVxyXG4gIGdldCB3aWRnZXRWaWV3U3RhdGUoKSB7IHJldHVybiBXaWRnZXRWaWV3U3RhdGU7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1dpZGdldE1nbW50ID0gdGhpcy5yYVBlcm1pc3Npb25TZXJ2aWNlLmhhc1Blcm1pc3Npb24oJ3JhLndpZGdldG1hbmFnZW1lbnQnKTtcclxuICAgIGlmIChjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMgJiYgY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICB0aGlzLmNvbmZpZ0NoYW5nZWQgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlV2l0aEtleShSQUV2ZW50LkNvbmZpZ0NoYW5nZWQsIFJBRXZlbnRLZXkuV2lkZ2V0SW5zdGFuY2VJZCwgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZC50b1N0cmluZygpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb25maWdDaGFuZ2VFdmVudEhhbmRsZXIoZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQpIHtcclxuICAgICAgaWYgKGNoYW5nZXMuYnVsa0FjdGlvbkRhdGEgJiYgY2hhbmdlcy5idWxrQWN0aW9uRGF0YS5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5idWxrQWN0aW9uRGF0YS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndpZGdldEVsZW1lbnQuYnVsa0FjdGlvbkNsaWNrZWQgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmJ1bGtBY3Rpb25DbGlja2VkKHRoaXMuYnVsa0FjdGlvbkRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY2hhbmdlcy5nbG9iYWxGaWx0ZXIgJiYgY2hhbmdlcy5nbG9iYWxGaWx0ZXIuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuZ2xvYmFsRmlsdGVyLnByZXZpb3VzVmFsdWUpIHtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlck9iaiA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZ2xvYmFsRmlsdGVyKTtcclxuICAgICAgICBpZiAoZmlsdGVyT2JqLldpZGdldEluc3RhbmNlSWQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkICE9IGZpbHRlck9iai5XaWRnZXRJbnN0YW5jZUlkKVxyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2hhbmdlcy53aWR0aCAmJiBjaGFuZ2VzLndpZHRoLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLndpZHRoLnByZXZpb3VzVmFsdWUgfHxcclxuICAgICAgICAoY2hhbmdlcy5oZWlnaHQgJiYgY2hhbmdlcy5oZWlnaHQuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuaGVpZ2h0LnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgICAgdGhpcy5pbnZva2VXaWRnZXRSZXNpemVkRXZlbnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCkge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCkge1xyXG4gICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0RWxlbWVudC53aWRnZXRSZXNpemVkID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBsZXQgc2l6ZTogYW55ID0ge307XHJcbiAgICAgICAgc2l6ZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICBzaXplLndpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICBzaXplLmNlbGxIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC53aWRnZXRSZXNpemVkKHNpemUpO1xyXG4gICAgICAgIGlmICh0aGlzLmhlaWdodCA9PSAxIHx8IHRoaXMud2lkdGggPT0gMSlcclxuICAgICAgICAgIHRoaXMuaXNLcGlWaWV3ID0gdHJ1ZVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMuaXNLcGlWaWV3ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vdXNlSG92ZXIoaXNIb3ZlciA9IHRydWUpIHtcclxuICAgIHRoaXMuaXNNb3VzZUhvdmVyID0gaXNIb3ZlcjtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50KSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRFbGVtZW50LmhvdmVyU3RhdHVzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuaG92ZXJTdGF0dXMoaXNIb3Zlcik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCd3aWRnZXQgZnJhbWV3b3JrIG91dGRhdGVkLCBwbGVhc2UgdXBkYXRlIHRvIHZlcnNpb24gMC4wLjk2Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICB0aGlzLmNsb3NlUG9wdXAoKTtcclxuICAgIH0pXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGxldCBpdGVtID0galF1ZXJ5KHRoaXMud2NXcmFwcGVyLm5hdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoJ2dyaWRzdGVyLWl0ZW0nKTtcclxuICAgICAgaXRlbS5iaW5kKCdtb3VzZWVudGVyJywgKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5ncmlkc3Rlckl0ZW1FbnRlciA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaXRlbS5iaW5kKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5ncmlkc3Rlckl0ZW1FbnRlciA9IGZhbHNlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF3aW5kb3cubW91c2VPdmVyV2lkZ2V0TWVudSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ0NoYW5nZWQpXHJcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlZC51bnN1YnNjcmliZSgpO1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudEhhbmRsZXIgJiYgdGhpcy5kYXRhICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCd3aWRnZXRpbml0aWF0ZWQnICsgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCwgdGhpcy53aWRnZXRFbGVtZW50SGFuZGxlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIFRvIEVkaXQgY3VycmVudCB3aWRnZXQgY29uZmlndXJhdGlvbiovXHJcbiAgcHVibGljIGVkaXRXaWRnZXQoKSB7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyOiBJV2lkZ2V0Q29uZmlnRmlsdGVyO1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiB0eXBlb2YgKHRoaXMud2lkZ2V0RWxlbWVudC5nZXRDb25maWdGaWx0ZXIpID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgbGV0IGNvbmZpZ0RhdGEgPSB0aGlzLndpZGdldEVsZW1lbnQuZ2V0Q29uZmlnRmlsdGVyKCk7XHJcbiAgICAgIGlmIChjb25maWdEYXRhKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyID0gY29uZmlnRGF0YTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHdpZGdldENvbmZpZ0ZpbHRlcikge1xyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LldpZGdldEVkaXRDbGlja2VkLCB3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXJEYXRhID0gdGhpcy5nZW5lcmF0ZUNvbmZpZ0ZpbHRlcihmYWxzZSk7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0RWRpdENsaWNrZWQsIHdpZGdldENvbmZpZ0ZpbHRlckRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFRvIERlbGV0ZSBjdXJyZW50IHdpZGdldCBmcm9tIERPTSovXHJcbiAgcHVibGljIGRlbGV0ZVdpZGdldCgpIHtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcclxuICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQubmd4U2VydmljZS5zdGFydCgpO1xyXG4gICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5kYXNoYm9hcmRTZXJ2aWNlLmRlbGV0ZVdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZShzdGF0dXMgPT4ge1xyXG4gICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5neFNlcnZpY2Uuc3RvcCgpO1xyXG4gICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXREZWxldGVkLmVtaXQodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgICAgdGhpcy5zZXRJbmFwcGxpY2FibGVGaWx0ZXJzKHVuZGVmaW5lZCwgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5ub3RpZmllci5ub3RpZnkoJ2Vycm9yJywgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdGYWlsZWRUb1JlbW92ZVdpZGdldCcpICsgXCIgIChcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi4nICsgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0VGl0bGUsIHRydWUpICsgXCIpIVwiKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIE1vdmUgb3IgY2hhbmdlIHBvc2l0aW9uIGlmIGN1cnJlbnQgd2lkZ2V0IGNvbnRhaW5lciovXHJcbiAgcHVibGljIG1vdmVXaWRnZXQoKSB7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50Lk1vdmVXaWRnZXQsIHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgIHRoaXMuc2V0SW5hcHBsaWNhYmxlRmlsdGVycyh1bmRlZmluZWQsIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgLy8gdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLm1vdmVXaWRnZXQod2lkZ2V0SW5mbyk7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gQ29weSBDdXJyZW50IHdpZGdldCB3aXRoIHNhbWUgY29uZmlndXJhdGlvbiovXHJcbiAgcHVibGljIGNvcHlXaWRnZXQoKSB7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LkNvcHlXaWRnZXQsIHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgIC8vdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNvcHlXaWRnZXQod2lkZ2V0SW5mbyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmlzaXRQYWdlKCkge1xyXG4gICAgdGhpcy5iYXNlVXJsID0gdGhpcy5nZXRIb3N0VXJsKCk7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5iYXNlVXJsICsgdGhpcy5kZXRhaWxQYWdlVXJsO1xyXG4gICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0U2V0dGluZ3MgPSB0aGlzLmdldFBhcnNlZENvbmZpZyh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VQYXJhbXMgfHwgdGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlVVJMKSB7XHJcbiAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMud2lkZ2V0RWxlbWVudC5nZXRQYWdlUGFyYW1zQ2xpY2tlZCgpO1xyXG4gICAgICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRUeXBlID09ICdBViBXaWRnZXQnIHx8IHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVVSTClcclxuICAgICAgICAgICAgdXJsID0gdXJsICsgcGFyYW1zO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnPycgKyBwYXJhbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRIb3N0VXJsKCkge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAod2luZG93LmxvY2F0aW9uLnBvcnQgPyAnOicgKyB3aW5kb3cubG9jYXRpb24ucG9ydCA6ICcnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25maWdDaGFuZ2VFdmVudEhhbmRsZXIod2lkZ2V0SW5mbykge1xyXG4gICAgdGhpcy5kYXRhLndpZGdldEluZm8gPSB3aWRnZXRJbmZvO1xyXG4gICAgaWYgKHRoaXMuZ3JpZENlbGxIZWlnaHQgPiAwKSB7XHJcbiAgICAgIHRoaXMuZGF0YS53aWRnZXRJbmZvLnJvd0hlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIHR5cGVvZiAodGhpcy53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcikgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aGlzLndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKHRoaXMuZ2VuZXJhdGVDb25maWdGaWx0ZXIodHJ1ZSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2Fybignd2lkZ2V0IGZyYW1ld29yayBvdXRkYXRlZCwgcGxlYXNlIHVwZGF0ZSB0byB2ZXJzaW9uIDAuMC45OCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWZyZXNoV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvLCB0cnVlKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlQ29uZmlnRmlsdGVyKGNvbmZpZ0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlckRhdGEgPSA8SVdpZGdldENvbmZpZ0ZpbHRlcj57XHJcbiAgICAgIGFwcENvbmZpZzogdGhpcy5hcHBDb25maWcsXHJcbiAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5nbG9iYWxGaWx0ZXIsXHJcbiAgICAgIHdpZGdldEluZm86IHRoaXMuZGF0YS53aWRnZXRJbmZvLFxyXG4gICAgICBjb25maWc6IHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnLFxyXG4gICAgICBjb25maWdDaGFuZ2VzOiB0aGlzLmdldENvbmZpZ0NoYW5nZXMoY29uZmlnQ2hhbmdlZClcclxuICAgIH1cclxuICAgIHJldHVybiB3aWRnZXRDb25maWdGaWx0ZXJEYXRhO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKiAgVG8gbG9hZCBleHRlcm5hbCBjdXN0b20gZWxlbWVudCB0byB0aGUgd2lkZ2V0IGNvbnRhaW5lciovXHJcbiAgYXN5bmMgbG9hZFdpZGdldCh3aWRnZXRJbmZvOiBhbnkpIHtcclxuICAgIHdpZGdldEluZm8ucm93SGVpZ2h0ID0gdGhpcy5ncmlkQ2VsbEhlaWdodDtcclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXIgPSA8SVdpZGdldENvbmZpZ0ZpbHRlcj57XHJcbiAgICAgIGNvbmZpZzogd2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyxcclxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlcixcclxuICAgICAgY29uZmlnQ2hhbmdlczogdGhpcy5nZXRDb25maWdDaGFuZ2VzKGZhbHNlKVxyXG4gICAgfVxyXG4gICAgaWYgKHdpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy53aWRnZXRTZXR0aW5ncyA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHdpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgICB0aGlzLmFwcGxheVdpZGdldFNldHRpbmdzKHRoaXMud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZXRhaWxQYWdlVXJsID0gd2lkZ2V0SW5mby5kZXRhaWxQYWdlVXJsO1xyXG4gICAgbGV0IG1lID0gdGhpcztcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5sb2FkRXh0ZXJuYWxTY3JpcHQod2lkZ2V0SW5mby5zY3JpcHRVcmwsICgpID0+IHtcclxuICAgICAgdGhpcy5zZXROb3RDb25maWd1cmVkU3RhdGUod2lkZ2V0SW5mbyk7XHJcbiAgICAgIGxldCBhcHBNb2R1bGUgPSB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXROYW1lO1xyXG4gICAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8uYXBwbGljYXRpb25Nb2R1bGUgJiYgdGhpcy5kYXRhLndpZGdldEluZm8uYXBwbGljYXRpb25Nb2R1bGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGFwcE1vZHVsZSA9IHRoaXMuZGF0YS53aWRnZXRJbmZvLmFwcGxpY2F0aW9uTW9kdWxlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5sb2FkVHJhbnNsYXRpb25zKHRoaXMuYXBwQ29uZmlnLmFwcE1hbmFnZW1lbnRCYXNlVXJsLCBhcHBNb2R1bGUsIGZhbHNlKS50aGVuKCgpID0+IHtcclxuICAgICAgICBtZS53aWRnZXRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh3aWRnZXRJbmZvLmN1c3RvbVRhZyk7XHJcbiAgICAgICAgbWUud2lkZ2V0RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ3aWRnZXQtaW5zdGFuY2UtaWRcIiwgd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuXHJcbiAgICAgICAgbGV0IGhhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignb24td2lkZ2V0LXJlc3BvbmQnLCAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdmFyIHR5cGU6IHN0cmluZyA9IGUuZGV0YWlsLnR5cGU7XHJcbiAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdvbkRhdGFMb2FkJzpcclxuICAgICAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsLmRhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93UGFuZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93UGFuZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdvbkNvbmZpZ0VkaXRDbGlja2VkJzpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0V2lkZ2V0KCk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnb25FbmFibGVEZWZhdWx0U3RhdGUnOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldEVtcHR5U3RhdGUoZS5kZXRhaWwuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnb25TZXRUaXRsZVVuZGVybGluZSc6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChlLmRldGFpbC5kYXRhID09IHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUaXRsZUxpbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUaXRsZUxpbmUgPSB0aGlzLmVuYWJsZVRpdGxlTGluZUFjdHVhbDtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdvbldpZGdldFRpdGxlSGlkZGVuJzpcclxuICAgICAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsLmRhdGEgPT0gdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVUaXRsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVUaXRsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ29uVXBkYXRlTG9ja0RhdGEnOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldExvY2soZS5kZXRhaWwuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnb25HbG9iYWxGaWx0ZXJBcHBsaWNhYmxlQ2hlY2snOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldEluYXBwbGljYWJsZUZpbHRlcnMoZS5kZXRhaWwuZGF0YSwgd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhpcy53aWRnZXRFbGVtZW50LnRpdGxlTGluZUVuYWJsZWQpICE9ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRpdGxlTGluZUVuYWJsZWQgPSB0aGlzLndpZGdldEVsZW1lbnQudGl0bGVMaW5lRW5hYmxlZCgpO1xyXG4gICAgICAgICAgICAgIGlmICh0aXRsZUxpbmVFbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRpdGxlTGluZSA9IHRpdGxlTGluZUVuYWJsZWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRpdGxlTGluZUFjdHVhbCA9IHRpdGxlTGluZUVuYWJsZWQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdFRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lZGl0VGV4dCA9ICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICB0aGlzLmVkaXRUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZWRpdFRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNvcHlUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmNvcHknKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5JykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29weVRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmNvcHknKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb3B5VG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmNvcHknKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvcHlUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5tb3ZlVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJylcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMubW92ZVRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlVG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKTtcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5leGNlbFRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLmV4Y2VsVGV4dCA9ICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5leGNlbFRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZXhjZWxUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kZWxldGVUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKTtcclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5pc1dpZGdldExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5hcHBDb25maWcgPSB0aGlzLmFwcENvbmZpZztcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8gPSB3aWRnZXRJbmZvO1xyXG4gICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnQ2hhbmdlcyA9IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhmYWxzZSk7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci53aWRnZXRJbmZvLndpZGdldE5hbWUgPSB3aWRnZXRJbmZvLndpZGdldE5hbWU7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5nbG9iYWxGaWx0ZXIgPSB0aGlzLmdsb2JhbEZpbHRlcjtcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLmRhc2hib2FyZEluZm8gPSBtZS5kYXNoYm9hcmRJbmZvO1xyXG4gICAgICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQubG9hZENvbnRlbnQod2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRMb2NrKHdpZGdldENvbmZpZ0ZpbHRlci5jb25maWcpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldERvd25sb2FkSWNvbigpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXI7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCd3aWRnZXRpbml0aWF0ZWQnICsgd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkLCBoYW5kbGVyKTtcclxuICAgICAgICB0aGlzLmN0bFdpZGdldC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMud2lkZ2V0RWxlbWVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipUbyBzZXQgRGVmYXVsdCBTdGF0ZSBmb3IgdGhlIHdpZGdldCB3aGVuIGl0IGlzIG5vdCBjb25maWd1cmVkICovXHJcbiAgc2V0Tm90Q29uZmlndXJlZFN0YXRlKHdpZGdldEluZm86IElXaWRnZXRJbmZvLCBmb3JjZUVuYWJsZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoKHdpZGdldEluZm8uc2hvd0RlZmF1bHRTdGF0ZSAmJiAod2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyA9PSBcIlwiIHx8IE9iamVjdC5rZXlzKEpTT04ucGFyc2Uod2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZykpLmxlbmd0aCA9PSAwKSkgfHwgKGZvcmNlRW5hYmxlKSkge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy53aWRnZXRFbXB0eVN0YXRlID0gV2lkZ2V0Vmlld1N0YXRlLmVtcHR5Q29uZmlnLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy53aWRnZXRFbXB0eVN0YXRlID0gJyc7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlRvIGNvbmZpZ3VyZSBlbXB0eSBzdGF0ZSBmb3IgdGhlIHdpZGdldCAgKi9cclxuICBzZXRFbXB0eVN0YXRlKHdpZGdldFN0YXRlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmhlaWdodCA9PSAxIHx8IHRoaXMud2lkdGggPT0gMSlcclxuICAgICAgdGhpcy5pc0twaVZpZXcgPSB0cnVlXHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuaXNLcGlWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLndpZGdldEVtcHR5U3RhdGUgPSB3aWRnZXRTdGF0ZS53aWRnZXRWaWV3U3RhdGU7XHJcbiAgICB0aGlzLmlzR2xvYmFsRmlsdGVyQXBwbGllZCA9IHdpZGdldFN0YXRlLmlzR2xvYmFsRmlsdGVyQXBwbGllZDtcclxuICAgIGlmICh3aWRnZXRTdGF0ZSAhPSBXaWRnZXRWaWV3U3RhdGUubm9ybWFsKSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHN3aXRjaCAod2lkZ2V0U3RhdGUpIHtcclxuICAgICAgY2FzZSBXaWRnZXRWaWV3U3RhdGUuZW1wdHlDb25maWc6XHJcbiAgICAgICAgdGhpcy5zZXROb3RDb25maWd1cmVkU3RhdGUodGhpcy5kYXRhLndpZGdldEluZm8sIHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdpZGdldFZpZXdTdGF0ZS5lbXB0eURhdGE6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgV2lkZ2V0Vmlld1N0YXRlLmVycm9yOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlnQ2hhbmdlcyhjb25maWdDaGFuZ2VkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGxldCBjb25maWdDaGFuZ2VzID0gPEljb25maWdDaGFuZ2VzPntcclxuICAgICAgaXNDb25maWdVcGRhdGVkOiBjb25maWdDaGFuZ2VkLFxyXG4gICAgICB1cGRhdGVkQ29uZmlnUHJvcGVydHk6IFtdXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uZmlnQ2hhbmdlcztcclxuICB9XHJcblxyXG4gIC8qKiBUbyByZWZyZXNoIHdpZGdldCBvbiBpbnB1dCBjb25maWcgY2hhbmdlcyAqL1xyXG4gIGFzeW5jIHJlZnJlc2hXaWRnZXQod2lkZ2V0SW5mbzogSVdpZGdldEluZm8sIGNvbmZpZ0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5XaWRnZXREaXNwbGF5TmFtZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi4nICsgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0VGl0bGUsIHRydWUpO1xyXG4gICAgd2lkZ2V0SW5mby5yb3dIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgdGhpcy5zZXROb3RDb25maWd1cmVkU3RhdGUod2lkZ2V0SW5mbyk7XHJcbiAgICBsZXQgd2lkZ2V0Q29udGFpbmVyQ29udGV4dCA9IHRoaXM7XHJcblxyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlciA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgY29uZmlnOiB3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnLFxyXG4gICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMuZ2xvYmFsRmlsdGVyLFxyXG4gICAgICBhcHBDb25maWc6IHRoaXMuYXBwQ29uZmlnLFxyXG4gICAgICB3aWRnZXRJbmZvOiB3aWRnZXRJbmZvLFxyXG4gICAgICBjb25maWdDaGFuZ2VzOiB0aGlzLmdldENvbmZpZ0NoYW5nZXMoY29uZmlnQ2hhbmdlZClcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2lkZ2V0Q29udGFpbmVyQ29udGV4dC5pc1dpZGdldExvYWRlZCkge1xyXG4gICAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIHR5cGVvZiAodGhpcy53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcikgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIod2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgICAgfVxyXG4gICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LndpZGdldEVsZW1lbnQubG9hZENvbnRlbnQod2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgICAgYXdhaXQgdGhpcy5zZXRMb2NrKHdpZGdldENvbmZpZ0ZpbHRlci5jb25maWcpO1xyXG4gICAgICBhd2FpdCB0aGlzLnNldERvd25sb2FkSWNvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG1vdXNlT3ZlcihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnRvb2xUaXBWYWx1ZSA9ICcgJztcclxuICAgIHRoaXMudG9vbFRpcFdpZHRoID0gJzBweCc7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChlbGVtZW50Lm9mZnNldFdpZHRoIDwgZWxlbWVudC5zY3JvbGxXaWR0aCkge1xyXG4gICAgICB0aGlzLnRvb2xUaXBWYWx1ZSA9IGVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgICB0aGlzLnRvb2xUaXBXaWR0aCA9ICczMDBweCc7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50b29sVGlwV2lkdGggPSAnMHB4JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0TG9jayhjb25maWc6IHN0cmluZykge1xyXG4gICAgdGhpcy5sb2NrVGVtcGxhdGVJbmZvID0gdGhpcy53aWRnZXRFbGVtZW50LmxvYWRMb2NrSW5mbygpO1xyXG4gICAgdmFyIGNvbmZpZ09iajogYW55O1xyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICBjb25maWdPYmogPSBKU09OLnBhcnNlKGNvbmZpZyk7XHJcbiAgICAgIGlmIChjb25maWdPYmogJiYgY29uZmlnT2JqLkxvY2tzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmIChjb25maWdPYmouTG9ja3MuSXNEYXRlTG9ja2VkIHx8IGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVzTG9ja2VkIHx8IGNvbmZpZ09iai5Mb2Nrcy5Jc1BhcnRpY2lwYW50TG9ja2VkIHx8IGNvbmZpZ09iai5Mb2Nrcy5Jc1NvdXJjZUxvY2tlZCkge1xyXG4gICAgICAgICAgdGhpcy5sb2NrRGV0YWlscyA9IFtdO1xyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzRGF0ZXNMb2NrZWQpXHJcbiAgICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGF0ZVJhbmdlJykpO1xyXG5cclxuICAgICAgICAgIGlmIChjb25maWdPYmouTG9ja3MuSXNQYXJ0aWNpcGFudExvY2tlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRpdmlzaW9uT3JHcm91cG9yU2l0ZScpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb25maWdPYmouTG9ja3MuSXNTb3VyY2VMb2NrZWQpXHJcbiAgICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGF0YVN0cmVhbScpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvY2tEZXRhaWxzID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0RG93bmxvYWRJY29uKCkge1xyXG4gICAgbGV0IGRvd25sb2FkVHlwZSA9IGF3YWl0IHRoaXMud2lkZ2V0RWxlbWVudC5nZXREb3dubG9hZFR5cGUoKTtcclxuICAgIHRoaXMuZG93bmxvYWRJY29uVHlwZSA9IGRvd25sb2FkVHlwZTtcclxuICAgIHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dFeGNlbGwgPSB0cnVlO1xyXG4gICAgaWYgKGRvd25sb2FkVHlwZSAhPSBSQURvd25sb2FkVHlwZS5Ob25lKSB7XHJcbiAgICAgIHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMuaXNXaWRnZXRNZ21udCAmJiAhdGhpcy5kZXRhaWxQYWdlVXJsKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U2V0dGluZ3NMaW5rID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG93bmxvYWRUeXBlID09IFJBRG93bmxvYWRUeXBlLkNoYXJ0KSB7XHJcbiAgICAgIHRoaXMuaXNDaGFydERvd25sb2FkVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvd25sb2FkVHlwZSA9PSBSQURvd25sb2FkVHlwZS5HcmlkKSB7XHJcbiAgICAgIHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG93bmxvYWRUeXBlID09IFJBRG93bmxvYWRUeXBlLlN0YXRpc3RpY3MpIHtcclxuICAgICAgdGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNob3dFeGNlbGwgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb3dubG9hZEljb25DbGlja2VkKHR5cGU6IHN0cmluZykge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJDU1ZcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5DU1YpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUE5HXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uUE5HKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlBERlwiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLlBERik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJTVkdcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5TVkcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiSlBFR1wiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLkpQRUcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVNZW51KCkge1xyXG4gICAgalF1ZXJ5KCcjcmEtZGItd2lkZ2V0LW1lbnUnKS5yZW1vdmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tWaXNpdExpbmtWaXNpYmxpdHkoKSB7XHJcbiAgICBsZXQgaXNWaXNpdEFwcGxpY2FibGUgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiB0eXBlb2YgdGhpcy53aWRnZXRFbGVtZW50LmdldFZpc2l0TGlua1Zpc2liaWxpdHlTdGF0dXMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBpc1Zpc2l0QXBwbGljYWJsZSA9IHRoaXMud2lkZ2V0RWxlbWVudC5nZXRWaXNpdExpbmtWaXNpYmlsaXR5U3RhdHVzKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNWaXNpdEFwcGxpY2FibGU7XHJcbiAgfVxyXG5cclxuICAvKipTaG93IGRyb3Bkb3duIG9uIGdlYXIgaWNvbiBjbGljayAgKi9cclxuICBwdWJsaWMgc2hvd0Ryb3BEb3duKGU6IGFueSkge1xyXG4gICAgdGhpcy5zZXREb3dubG9hZEljb24oKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuXHJcbiAgICAgIGxldCB0YXJnZXRQb3MgPSBlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgbGV0IHN0eWxlOiBzdHJpbmcgPSBcInBvc2l0aW9uOmZpeGVkO3RvcDpcIiArICh0YXJnZXRQb3MueSArIDE1KSArICdweCcgKyAnO2xlZnQ6JyArIChlLnBhZ2VYIC0gMTIyKSArICdweDt6LWluZGV4OjEwMDA7JztcclxuICAgICAgbGV0IGh0bWwgPSB0aGlzLmdldENvbnRlbnh0SHRtbChzdHlsZSk7XHJcblxyXG4gICAgICBqUXVlcnkoaHRtbCkuYXBwZW5kVG8oJ2JvZHknKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzV2lkZ2V0TWdtbnQpIHtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRWRpdFdpZGdldCcsIHRoaXMuZWRpdFdpZGdldCk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0NvcHlXaWRnZXQnLCB0aGlzLmNvcHlXaWRnZXQpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NNb3ZlV2lkZ2V0JywgdGhpcy5tb3ZlV2lkZ2V0KTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djV2lkZ2V0RGVsZXRlJywgdGhpcy5kZWxldGVXaWRnZXQpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBjdXN0b21QYWdlUGFyYW1zID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLmRhdGEud2lkZ2V0SW5mbyAmJiB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncykge1xyXG4gICAgICAgIHRoaXMud2lkZ2V0U2V0dGluZ3MgPSB0aGlzLmdldFBhcnNlZENvbmZpZyh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVBhcmFtcyB8fCB0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VVUkwpIHtcclxuICAgICAgICAgIGN1c3RvbVBhZ2VQYXJhbXMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCh0aGlzLmRldGFpbFBhZ2VVcmwgfHwgY3VzdG9tUGFnZVBhcmFtcykgJiYgdGhpcy5jaGVja1Zpc2l0TGlua1Zpc2libGl0eSgpKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y1Zpc2l0V2lkZ2V0JywgdGhpcy52aXNpdFBhZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRQbmcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdQTkcnKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRKcGcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdKUEVHJyk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkUGRmJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnUERGJyk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkU3ZnJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnU1ZHJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlICYmIHRoaXMuc2hvd0V4Y2VsbCkge1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NEb3dubG9hZEV4Y2VsJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnQ1NWJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYS1kYi13aWRnZXQtbWVudScpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93Lm1vdXNlT3ZlcldpZGdldE1lbnUgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhLWRiLXdpZGdldC1tZW51JykuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgpID0+IHtcclxuICAgICAgICB3aW5kb3cubW91c2VPdmVyV2lkZ2V0TWVudSA9IGZhbHNlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF3aW5kb3cuZ3JpZHN0ZXJJdGVtRW50ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRFdmVudExpc3RlbmVyKGlkOiBzdHJpbmcsIGV2ZW50OiBhbnksIHBhcmFtcz86IGFueSkge1xyXG4gICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIGV2ZW50LmNhbGwodGhpcywgcGFyYW1zKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvbnRlbnh0SHRtbChzdHlsZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgaHRtbDogc3RyaW5nID0gJzxkaXYgaWQ9XCJyYS1kYi13aWRnZXQtbWVudVwiJyArICdzdHlsZT1cIicgKyBzdHlsZSArICdcIiBjbGFzcz1cImRvd25sb2FkLWNvbnRlbnQgZHJvcGRvd24tY29udGVudCB3aWRnZXQtY29uZmlnLWl0ZW0gZHJvcGRvd24tY2xpY2tcIiBzdHlsZT1cInotaW5kZXg6IDEwMDI7XCI+JztcclxuXHJcbiAgICBsZXQgc2V0dGluZ3MgPSAnJztcclxuICAgIGlmICh0aGlzLmlzV2lkZ2V0TWdtbnQpIHtcclxuICAgICAgaWYgKCF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzIHx8ICF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzLmhpZGVFZGl0KVxyXG4gICAgICAgIHNldHRpbmdzICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NFZGl0V2lkZ2V0JywgJ2ZhbCBmYS1lZGl0JywgdGhpcy5lZGl0VGV4dCk7XHJcbiAgICAgIGlmICghdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncyB8fCAhdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncy5oaWRlQ29weSlcclxuICAgICAgICBzZXR0aW5ncyArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djQ29weVdpZGdldCcsICdmYWwgZmEtY29weScsIHRoaXMuY29weVRleHQpO1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MgfHwgIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MuaGlkZU1vdmUpXHJcbiAgICAgICAgc2V0dGluZ3MgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y01vdmVXaWRnZXQnLCAnZmFsIGZhLWFycm93cy1hbHQnLCB0aGlzLm1vdmVUZXh0KTtcclxuICAgIH1cclxuICAgIGxldCBjdXN0b21QYWdlUGFyYW1zID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8gJiYgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy53aWRnZXRTZXR0aW5ncyA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKTtcclxuICAgICAgaWYgKHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVBhcmFtcyB8fCB0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VVUkwpIHtcclxuICAgICAgICBjdXN0b21QYWdlUGFyYW1zID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzIHx8ICF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzLmhpZGVWaXNpdFBhZ2UgJiYgKHRoaXMuZGV0YWlsUGFnZVVybCB8fCBjdXN0b21QYWdlUGFyYW1zKSAmJiB0aGlzLmNoZWNrVmlzaXRMaW5rVmlzaWJsaXR5KCkpIHtcclxuICAgICAgc2V0dGluZ3MgKz0gJzxhIHN0eWxlPVwibWF4LWhlaWdodDogMzBweDthbGlnbi1pdGVtczogY2VudGVyO2FsaWduLWNvbnRlbnQ6IGNlbnRlcjsgZGlzcGxheTogZmxleDtcIiBpZD1cIndjVmlzaXRXaWRnZXRcIj4nO1xyXG4gICAgICBzZXR0aW5ncyArPSAnPGkgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDRweDtmb250LXNpemU6IDI3cHggIWltcG9ydGFudDtcIiBjbGFzcz1cImZhbCBmYS1hbmdsZS1yaWdodFwiPjwvaT4gJztcclxuICAgICAgc2V0dGluZ3MgKz0gJzxzcGFuIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAxMXB4O21hcmdpbi10b3A6IDJweDtcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogNnB4O1wiPic7XHJcbiAgICAgIHNldHRpbmdzICs9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi52aXNpdHBhZ2UnKTtcclxuICAgICAgc2V0dGluZ3MgKz0gJzwvc3Bhbj48L2E+JztcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncyB8fCAhdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncy5oaWRlVmlzaXRQYWdlICYmICh0aGlzLmRldGFpbFBhZ2VVcmwgJiYgdGhpcy5jaGVja1Zpc2l0TGlua1Zpc2libGl0eSgpKSB8fCB0aGlzLmlzV2lkZ2V0TWdtbnQpIHtcclxuICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT1cImNvbG9yOiAjOUZBMEE0O2ZvbnQtc2l6ZTogMTJweDtwYWRkaW5nLXRvcDogOHB4O3BhZGRpbmctbGVmdDogMTJweDtcIj4nO1xyXG4gICAgICBodG1sICs9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5zZXR0aW5ncycpICsgJzwvZGl2Pic7XHJcbiAgICAgIGh0bWwgKz0gc2V0dGluZ3M7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy5nZXRIcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSkge1xyXG4gICAgICBpZiAodGhpcy5zaG93RXhjZWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGV0YWlsUGFnZVVybCB8fCB0aGlzLmlzV2lkZ2V0TWdtbnQpXHJcbiAgICAgICAgICBodG1sICs9ICc8c3BhbiBzdHlsZT1cImNvbG9yOiAjOUZBMEE0O2ZvbnQtc2l6ZTogMTJweDtcIj4nO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGh0bWwgKz0gJzxzcGFuIHN0eWxlPVwiY29sb3I6ICM5RkEwQTQ7Zm9udC1zaXplOiAxMnB4O3BhZGRpbmctdG9wOjVweDtkaXNwbGF5OmJsb2NrO1wiPic7XHJcblxyXG4gICAgICAgIGh0bWwgKz0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRvd25sb2FkcycpO1xyXG4gICAgICAgIGh0bWwgKz0gJzwvc3Bhbj4nO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0NoYXJ0RG93bmxvYWRWaXNpYmxlKSB7XHJcbiAgICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT1cInBhZGRpbmctdG9wOiAxMHB4O1wiIGNsYXNzPVwiY2hhcnREb3dubG9hZFwiPic7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRQbmcnLCAnZmFsIGZhLWZpbGUtaW1hZ2UnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ucG5nJykpO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkSnBnJywgJ2ZhbCBmYS1maWxlLWltYWdlJywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmpwZWcnKSk7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRQZGYnLCAnZmFsIGZhLWZpbGUtcGRmJywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnBkZicpKTtcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFN2ZycsICdmYWwgZmEtZmlsZS1hbHQnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uc3ZnJykpO1xyXG4gICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlICYmIHRoaXMuc2hvd0V4Y2VsbCkge1xyXG4gICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJncmlkRG93bmxvYWRcIj4nO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkRXhjZWwnLCAnZmFsIGZhLWRvd25sb2FkJywgdGhpcy5leGNlbFRleHQpO1xyXG4gICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSAmJiB0aGlzLmlzV2lkZ2V0TWdtbnQgJiYgdGhpcy5zaG93RXhjZWxsKSB7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy5nZXRIcigpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNXaWRnZXRNZ21udCAmJiAhdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncyB8fCAhdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncy5oaWRlRGVsZXRlKSB7XHJcbiAgICAgIGh0bWwgKz0gJzxhIGlkPVwid2NXaWRnZXREZWxldGVcIj48aSBjbGFzcz1cImZhbCBmYS10aW1lc1wiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAzcHg7Y29sb3I6IHJlZDtcIj48L2k+PHNwYW4+JztcclxuICAgICAgaHRtbCArPSB0aGlzLmRlbGV0ZVRleHQ7XHJcbiAgICAgIGh0bWwgKz0gJzwvc3Bhbj48L2E+JztcclxuICAgIH1cclxuXHJcbiAgICBodG1sICs9ICc8L2Rpdj4nO1xyXG4gICAgcmV0dXJuIGh0bWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEhyKCkge1xyXG4gICAgcmV0dXJuICc8aHIgY2xhc3M9XCJoclwiIHN0eWxlPVwibWFyZ2luLXRvcDogNXB4O21hcmdpbi1ib3R0b206IDVweDtcIj4nO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRIdG1sRm9yQnV0dG9uKGlkOiBzdHJpbmcsIGZvbnRDbGFzczogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpIHtcclxuICAgIGxldCBodG1sID0gJzxhIGlkPVwiJyArIGlkICsgJ1wiPjxpIHN0eWxlPVwid2lkdGg6MTZweFwiIGNsYXNzPVwiJyArIGZvbnRDbGFzcyArICdcIj48L2k+IDxzcGFuIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA2cHg7XCI+JztcclxuICAgIGh0bWwgKz0gdGV4dDtcclxuICAgIGh0bWwgKz0gJzwvc3Bhbj48L2E+JztcclxuICAgIHJldHVybiBodG1sO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZ2V0UGFyc2VkQ29uZmlnKGNvbmZpZzogYW55KSB7XHJcbiAgICBsZXQgcGFyc2VkQ29uZmlnOiBhbnk7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBwYXJzZWRDb25maWcgPSBKU09OLnBhcnNlKGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIHtcclxuICAgICAgICAgIHBhcnNlZENvbmZpZyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyc2VkQ29uZmlnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBsYXlXaWRnZXRTZXR0aW5ncyhzZXR0aW5nczogYW55KSB7XHJcbiAgICBpZiAoc2V0dGluZ3MuTm9QYWRkaW5nKVxyXG4gICAgICB0aGlzLm5vUGFkZGluZyA9IHRydWVcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5ub1BhZGRpbmcgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRJbmFwcGxpY2FibGVGaWx0ZXJzKGRhdGE6IGFueSwgaW5zdGFuY2VJZDogYW55KSB7XHJcbiAgICB2YXIgd2lkZ2V0RGF0YTogYW55ID0ge307XHJcbiAgICB0aGlzLmluYXBwbGljYWJsZUZpbHRlcnMgPSBbXTtcclxuICAgIHdpZGdldERhdGEuaW5zdGFuY2VJZCA9IGluc3RhbmNlSWQ7XHJcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50ID09ICdkYXRlUmFuZ2UnKVxyXG4gICAgICAgICAgdGhpcy5pbmFwcGxpY2FibGVGaWx0ZXJzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRhdGVSYW5nZScpKTtcclxuICAgICAgICBlbHNlIGlmIChlbGVtZW50ID09ICdwYXJ0aWNpcGFudCcpIHtcclxuICAgICAgICAgIHRoaXMuaW5hcHBsaWNhYmxlRmlsdGVycy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EaXZpc2lvbkdyb3VwJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtZW50ID09ICdzb3VyY2UnKVxyXG4gICAgICAgICAgdGhpcy5pbmFwcGxpY2FibGVGaWx0ZXJzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRhdGFTdHJlYW0nKSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5pbmFwcGxpY2FibGVGaWx0ZXJzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB3aWRnZXREYXRhLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHdpZGdldERhdGEuZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlQXBwbGllZEZpbHRlcnMuZW1pdCh3aWRnZXREYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuUG9wdXAodGl0bGU6IGFueSwgZGF0YTogYW55LCBmb290ZXI6IGFueSwgdHlwZTogYW55LCB0ZW1wbGF0ZTogYW55ID0gdW5kZWZpbmVkKSB7XHJcbiAgICBsZXQgcHJvcHM6IGFueSA9IHt9O1xyXG4gICAgaWYgKHR5cGUgPT0gJ2lubmFwbGljYWJsZScgJiYgdGhpcy5iYW5Qb3B1cERpdilcclxuICAgICAgcHJvcHMuZWxlbWVudCA9IHRoaXMuYmFuUG9wdXBEaXYubmF0aXZlRWxlbWVudDtcclxuICAgIGlmICh0eXBlID09ICdsb2NrJyAmJiB0aGlzLmxvY2tQb3B1cERpdilcclxuICAgICAgcHJvcHMuZWxlbWVudCA9IHRoaXMubG9ja1BvcHVwRGl2Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBwcm9wcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgcHJvcHMuZGF0YSA9IGRhdGE7XHJcbiAgICBwcm9wcy5mb290ZXIgPSBmb290ZXI7XHJcbiAgICBpZiAodGVtcGxhdGUpXHJcbiAgICAgIHByb3BzLnRlbXBsYXRlID0gdGVtcGxhdGU7XHJcbiAgICB0aGlzLmN1cnJlbnRDb21wb25lbnQgPSB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ29tcG9uZW50KExvY2tUb29sdGlwLCBkb2N1bWVudC5ib2R5LCBwcm9wcyk7XHJcbiAgICB0aGlzLnBvcHVwSW5zdGFuY2UgPSA8YW55PnRoaXMuY3VycmVudENvbXBvbmVudC5pbnN0YW5jZTtcclxuICB9XHJcbiAgcHVibGljIGNsb3NlUG9wdXAoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50Q29tcG9uZW50KVxyXG4gICAgICB0aGlzLnBvcHVwSW5zdGFuY2UucmVtb3ZlTWUodGhpcy5jdXJyZW50Q29tcG9uZW50KTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
834
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS13aWRnZXQtY29udGFpbmVyL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeE0sT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQWdELGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQStDLE1BQU0sK0JBQStCLENBQUM7QUFDak4sT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBU25FLElBQWEsaUJBQWlCLEdBQTlCLE1BQWEsaUJBQWlCO0lBd0Y1QixZQUFvQixnQkFBb0MsRUFDOUMsVUFBOEIsRUFDOUIsZ0JBQW9DLEVBQ3BDLE1BQWMsRUFDZCxR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LENBQUM7O2lEQUFnQjtBQUNaO0lBQTFCLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQzs7eURBQXdCO0FBQ3ZCO0lBQTFCLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQzs7eURBQTZCO0FBRTdDO0lBQVQsTUFBTSxFQUFFOzt3REFBNEM7QUFDM0M7SUFBVCxNQUFNLEVBQUU7OytEQUEyQztBQWNwRDtJQURDLEtBQUssQ0FBQyxhQUFhLENBQUM7OzttREFHcEI7QUF0RlUsaUJBQWlCO0lBSjdCLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxxQkFBcUI7UUFDL0IsdXpIQUFtRDtLQUNwRCxDQUFDOzZDQXlGc0Msa0JBQWtCO1FBQ2xDLGtCQUFrQjtRQUNaLGtCQUFrQjtRQUM1QixNQUFNO1FBQ0osZUFBZTtRQUNmLFNBQVM7UUFDRSxtQkFBbUI7UUFDNUIsVUFBVTtHQS9GckIsaUJBQWlCLENBdXpCN0I7U0F2ekJZLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBTaW1wbGVDaGFuZ2UsIE9uRGVzdHJveSwgTmdab25lLCBSZW5kZXJlcjIsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJhRGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZEV2ZW50QnVzIH0gZnJvbSAnLi4vcmEuZGFzaGJhcmQuZXZlbnQuYnVzJztcclxuaW1wb3J0IHsgUkFFdmVudCwgUkFFdmVudEtleSB9IGZyb20gJy4uL3JhLmV2ZW50LmVudW0nO1xyXG5pbXBvcnQgeyBJQXBwQ29uZmlnLCBJV2lkZ2V0Q29uZmlnRmlsdGVyLCBJV2lkZ2V0SW5mbywgUkFEb3dubG9hZFR5cGUsIFJBRG93bmxvYWRPcHRpb24sIFJhV2lkZ2V0bG9ja1N0YXR1cywgV2lkZ2V0Vmlld1N0YXRlLCBJY29uZmlnQ2hhbmdlcywgSUJ1bGtBY3Rpb24sIElEYXNoYm9hcmRJbmZvIH0gZnJvbSAnQHNjaG5laWRlcmVzcy93aWRnZXRmcmFtZXdvcmsnO1xyXG5pbXBvcnQgeyBOZ3hVaUxvYWRlclNlcnZpY2UgfSBmcm9tICduZ3gtdWktbG9hZGVyJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1ub3RpZmllcic7XHJcbmltcG9ydCB7IFJBVHJhbnNsYXRlU2VydmljZSwgUkFQZXJtaXNzaW9uU2VydmljZSwgRG9tU2VydmljZSB9IGZyb20gJ0BzY2huZWlkZXJlc3MvcmEtY29tbW9uJztcclxuaW1wb3J0IHsgTG9ja1Rvb2x0aXAgfSBmcm9tICcuL2xvY2stdG9vbHRpcC9sb2NrLnRvb2x0aXAuY29tcG9uZW50J1xyXG5cclxuZGVjbGFyZSB2YXIgalF1ZXJ5OiBhbnk7XHJcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyYS13aWRnZXQtY29udGFpbmVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJBV2lkZ2V0Q29udGFpbmVyIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyBzaG93UGFuZWw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgaXNXaWRnZXRMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHdpZGdldEVsZW1lbnQ6IGFueTtcclxuICBwcml2YXRlIGNvbmZpZ0NoYW5nZWQ6IGFueTtcclxuICBwdWJsaWMgd2lkZ2V0SGVpZ2h0OiBudW1iZXI7XHJcbiAgcHVibGljIGxvY2tDbGFzczogc3RyaW5nID0gXCJ1bmxvY2tlZFwiO1xyXG4gIHB1YmxpYyBsb2NrU3RhdHVzOiBSYVdpZGdldGxvY2tTdGF0dXMgPSBSYVdpZGdldGxvY2tTdGF0dXMuVW5sb2NrZWQ7XHJcbiAgcHVibGljIGlzRG93bmxvYWRJY29uVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0NoYXJ0RG93bmxvYWRWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzR3JpZERvd25sb2FkVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkb3dubG9hZEljb25UeXBlOiBSQURvd25sb2FkVHlwZTtcclxuICBwdWJsaWMgZW5hYmxlVGl0bGVMaW5lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzR2xvYmFsRmlsdGVyQXBwbGllZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB0b29sVGlwVmFsdWU6IHN0cmluZyA9ICcgICc7XHJcbiAgcHVibGljIHRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGxvY2tEZXRhaWxzOiBhbnk7XHJcbiAgcHVibGljIGxvY2tUZW1wbGF0ZUluZm86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgcHVibGljIGVkaXRUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgY29weVRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBtb3ZlVG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGV4Y2VsVG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGRlbGV0ZVRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBlZGl0VGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGNvcHlUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgbW92ZVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBleGNlbFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBkZWxldGVUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZWRpdFRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGNvcHlUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBtb3ZlVG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgZXhjZWxUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBkZWxldGVUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyB3aWRnZXRTZXR0aW5nczogYW55O1xyXG4gIHB1YmxpYyBub1BhZGRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNNb3VzZUhvdmVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dTZXR0aW5nc0xpbms6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBpc0twaVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0V4Y2VsbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGhpZGVUaXRsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbmFwcGxpY2FibGVGaWx0ZXJzOiBhbnkgPSBbXTtcclxuICBwdWJsaWMgcG9wdXBJbnN0YW5jZTogTG9ja1Rvb2x0aXA7XHJcbiAgcHVibGljIGN1cnJlbnRDb21wb25lbnQ6IGFueTtcclxuXHJcbiAgcHVibGljIGxvY2tJY29uVGl0bGU6IGFueTtcclxuICBwdWJsaWMgbG9ja0ljb25Gb290ZXI6IGFueTtcclxuICBwdWJsaWMgaW5hcHBsaWNhYmxlSWNvblRpdGxlOiBhbnk7XHJcbiAgcHVibGljIGluYXBwbGljYWJsZUljb25Gb290ZXI6IGFueTtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2N0bFdpZGdldCcsIHsgc3RhdGljOiBmYWxzZSB9KSBjdGxXaWRnZXQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnd2lkZ2V0RHJvcGRvd24nLCB7IHN0YXRpYzogZmFsc2UgfSkgd2lkZ2V0RHJvcGRvd246IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgc2VhcmNoSW5wdXQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnd2NXcmFwcGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHdjV3JhcHBlcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdiYW5Qb3B1cERpdicsIHsgc3RhdGljOiBmYWxzZSB9KSBiYW5Qb3B1cERpdjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdsb2NrUG9wdXBEaXYnLCB7IHN0YXRpYzogZmFsc2UgfSkgbG9ja1BvcHVwRGl2OiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoJ3dpZGdldC1pbnN0YW5jZS1pZCcpIHdpZGdldEluc3RhbmNlSWQ6IG51bWJlcjtcclxuICBASW5wdXQoJ2dsb2JhbC1maWx0ZXInKSBnbG9iYWxGaWx0ZXI6IGFueTtcclxuICBASW5wdXQoJ2Rhc2hib2FyZC1pbmZvJykgZGFzaGJvYXJkSW5mbzogSURhc2hib2FyZEluZm87XHJcbiAgQElucHV0KCdkYXRhJykgZGF0YTogYW55O1xyXG4gIEBJbnB1dCgnZXZlbnQtYnVzJykgcmFEYXNoYm9hcmRFdmVudEJ1czogUkFEYXNoYm9hcmRFdmVudEJ1cztcclxuICBASW5wdXQoJ2FwcC1jb25maWcnKSBhcHBDb25maWc6IElBcHBDb25maWc7XHJcbiAgQElucHV0KCd3aWRnZXQtd2lkdGgnKSB3aWR0aDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LWhlaWdodCcpIGhlaWdodDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnZ3JpZC1jZWxsLWhlaWdodCcpIGdyaWRDZWxsSGVpZ2h0OiBudW1iZXI7XHJcbiAgQElucHV0KCdidWxrLWFjdGlvbi1kYXRhJykgYnVsa0FjdGlvbkRhdGE6IElCdWxrQWN0aW9uO1xyXG5cclxuICBAT3V0cHV0KCkgd2lkZ2V0RGVsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSB1cGRhdGVBcHBsaWVkRmlsdGVycyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBwdWJsaWMgbG9ja1RpdGxlOiBzdHJpbmc7XHJcbiAgcHVibGljIGlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHdpZGdldEVtcHR5U3RhdGU6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBkb21SZXNpemVkOiBib29sZWFuO1xyXG4gIHB1YmxpYyBsb2NrVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBsb2NrZWRGaWVsZHM6IGFueTtcclxuICBwdWJsaWMgZGV0YWlsUGFnZVVybDogc3RyaW5nO1xyXG4gIHB1YmxpYyBiYXNlVXJsOiBzdHJpbmc7XHJcbiAgcHVibGljIGlzV2lkZ2V0TWdtbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgV2lkZ2V0RGlzcGxheU5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgZW5hYmxlVGl0bGVMaW5lQWN0dWFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHdpZGdldEVsZW1lbnRIYW5kbGVyOiBhbnk7XHJcbiAgQElucHV0KCdkb20tcmVzaXplZCcpXHJcbiAgc2V0IHNldFJlc2l6ZWQocmVzaXplZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pbnZva2VXaWRnZXRSZXNpemVkRXZlbnQoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGFzaGJvYXJkU2VydmljZTogUmFEYXNoYm9hcmRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ3hTZXJ2aWNlOiBOZ3hVaUxvYWRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFJBVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIG5vdGlmaWVyOiBOb3RpZmllclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIHJhUGVybWlzc2lvblNlcnZpY2U6IFJBUGVybWlzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRvbVNlcnZpY2U6IERvbVNlcnZpY2UpIHtcclxuICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnY2xpY2snLCAoZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUpIHtcclxuICAgICAgICBpZiAoZS50YXJnZXQuY2xhc3NOYW1lICE9ICdmYWwgZmEtZWxsaXBzaXMtdiB3aWRnZXQtbWVudS1lbGxpcHNlJykge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLldpZGdldERpc3BsYXlOYW1lID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLicgKyB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRUaXRsZSwgdHJ1ZSk7XHJcbiAgICB0aGlzLmxvY2tJY29uVGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubG9ja2VkZmllbGRzJyk7XHJcbiAgICB0aGlzLmxvY2tJY29uRm9vdGVyID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmxvY2tlZGZpZWxkc2VkaXRpbmZvJyk7XHJcbiAgICB0aGlzLmluYXBwbGljYWJsZUljb25UaXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5JbmFwcGxpY2FibGVGaWx0ZXJzJyk7XHJcbiAgICB0aGlzLmluYXBwbGljYWJsZUljb25Gb290ZXIgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uSW5hcHBsaWNhYmxlRmlsdGVyc0Rlc2MnKTtcclxuICB9XHJcbiAgZ2V0IHdpZGdldFZpZXdTdGF0ZSgpIHsgcmV0dXJuIFdpZGdldFZpZXdTdGF0ZTsgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzV2lkZ2V0TWdtbnQgPSB0aGlzLnJhUGVybWlzc2lvblNlcnZpY2UuaGFzUGVybWlzc2lvbigncmEud2lkZ2V0bWFuYWdlbWVudCcpO1xyXG4gICAgaWYgKGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cyAmJiBjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlZCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmVXaXRoS2V5KFJBRXZlbnQuQ29uZmlnQ2hhbmdlZCwgUkFFdmVudEtleS5XaWRnZXRJbnN0YW5jZUlkLCB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkLnRvU3RyaW5nKCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ0NoYW5nZUV2ZW50SGFuZGxlcihlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCkge1xyXG4gICAgICBpZiAoY2hhbmdlcy5idWxrQWN0aW9uRGF0YSAmJiBjaGFuZ2VzLmJ1bGtBY3Rpb25EYXRhLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmJ1bGtBY3Rpb25EYXRhLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0RWxlbWVudC5idWxrQWN0aW9uQ2xpY2tlZCA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuYnVsa0FjdGlvbkNsaWNrZWQodGhpcy5idWxrQWN0aW9uRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjaGFuZ2VzLmdsb2JhbEZpbHRlciAmJiBjaGFuZ2VzLmdsb2JhbEZpbHRlci5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5nbG9iYWxGaWx0ZXIucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXNoYm9hcmRJbmZvLmN1cmF0ZWRGaWx0ZXJzKSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyT2JqID0gdGhpcy5nZXRQYXJzZWRDb25maWcodGhpcy5nbG9iYWxGaWx0ZXIpO1xyXG4gICAgICAgICAgaWYgKGZpbHRlck9iai5XaWRnZXRJbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkICE9IGZpbHRlck9iai5XaWRnZXRJbnN0YW5jZUlkKVxyXG4gICAgICAgICAgICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjaGFuZ2VzLndpZHRoICYmIGNoYW5nZXMud2lkdGguY3VycmVudFZhbHVlICE9IGNoYW5nZXMud2lkdGgucHJldmlvdXNWYWx1ZSB8fFxyXG4gICAgICAgIChjaGFuZ2VzLmhlaWdodCAmJiBjaGFuZ2VzLmhlaWdodC5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5oZWlnaHQucHJldmlvdXNWYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLmludm9rZVdpZGdldFJlc2l6ZWRFdmVudCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnZva2VXaWRnZXRSZXNpemVkRXZlbnQoKSB7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50KSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRFbGVtZW50LndpZGdldFJlc2l6ZWQgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGxldCBzaXplOiBhbnkgPSB7fTtcclxuICAgICAgICBzaXplLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xyXG4gICAgICAgIHNpemUud2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgIHNpemUuY2VsbEhlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LndpZGdldFJlc2l6ZWQoc2l6ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGVpZ2h0ID09IDEgfHwgdGhpcy53aWR0aCA9PSAxKVxyXG4gICAgICAgICAgdGhpcy5pc0twaVZpZXcgPSB0cnVlXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5pc0twaVZpZXcgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbW91c2VIb3Zlcihpc0hvdmVyID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5pc01vdXNlSG92ZXIgPSBpc0hvdmVyO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLndpZGdldEVsZW1lbnQuaG92ZXJTdGF0dXMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5ob3ZlclN0YXR1cyhpc0hvdmVyKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ3dpZGdldCBmcmFtZXdvcmsgb3V0ZGF0ZWQsIHBsZWFzZSB1cGRhdGUgdG8gdmVyc2lvbiAwLjAuOTYnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsICgpID0+IHtcclxuICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICAgIHRoaXMuY2xvc2VQb3B1cCgpO1xyXG4gICAgfSlcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbGV0IGl0ZW0gPSBqUXVlcnkodGhpcy53Y1dyYXBwZXIubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnZ3JpZHN0ZXItaXRlbScpO1xyXG4gICAgICBpdGVtLmJpbmQoJ21vdXNlZW50ZXInLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmdyaWRzdGVySXRlbUVudGVyID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpdGVtLmJpbmQoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmdyaWRzdGVySXRlbUVudGVyID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXdpbmRvdy5tb3VzZU92ZXJXaWRnZXRNZW51KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnQ2hhbmdlZClcclxuICAgICAgdGhpcy5jb25maWdDaGFuZ2VkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50SGFuZGxlciAmJiB0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLndpZGdldEluZm8gJiYgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCkge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dpZGdldGluaXRpYXRlZCcgKyB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkLCB0aGlzLndpZGdldEVsZW1lbnRIYW5kbGVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKiogVG8gRWRpdCBjdXJyZW50IHdpZGdldCBjb25maWd1cmF0aW9uKi9cclxuICBwdWJsaWMgZWRpdFdpZGdldCgpIHtcclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXI6IElXaWRnZXRDb25maWdGaWx0ZXI7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIHR5cGVvZiAodGhpcy53aWRnZXRFbGVtZW50LmdldENvbmZpZ0ZpbHRlcikgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBsZXQgY29uZmlnRGF0YSA9IHRoaXMud2lkZ2V0RWxlbWVudC5nZXRDb25maWdGaWx0ZXIoKTtcclxuICAgICAgaWYgKGNvbmZpZ0RhdGEpIHtcclxuICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIgPSBjb25maWdEYXRhO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAod2lkZ2V0Q29uZmlnRmlsdGVyKSB7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0RWRpdENsaWNrZWQsIHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlckRhdGEgPSB0aGlzLmdlbmVyYXRlQ29uZmlnRmlsdGVyKGZhbHNlKTtcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5XaWRnZXRFZGl0Q2xpY2tlZCwgd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogVG8gRGVsZXRlIGN1cnJlbnQgd2lkZ2V0IGZyb20gRE9NKi9cclxuICBwdWJsaWMgZGVsZXRlV2lkZ2V0KCkge1xyXG4gICAgbGV0IHdpZGdldENvbnRhaW5lckNvbnRleHQgPSB0aGlzO1xyXG4gICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5uZ3hTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LmRhc2hib2FyZFNlcnZpY2UuZGVsZXRlV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XHJcbiAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQubmd4U2VydmljZS5zdG9wKCk7XHJcbiAgICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LndpZGdldERlbGV0ZWQuZW1pdCh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICB0aGlzLnNldEluYXBwbGljYWJsZUZpbHRlcnModW5kZWZpbmVkLCB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5vdGlmaWVyLm5vdGlmeSgnZXJyb3InLCBcIiBcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0ZhaWxlZFRvUmVtb3ZlV2lkZ2V0JykgKyBcIiAgKFwiICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLicgKyB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRUaXRsZSwgdHJ1ZSkgKyBcIikhXCIpO1xyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gTW92ZSBvciBjaGFuZ2UgcG9zaXRpb24gaWYgY3VycmVudCB3aWRnZXQgY29udGFpbmVyKi9cclxuICBwdWJsaWMgbW92ZVdpZGdldCgpIHtcclxuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuTW92ZVdpZGdldCwgdGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgdGhpcy5zZXRJbmFwcGxpY2FibGVGaWx0ZXJzKHVuZGVmaW5lZCwgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAvLyB0aGlzLmRhc2hib2FyZFNlcnZpY2UubW92ZVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBDb3B5IEN1cnJlbnQgd2lkZ2V0IHdpdGggc2FtZSBjb25maWd1cmF0aW9uKi9cclxuICBwdWJsaWMgY29weVdpZGdldCgpIHtcclxuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuQ29weVdpZGdldCwgdGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgLy90aGlzLmRhc2hib2FyZFNlcnZpY2UuY29weVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB2aXNpdFBhZ2UoKSB7XHJcbiAgICB0aGlzLmJhc2VVcmwgPSB0aGlzLmdldEhvc3RVcmwoKTtcclxuICAgIGxldCB1cmwgPSB0aGlzLmJhc2VVcmwgKyB0aGlzLmRldGFpbFBhZ2VVcmw7XHJcbiAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8gJiYgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy53aWRnZXRTZXR0aW5ncyA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKTtcclxuICAgICAgaWYgKHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVBhcmFtcyB8fCB0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VVUkwpIHtcclxuICAgICAgICBsZXQgcGFyYW1zID0gdGhpcy53aWRnZXRFbGVtZW50LmdldFBhZ2VQYXJhbXNDbGlja2VkKCk7XHJcbiAgICAgICAgaWYgKHBhcmFtcykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFR5cGUgPT0gJ0FWIFdpZGdldCcgfHwgdGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlVVJMKVxyXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyBwYXJhbXM7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHVybCA9IHVybCArICc/JyArIHBhcmFtcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEhvc3RVcmwoKSB7XHJcbiAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICh3aW5kb3cubG9jYXRpb24ucG9ydCA/ICc6JyArIHdpbmRvdy5sb2NhdGlvbi5wb3J0IDogJycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbmZpZ0NoYW5nZUV2ZW50SGFuZGxlcih3aWRnZXRJbmZvKSB7XHJcbiAgICB0aGlzLmRhdGEud2lkZ2V0SW5mbyA9IHdpZGdldEluZm87XHJcbiAgICBpZiAodGhpcy5ncmlkQ2VsbEhlaWdodCA+IDApIHtcclxuICAgICAgdGhpcy5kYXRhLndpZGdldEluZm8ucm93SGVpZ2h0ID0gdGhpcy5ncmlkQ2VsbEhlaWdodDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIodGhpcy5nZW5lcmF0ZUNvbmZpZ0ZpbHRlcih0cnVlKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCd3aWRnZXQgZnJhbWV3b3JrIG91dGRhdGVkLCBwbGVhc2UgdXBkYXRlIHRvIHZlcnNpb24gMC4wLjk4Jyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8sIHRydWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVDb25maWdGaWx0ZXIoY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YSA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgYXBwQ29uZmlnOiB0aGlzLmFwcENvbmZpZyxcclxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlcixcclxuICAgICAgd2lkZ2V0SW5mbzogdGhpcy5kYXRhLndpZGdldEluZm8sXHJcbiAgICAgIGNvbmZpZzogdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhjb25maWdDaGFuZ2VkKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdpZGdldENvbmZpZ0ZpbHRlckRhdGE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqICBUbyBsb2FkIGV4dGVybmFsIGN1c3RvbSBlbGVtZW50IHRvIHRoZSB3aWRnZXQgY29udGFpbmVyKi9cclxuICBhc3luYyBsb2FkV2lkZ2V0KHdpZGdldEluZm86IGFueSkge1xyXG4gICAgd2lkZ2V0SW5mby5yb3dIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlciA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgY29uZmlnOiB3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnLFxyXG4gICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMuZ2xvYmFsRmlsdGVyLFxyXG4gICAgICBjb25maWdDaGFuZ2VzOiB0aGlzLmdldENvbmZpZ0NoYW5nZXMoZmFsc2UpXHJcbiAgICB9XHJcbiAgICBpZiAod2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLndpZGdldFNldHRpbmdzID0gdGhpcy5nZXRQYXJzZWRDb25maWcod2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICAgIHRoaXMuYXBwbGF5V2lkZ2V0U2V0dGluZ3ModGhpcy53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRldGFpbFBhZ2VVcmwgPSB3aWRnZXRJbmZvLmRldGFpbFBhZ2VVcmw7XHJcbiAgICBsZXQgbWUgPSB0aGlzO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmxvYWRFeHRlcm5hbFNjcmlwdCh3aWRnZXRJbmZvLnNjcmlwdFVybCwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh3aWRnZXRJbmZvKTtcclxuICAgICAgbGV0IGFwcE1vZHVsZSA9IHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldE5hbWU7XHJcbiAgICAgIGlmICh0aGlzLmRhdGEud2lkZ2V0SW5mby5hcHBsaWNhdGlvbk1vZHVsZSAmJiB0aGlzLmRhdGEud2lkZ2V0SW5mby5hcHBsaWNhdGlvbk1vZHVsZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgYXBwTW9kdWxlID0gdGhpcy5kYXRhLndpZGdldEluZm8uYXBwbGljYXRpb25Nb2R1bGU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmxvYWRUcmFuc2xhdGlvbnModGhpcy5hcHBDb25maWcuYXBwTWFuYWdlbWVudEJhc2VVcmwsIGFwcE1vZHVsZSwgZmFsc2UpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIG1lLndpZGdldEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHdpZGdldEluZm8uY3VzdG9tVGFnKTtcclxuICAgICAgICBtZS53aWRnZXRFbGVtZW50LnNldEF0dHJpYnV0ZShcIndpZGdldC1pbnN0YW5jZS1pZFwiLCB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG5cclxuICAgICAgICBsZXQgaGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdvbi13aWRnZXQtcmVzcG9uZCcsIChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB2YXIgdHlwZTogc3RyaW5nID0gZS5kZXRhaWwudHlwZTtcclxuICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ29uRGF0YUxvYWQnOlxyXG4gICAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwuZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dQYW5lbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dQYW5lbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ29uQ29uZmlnRWRpdENsaWNrZWQnOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmVkaXRXaWRnZXQoKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdvbkVuYWJsZURlZmF1bHRTdGF0ZSc6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RW1wdHlTdGF0ZShlLmRldGFpbC5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdvblNldFRpdGxlVW5kZXJsaW5lJzpcclxuICAgICAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsLmRhdGEgPT0gdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRpdGxlTGluZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRpdGxlTGluZSA9IHRoaXMuZW5hYmxlVGl0bGVMaW5lQWN0dWFsO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ29uV2lkZ2V0VGl0bGVIaWRkZW4nOlxyXG4gICAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwuZGF0YSA9PSB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZVRpdGxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZVRpdGxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnb25VcGRhdGVMb2NrRGF0YSc6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9jayhlLmRldGFpbC5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdvbkdsb2JhbEZpbHRlckFwcGxpY2FibGVDaGVjayc6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5hcHBsaWNhYmxlRmlsdGVycyhlLmRldGFpbC5kYXRhLCB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQudGl0bGVMaW5lRW5hYmxlZCkgIT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICBsZXQgdGl0bGVMaW5lRW5hYmxlZCA9IHRoaXMud2lkZ2V0RWxlbWVudC50aXRsZUxpbmVFbmFibGVkKCk7XHJcbiAgICAgICAgICAgICAgaWYgKHRpdGxlTGluZUVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlVGl0bGVMaW5lID0gdGl0bGVMaW5lRW5hYmxlZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlVGl0bGVMaW5lQWN0dWFsID0gdGl0bGVMaW5lRW5hYmxlZDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5lZGl0VGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0Jyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLmVkaXRUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0Jykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZWRpdFRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0Jyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5lZGl0VG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY29weVRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmNvcHknKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb3B5VGV4dCA9ICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvcHlUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29weVRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm1vdmVUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKVxyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlVGV4dCA9ICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpO1xyXG4gICAgICAgICAgICAgIHRoaXMubW92ZVRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmV4Y2VsVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMuZXhjZWxUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICB0aGlzLmV4Y2VsVG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5leGNlbFRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlJyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlJykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlVGV4dCA9ICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlVG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzV2lkZ2V0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLmFwcENvbmZpZyA9IHRoaXMuYXBwQ29uZmlnO1xyXG4gICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIud2lkZ2V0SW5mbyA9IHdpZGdldEluZm87XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5jb25maWdDaGFuZ2VzID0gdGhpcy5nZXRDb25maWdDaGFuZ2VzKGZhbHNlKTtcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8ud2lkZ2V0TmFtZSA9IHdpZGdldEluZm8ud2lkZ2V0TmFtZTtcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLmdsb2JhbEZpbHRlciA9IHRoaXMuZ2xvYmFsRmlsdGVyO1xyXG4gICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuZGFzaGJvYXJkSW5mbyA9IG1lLmRhc2hib2FyZEluZm87XHJcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5sb2FkQ29udGVudCh3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldExvY2sod2lkZ2V0Q29uZmlnRmlsdGVyLmNvbmZpZyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0RG93bmxvYWRJY29uKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcjtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ3dpZGdldGluaXRpYXRlZCcgKyB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQsIGhhbmRsZXIpO1xyXG4gICAgICAgIHRoaXMuY3RsV2lkZ2V0Lm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy53aWRnZXRFbGVtZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlRvIHNldCBEZWZhdWx0IFN0YXRlIGZvciB0aGUgd2lkZ2V0IHdoZW4gaXQgaXMgbm90IGNvbmZpZ3VyZWQgKi9cclxuICBzZXROb3RDb25maWd1cmVkU3RhdGUod2lkZ2V0SW5mbzogSVdpZGdldEluZm8sIGZvcmNlRW5hYmxlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICgod2lkZ2V0SW5mby5zaG93RGVmYXVsdFN0YXRlICYmICh3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnID09IFwiXCIgfHwgT2JqZWN0LmtleXMoSlNPTi5wYXJzZSh3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnKSkubGVuZ3RoID09IDApKSB8fCAoZm9yY2VFbmFibGUpKSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLndpZGdldEVtcHR5U3RhdGUgPSBXaWRnZXRWaWV3U3RhdGUuZW1wdHlDb25maWcudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLndpZGdldEVtcHR5U3RhdGUgPSAnJztcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqVG8gY29uZmlndXJlIGVtcHR5IHN0YXRlIGZvciB0aGUgd2lkZ2V0ICAqL1xyXG4gIHNldEVtcHR5U3RhdGUod2lkZ2V0U3RhdGU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaGVpZ2h0ID09IDEgfHwgdGhpcy53aWR0aCA9PSAxKVxyXG4gICAgICB0aGlzLmlzS3BpVmlldyA9IHRydWVcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5pc0twaVZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMud2lkZ2V0RW1wdHlTdGF0ZSA9IHdpZGdldFN0YXRlLndpZGdldFZpZXdTdGF0ZTtcclxuICAgIHRoaXMuaXNHbG9iYWxGaWx0ZXJBcHBsaWVkID0gd2lkZ2V0U3RhdGUuaXNHbG9iYWxGaWx0ZXJBcHBsaWVkO1xyXG4gICAgaWYgKHdpZGdldFN0YXRlICE9IFdpZGdldFZpZXdTdGF0ZS5ub3JtYWwpIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh3aWRnZXRTdGF0ZSkge1xyXG4gICAgICBjYXNlIFdpZGdldFZpZXdTdGF0ZS5lbXB0eUNvbmZpZzpcclxuICAgICAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgV2lkZ2V0Vmlld1N0YXRlLmVtcHR5RGF0YTpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBXaWRnZXRWaWV3U3RhdGUuZXJyb3I6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWdDaGFuZ2VzKGNvbmZpZ0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IGNvbmZpZ0NoYW5nZXMgPSA8SWNvbmZpZ0NoYW5nZXM+e1xyXG4gICAgICBpc0NvbmZpZ1VwZGF0ZWQ6IGNvbmZpZ0NoYW5nZWQsXHJcbiAgICAgIHVwZGF0ZWRDb25maWdQcm9wZXJ0eTogW11cclxuICAgIH1cclxuICAgIHJldHVybiBjb25maWdDaGFuZ2VzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIHJlZnJlc2ggd2lkZ2V0IG9uIGlucHV0IGNvbmZpZyBjaGFuZ2VzICovXHJcbiAgYXN5bmMgcmVmcmVzaFdpZGdldCh3aWRnZXRJbmZvOiBJV2lkZ2V0SW5mbywgY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLldpZGdldERpc3BsYXlOYW1lID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLicgKyB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRUaXRsZSwgdHJ1ZSk7XHJcbiAgICB3aWRnZXRJbmZvLnJvd0hlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh3aWRnZXRJbmZvKTtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcclxuXHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xyXG4gICAgICBjb25maWc6IHdpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5nbG9iYWxGaWx0ZXIsXHJcbiAgICAgIGFwcENvbmZpZzogdGhpcy5hcHBDb25maWcsXHJcbiAgICAgIHdpZGdldEluZm86IHdpZGdldEluZm8sXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhjb25maWdDaGFuZ2VkKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aWRnZXRDb250YWluZXJDb250ZXh0LmlzV2lkZ2V0TG9hZGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcih3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQud2lkZ2V0RWxlbWVudC5sb2FkQ29udGVudCh3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgICBhd2FpdCB0aGlzLnNldExvY2sod2lkZ2V0Q29uZmlnRmlsdGVyLmNvbmZpZyk7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2V0RG93bmxvYWRJY29uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW91c2VPdmVyKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMudG9vbFRpcFZhbHVlID0gJyAnO1xyXG4gICAgdGhpcy50b29sVGlwV2lkdGggPSAnMHB4JztcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKGVsZW1lbnQub2Zmc2V0V2lkdGggPCBlbGVtZW50LnNjcm9sbFdpZHRoKSB7XHJcbiAgICAgIHRoaXMudG9vbFRpcFZhbHVlID0gZWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICAgIHRoaXMudG9vbFRpcFdpZHRoID0gJzMwMHB4JztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnRvb2xUaXBXaWR0aCA9ICcwcHgnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzZXRMb2NrKGNvbmZpZzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmxvY2tUZW1wbGF0ZUluZm8gPSB0aGlzLndpZGdldEVsZW1lbnQubG9hZExvY2tJbmZvKCk7XHJcbiAgICB2YXIgY29uZmlnT2JqOiBhbnk7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGNvbmZpZ09iaiA9IEpTT04ucGFyc2UoY29uZmlnKTtcclxuICAgICAgaWYgKGNvbmZpZ09iaiAmJiBjb25maWdPYmouTG9ja3MgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzRGF0ZXNMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzUGFydGljaXBhbnRMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzU291cmNlTG9ja2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzID0gW107XHJcbiAgICAgICAgICBpZiAoY29uZmlnT2JqLkxvY2tzLklzRGF0ZUxvY2tlZCB8fCBjb25maWdPYmouTG9ja3MuSXNEYXRlc0xvY2tlZClcclxuICAgICAgICAgICAgdGhpcy5sb2NrRGV0YWlscy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EYXRlUmFuZ2UnKSk7XHJcblxyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc1BhcnRpY2lwYW50TG9ja2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGl2aXNpb25Pckdyb3Vwb3JTaXRlJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc1NvdXJjZUxvY2tlZClcclxuICAgICAgICAgICAgdGhpcy5sb2NrRGV0YWlscy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EYXRhU3RyZWFtJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9ja0RldGFpbHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXREb3dubG9hZEljb24oKSB7XHJcbiAgICBsZXQgZG93bmxvYWRUeXBlID0gYXdhaXQgdGhpcy53aWRnZXRFbGVtZW50LmdldERvd25sb2FkVHlwZSgpO1xyXG4gICAgdGhpcy5kb3dubG9hZEljb25UeXBlID0gZG93bmxvYWRUeXBlO1xyXG4gICAgdGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNDaGFydERvd25sb2FkVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0V4Y2VsbCA9IHRydWU7XHJcbiAgICBpZiAoZG93bmxvYWRUeXBlICE9IFJBRG93bmxvYWRUeXBlLk5vbmUpIHtcclxuICAgICAgdGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5pc1dpZGdldE1nbW50ICYmICF0aGlzLmRldGFpbFBhZ2VVcmwpIHtcclxuICAgICAgICB0aGlzLnNob3dTZXR0aW5nc0xpbmsgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb3dubG9hZFR5cGUgPT0gUkFEb3dubG9hZFR5cGUuQ2hhcnQpIHtcclxuICAgICAgdGhpcy5pc0NoYXJ0RG93bmxvYWRWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG93bmxvYWRUeXBlID09IFJBRG93bmxvYWRUeXBlLkdyaWQpIHtcclxuICAgICAgdGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb3dubG9hZFR5cGUgPT0gUkFEb3dubG9hZFR5cGUuU3RhdGlzdGljcykge1xyXG4gICAgICB0aGlzLmlzR3JpZERvd25sb2FkVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2hvd0V4Y2VsbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRvd25sb2FkSWNvbkNsaWNrZWQodHlwZTogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBcIkNTVlwiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLkNTVik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJQTkdcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5QTkcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUERGXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uUERGKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlNWR1wiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLlNWRyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJKUEVHXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uSlBFRyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZU1lbnUoKSB7XHJcbiAgICBqUXVlcnkoJyNyYS1kYi13aWRnZXQtbWVudScpLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1Zpc2l0TGlua1Zpc2libGl0eSgpIHtcclxuICAgIGxldCBpc1Zpc2l0QXBwbGljYWJsZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIHR5cGVvZiB0aGlzLndpZGdldEVsZW1lbnQuZ2V0VmlzaXRMaW5rVmlzaWJpbGl0eVN0YXR1cyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGlzVmlzaXRBcHBsaWNhYmxlID0gdGhpcy53aWRnZXRFbGVtZW50LmdldFZpc2l0TGlua1Zpc2liaWxpdHlTdGF0dXMoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpc1Zpc2l0QXBwbGljYWJsZTtcclxuICB9XHJcblxyXG4gIC8qKlNob3cgZHJvcGRvd24gb24gZ2VhciBpY29uIGNsaWNrICAqL1xyXG4gIHB1YmxpYyBzaG93RHJvcERvd24oZTogYW55KSB7XHJcbiAgICB0aGlzLnNldERvd25sb2FkSWNvbigpO1xyXG5cclxuICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG5cclxuICAgICAgbGV0IHRhcmdldFBvcyA9IGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICBsZXQgc3R5bGU6IHN0cmluZyA9IFwicG9zaXRpb246Zml4ZWQ7dG9wOlwiICsgKHRhcmdldFBvcy55ICsgMTUpICsgJ3B4JyArICc7bGVmdDonICsgKGUucGFnZVggLSAxMjIpICsgJ3B4O3otaW5kZXg6MTAwMDsnO1xyXG4gICAgICBsZXQgaHRtbCA9IHRoaXMuZ2V0Q29udGVueHRIdG1sKHN0eWxlKTtcclxuXHJcbiAgICAgIGpRdWVyeShodG1sKS5hcHBlbmRUbygnYm9keScpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NFZGl0V2lkZ2V0JywgdGhpcy5lZGl0V2lkZ2V0KTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djQ29weVdpZGdldCcsIHRoaXMuY29weVdpZGdldCk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y01vdmVXaWRnZXQnLCB0aGlzLm1vdmVXaWRnZXQpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NXaWRnZXREZWxldGUnLCB0aGlzLmRlbGV0ZVdpZGdldCk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGN1c3RvbVBhZ2VQYXJhbXMgPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKSB7XHJcbiAgICAgICAgdGhpcy53aWRnZXRTZXR0aW5ncyA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKTtcclxuICAgICAgICBpZiAodGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlUGFyYW1zIHx8IHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVVSTCkge1xyXG4gICAgICAgICAgY3VzdG9tUGFnZVBhcmFtcyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoKHRoaXMuZGV0YWlsUGFnZVVybCB8fCBjdXN0b21QYWdlUGFyYW1zKSAmJiB0aGlzLmNoZWNrVmlzaXRMaW5rVmlzaWJsaXR5KCkpIHtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djVmlzaXRXaWRnZXQnLCB0aGlzLnZpc2l0UGFnZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNDaGFydERvd25sb2FkVmlzaWJsZSkge1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NEb3dubG9hZFBuZycsIHRoaXMuZG93bmxvYWRJY29uQ2xpY2tlZCwgJ1BORycpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NEb3dubG9hZEpwZycsIHRoaXMuZG93bmxvYWRJY29uQ2xpY2tlZCwgJ0pQRUcnKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRQZGYnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdQREYnKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRTdmcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdTVkcnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgJiYgdGhpcy5zaG93RXhjZWxsKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkRXhjZWwnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdDU1YnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhLWRiLXdpZGdldC1tZW51JykuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcclxuICAgICAgICB3aW5kb3cubW91c2VPdmVyV2lkZ2V0TWVudSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmEtZGItd2lkZ2V0LW1lbnUnKS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5tb3VzZU92ZXJXaWRnZXRNZW51ID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXdpbmRvdy5ncmlkc3Rlckl0ZW1FbnRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEV2ZW50TGlzdGVuZXIoaWQ6IHN0cmluZywgZXZlbnQ6IGFueSwgcGFyYW1zPzogYW55KSB7XHJcbiAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgZXZlbnQuY2FsbCh0aGlzLCBwYXJhbXMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29udGVueHRIdG1sKHN0eWxlOiBzdHJpbmcpIHtcclxuICAgIGxldCBodG1sOiBzdHJpbmcgPSAnPGRpdiBpZD1cInJhLWRiLXdpZGdldC1tZW51XCInICsgJ3N0eWxlPVwiJyArIHN0eWxlICsgJ1wiIGNsYXNzPVwiZG93bmxvYWQtY29udGVudCBkcm9wZG93bi1jb250ZW50IHdpZGdldC1jb25maWctaXRlbSBkcm9wZG93bi1jbGlja1wiIHN0eWxlPVwiei1pbmRleDogMTAwMjtcIj4nO1xyXG5cclxuICAgIGxldCBzZXR0aW5ncyA9ICcnO1xyXG4gICAgaWYgKHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MgfHwgIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MuaGlkZUVkaXQpXHJcbiAgICAgICAgc2V0dGluZ3MgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0VkaXRXaWRnZXQnLCAnZmFsIGZhLWVkaXQnLCB0aGlzLmVkaXRUZXh0KTtcclxuICAgICAgaWYgKCF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzIHx8ICF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzLmhpZGVDb3B5KVxyXG4gICAgICAgIHNldHRpbmdzICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NDb3B5V2lkZ2V0JywgJ2ZhbCBmYS1jb3B5JywgdGhpcy5jb3B5VGV4dCk7XHJcbiAgICAgIGlmICghdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncyB8fCAhdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncy5oaWRlTW92ZSlcclxuICAgICAgICBzZXR0aW5ncyArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djTW92ZVdpZGdldCcsICdmYWwgZmEtYXJyb3dzLWFsdCcsIHRoaXMubW92ZVRleHQpO1xyXG4gICAgfVxyXG4gICAgbGV0IGN1c3RvbVBhZ2VQYXJhbXMgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmRhdGEud2lkZ2V0SW5mbyAmJiB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLndpZGdldFNldHRpbmdzID0gdGhpcy5nZXRQYXJzZWRDb25maWcodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgICBpZiAodGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlUGFyYW1zIHx8IHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVVSTCkge1xyXG4gICAgICAgIGN1c3RvbVBhZ2VQYXJhbXMgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MgfHwgIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MuaGlkZVZpc2l0UGFnZSAmJiAodGhpcy5kZXRhaWxQYWdlVXJsIHx8IGN1c3RvbVBhZ2VQYXJhbXMpICYmIHRoaXMuY2hlY2tWaXNpdExpbmtWaXNpYmxpdHkoKSkge1xyXG4gICAgICBzZXR0aW5ncyArPSAnPGEgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzMHB4O2FsaWduLWl0ZW1zOiBjZW50ZXI7YWxpZ24tY29udGVudDogY2VudGVyOyBkaXNwbGF5OiBmbGV4O1wiIGlkPVwid2NWaXNpdFdpZGdldFwiPic7XHJcbiAgICAgIHNldHRpbmdzICs9ICc8aSBzdHlsZT1cInBhZGRpbmctbGVmdDogNHB4O2ZvbnQtc2l6ZTogMjdweCAhaW1wb3J0YW50O1wiIGNsYXNzPVwiZmFsIGZhLWFuZ2xlLXJpZ2h0XCI+PC9pPiAnO1xyXG4gICAgICBzZXR0aW5ncyArPSAnPHNwYW4gc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDExcHg7bWFyZ2luLXRvcDogMnB4O1wiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA2cHg7XCI+JztcclxuICAgICAgc2V0dGluZ3MgKz0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnZpc2l0cGFnZScpO1xyXG4gICAgICBzZXR0aW5ncyArPSAnPC9zcGFuPjwvYT4nO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzIHx8ICF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzLmhpZGVWaXNpdFBhZ2UgJiYgKHRoaXMuZGV0YWlsUGFnZVVybCAmJiB0aGlzLmNoZWNrVmlzaXRMaW5rVmlzaWJsaXR5KCkpIHx8IHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPVwiY29sb3I6ICM5RkEwQTQ7Zm9udC1zaXplOiAxMnB4O3BhZGRpbmctdG9wOiA4cHg7cGFkZGluZy1sZWZ0OiAxMnB4O1wiPic7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnNldHRpbmdzJykgKyAnPC9kaXY+JztcclxuICAgICAgaHRtbCArPSBzZXR0aW5ncztcclxuICAgICAgaHRtbCArPSB0aGlzLmdldEhyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNob3dFeGNlbGwpIHtcclxuICAgICAgICBpZiAodGhpcy5kZXRhaWxQYWdlVXJsIHx8IHRoaXMuaXNXaWRnZXRNZ21udClcclxuICAgICAgICAgIGh0bWwgKz0gJzxzcGFuIHN0eWxlPVwiY29sb3I6ICM5RkEwQTQ7Zm9udC1zaXplOiAxMnB4O1wiPic7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaHRtbCArPSAnPHNwYW4gc3R5bGU9XCJjb2xvcjogIzlGQTBBNDtmb250LXNpemU6IDEycHg7cGFkZGluZy10b3A6NXB4O2Rpc3BsYXk6YmxvY2s7XCI+JztcclxuXHJcbiAgICAgICAgaHRtbCArPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZG93bmxvYWRzJyk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9zcGFuPic7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPVwicGFkZGluZy10b3A6IDEwcHg7XCIgY2xhc3M9XCJjaGFydERvd25sb2FkXCI+JztcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFBuZycsICdmYWwgZmEtZmlsZS1pbWFnZScsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5wbmcnKSk7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRKcGcnLCAnZmFsIGZhLWZpbGUtaW1hZ2UnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uanBlZycpKTtcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFBkZicsICdmYWwgZmEtZmlsZS1wZGYnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ucGRmJykpO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkU3ZnJywgJ2ZhbCBmYS1maWxlLWFsdCcsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5zdmcnKSk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgJiYgdGhpcy5zaG93RXhjZWxsKSB7XHJcbiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cImdyaWREb3dubG9hZFwiPic7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRFeGNlbCcsICdmYWwgZmEtZG93bmxvYWQnLCB0aGlzLmV4Y2VsVGV4dCk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlICYmIHRoaXMuaXNXaWRnZXRNZ21udCAmJiB0aGlzLnNob3dFeGNlbGwpIHtcclxuICAgICAgaHRtbCArPSB0aGlzLmdldEhyKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1dpZGdldE1nbW50ICYmICF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzIHx8ICF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzLmhpZGVEZWxldGUpIHtcclxuICAgICAgaHRtbCArPSAnPGEgaWQ9XCJ3Y1dpZGdldERlbGV0ZVwiPjxpIGNsYXNzPVwiZmFsIGZhLXRpbWVzXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDNweDtjb2xvcjogcmVkO1wiPjwvaT48c3Bhbj4nO1xyXG4gICAgICBodG1sICs9IHRoaXMuZGVsZXRlVGV4dDtcclxuICAgICAgaHRtbCArPSAnPC9zcGFuPjwvYT4nO1xyXG4gICAgfVxyXG5cclxuICAgIGh0bWwgKz0gJzwvZGl2Pic7XHJcbiAgICByZXR1cm4gaHRtbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SHIoKSB7XHJcbiAgICByZXR1cm4gJzxociBjbGFzcz1cImhyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiA1cHg7bWFyZ2luLWJvdHRvbTogNXB4O1wiPic7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEh0bWxGb3JCdXR0b24oaWQ6IHN0cmluZywgZm9udENsYXNzOiBzdHJpbmcsIHRleHQ6IHN0cmluZykge1xyXG4gICAgbGV0IGh0bWwgPSAnPGEgaWQ9XCInICsgaWQgKyAnXCI+PGkgc3R5bGU9XCJ3aWR0aDoxNnB4XCIgY2xhc3M9XCInICsgZm9udENsYXNzICsgJ1wiPjwvaT4gPHNwYW4gc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDZweDtcIj4nO1xyXG4gICAgaHRtbCArPSB0ZXh0O1xyXG4gICAgaHRtbCArPSAnPC9zcGFuPjwvYT4nO1xyXG4gICAgcmV0dXJuIGh0bWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJzZWRDb25maWcoY29uZmlnOiBhbnkpIHtcclxuICAgIGxldCBwYXJzZWRDb25maWc6IGFueTtcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHBhcnNlZENvbmZpZyA9IEpTT04ucGFyc2UoY29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgcGFyc2VkQ29uZmlnID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJzZWRDb25maWc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjb25maWc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGxheVdpZGdldFNldHRpbmdzKHNldHRpbmdzOiBhbnkpIHtcclxuICAgIGlmIChzZXR0aW5ncy5Ob1BhZGRpbmcpXHJcbiAgICAgIHRoaXMubm9QYWRkaW5nID0gdHJ1ZVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm5vUGFkZGluZyA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEluYXBwbGljYWJsZUZpbHRlcnMoZGF0YTogYW55LCBpbnN0YW5jZUlkOiBhbnkpIHtcclxuICAgIHZhciB3aWRnZXREYXRhOiBhbnkgPSB7fTtcclxuICAgIHRoaXMuaW5hcHBsaWNhYmxlRmlsdGVycyA9IFtdO1xyXG4gICAgd2lkZ2V0RGF0YS5pbnN0YW5jZUlkID0gaW5zdGFuY2VJZDtcclxuICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICBkYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgPT0gJ2RhdGVSYW5nZScpXHJcbiAgICAgICAgICB0aGlzLmluYXBwbGljYWJsZUZpbHRlcnMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGF0ZVJhbmdlJykpO1xyXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQgPT0gJ3BhcnRpY2lwYW50Jykge1xyXG4gICAgICAgICAgdGhpcy5pbmFwcGxpY2FibGVGaWx0ZXJzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRpdmlzaW9uR3JvdXAnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQgPT0gJ3NvdXJjZScpXHJcbiAgICAgICAgICB0aGlzLmluYXBwbGljYWJsZUZpbHRlcnMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGF0YVN0cmVhbScpKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLmluYXBwbGljYWJsZUZpbHRlcnMucHVzaChlbGVtZW50KTtcclxuICAgICAgfSk7XHJcbiAgICAgIHdpZGdldERhdGEuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgd2lkZ2V0RGF0YS5kYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVBcHBsaWVkRmlsdGVycy5lbWl0KHdpZGdldERhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5Qb3B1cCh0aXRsZTogYW55LCBkYXRhOiBhbnksIGZvb3RlcjogYW55LCB0eXBlOiBhbnksIHRlbXBsYXRlOiBhbnkgPSB1bmRlZmluZWQpIHtcclxuICAgIGxldCBwcm9wczogYW55ID0ge307XHJcbiAgICBpZiAodHlwZSA9PSAnaW5uYXBsaWNhYmxlJyAmJiB0aGlzLmJhblBvcHVwRGl2KVxyXG4gICAgICBwcm9wcy5lbGVtZW50ID0gdGhpcy5iYW5Qb3B1cERpdi5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKHR5cGUgPT0gJ2xvY2snICYmIHRoaXMubG9ja1BvcHVwRGl2KVxyXG4gICAgICBwcm9wcy5lbGVtZW50ID0gdGhpcy5sb2NrUG9wdXBEaXYubmF0aXZlRWxlbWVudDtcclxuICAgIHByb3BzLnRpdGxlID0gdGl0bGU7XHJcbiAgICBwcm9wcy5kYXRhID0gZGF0YTtcclxuICAgIHByb3BzLmZvb3RlciA9IGZvb3RlcjtcclxuICAgIGlmICh0ZW1wbGF0ZSlcclxuICAgICAgcHJvcHMudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcclxuICAgIHRoaXMuY3VycmVudENvbXBvbmVudCA9IHRoaXMuZG9tU2VydmljZS5hcHBlbmRDb21wb25lbnQoTG9ja1Rvb2x0aXAsIGRvY3VtZW50LmJvZHksIHByb3BzKTtcclxuICAgIHRoaXMucG9wdXBJbnN0YW5jZSA9IDxhbnk+dGhpcy5jdXJyZW50Q29tcG9uZW50Lmluc3RhbmNlO1xyXG4gIH1cclxuICBwdWJsaWMgY2xvc2VQb3B1cCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRDb21wb25lbnQpXHJcbiAgICAgIHRoaXMucG9wdXBJbnN0YW5jZS5yZW1vdmVNZSh0aGlzLmN1cnJlbnRDb21wb25lbnQpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|