ng-easycommerce 0.0.617 → 0.0.618
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/README.md +2 -0
- package/bundles/ng-easycommerce.umd.js +4 -0
- package/bundles/ng-easycommerce.umd.js.map +1 -1
- package/bundles/ng-easycommerce.umd.min.js +1 -1
- package/bundles/ng-easycommerce.umd.min.js.map +1 -1
- package/esm2015/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +4 -1
- package/esm2015/lib/services/products/product-detail.service.js +2 -1
- package/esm5/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +4 -1
- package/esm5/lib/services/products/product-detail.service.js +2 -1
- package/fesm2015/ng-easycommerce.js +4 -0
- package/fesm2015/ng-easycommerce.js.map +1 -1
- package/fesm5/ng-easycommerce.js +4 -0
- package/fesm5/ng-easycommerce.js.map +1 -1
- package/lib/ec-component/widgets-ec/price-ec/price-ec.component.d.ts +1 -0
- package/ng-easycommerce.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -48,6 +48,9 @@ __decorate([
|
|
|
48
48
|
__decorate([
|
|
49
49
|
Input()
|
|
50
50
|
], PriceEcComponent.prototype, "saleprice", void 0);
|
|
51
|
+
__decorate([
|
|
52
|
+
Input()
|
|
53
|
+
], PriceEcComponent.prototype, "priceWithoutTaxes", void 0);
|
|
51
54
|
__decorate([
|
|
52
55
|
Input()
|
|
53
56
|
], PriceEcComponent.prototype, "priceSize", void 0);
|
|
@@ -95,4 +98,4 @@ PriceEcComponent = __decorate([
|
|
|
95
98
|
})
|
|
96
99
|
], PriceEcComponent);
|
|
97
100
|
export { PriceEcComponent };
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2UtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC93aWRnZXRzLWVjL3ByaWNlLWVjL3ByaWNlLWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQVFoRixJQUFhLGdCQUFnQixHQUE3QixNQUFhLGdCQUFpQixTQUFRLGVBQWU7SUF3QmpELFlBQW1CLGVBQWdDLEVBQVUsb0JBQTBDO1FBQ25HLEtBQUssRUFBRSxDQUFDO1FBRE8sb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVUseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQW5COUYsY0FBUyxHQUFZLElBQUksQ0FBQztRQUcxQixlQUFVLEdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLFVBQUssR0FBdUMsRUFBRSxDQUFDO1FBQy9DLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQVVsQyxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBSTlCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFOztZQUN6RCxJQUFJLENBQUMsYUFBYSxTQUFHLE9BQU8sMENBQUUsYUFBYSxDQUFDO1lBQzVDLElBQUksQ0FBQyxTQUFTLGVBQUcsT0FBTywwQ0FBRSxTQUFTLHVDQUFJLEtBQUssRUFBQSxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFDdkIsSUFBSSxDQUFDLGFBQWE7WUFDbEIsQ0FBQyxJQUFJLENBQUMsU0FBUztZQUNmLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUztZQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMxQixDQUFDO0NBQ0osQ0FBQTs7WUFwQnVDLGVBQWU7WUFBZ0Msb0JBQW9COztBQXRCOUY7SUFBUixLQUFLLEVBQUU7K0NBQWU7QUFDZDtJQUFSLEtBQUssRUFBRTttREFBbUI7QUFDbEI7SUFBUixLQUFLLEVBQUU7MkRBQTJCO0FBQzFCO0lBQVIsS0FBSyxFQUFFO21EQUEyQjtBQUMxQjtJQUFSLEtBQUssRUFBRTt5REFBeUI7QUFDeEI7SUFBUixLQUFLLEVBQUU7bURBQW1CO0FBQ2xCO0lBQVIsS0FBSyxFQUFFO29EQUF3QjtBQUN2QjtJQUFSLEtBQUssRUFBRTsrQ0FBZ0Q7QUFDL0M7SUFBUixLQUFLLEVBQUU7MkRBQW9DO0FBQ25DO0lBQVIsS0FBSyxFQUFFO3dEQUFpQztBQUdoQztJQUFSLEtBQUssRUFBRTs2REFBdUM7QUFDdEM7SUFBUixLQUFLLEVBQUU7aUVBQTJDO0FBQzFDO0lBQVIsS0FBSyxFQUFFO21FQUE2QztBQUM1QztJQUFSLEtBQUssRUFBRTt1RUFBaUQ7QUFDaEQ7SUFBUixLQUFLLEVBQUU7MkRBQXFDO0FBQ3BDO0lBQVIsS0FBSyxFQUFFO29FQUE4QztBQW5CN0MsZ0JBQWdCO0lBTDVCLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxjQUFjO1FBQ3hCLDI1SEFBc0M7O0tBRXpDLENBQUM7R0FDVyxnQkFBZ0IsQ0E0QzVCO1NBNUNZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJvZHVjdHMvcHJvZHVjdHMuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEhlbHBlciB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlcic7XHJcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2hhbm5lbC1jb25maWcuc2VydmljZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC1wcmljZS1lYycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJ3ByaWNlLWVjLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWydwcmljZS1lYy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcmljZUVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBASW5wdXQoKSBwcmljZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgc2FsZXByaWNlOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwcmljZVdpdGhvdXRUYXhlczogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcHJpY2VTaXplOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIGNsYXNzU3RyU3BhY2luZzogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgYmFzZVByaWNlOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSB0YXhlQW1vdW50OiBudW1iZXIgPSAwO1xyXG4gICAgQElucHV0KCkgdGF4ZXM6IHsgbmFtZTogc3RyaW5nLCBhbW91bnQ6IG51bWJlciB9W10gPSBbXTtcclxuICAgIEBJbnB1dCgpIHNob3dUYXhMZWdlbmRPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlVGF4SW5mbzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFRlbXBsYXRlcyBleHRlcm5vc1xyXG4gICAgQElucHV0KCkgY3VzdG9tUHJpY2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBJbnB1dCgpIGN1c3RvbVNhbGVQcmljZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQElucHV0KCkgY3VzdG9tU2ltcGxlUHJpY2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBJbnB1dCgpIGN1c3RvbVNpbXBsZVNhbGVQcmljZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQElucHV0KCkgY3VzdG9tVGF4VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBASW5wdXQoKSBjdXN0b21Pbmx5VGF4TGFiZWxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBwdWJsaWMgc2hvd1RheExlZ2VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhpZGVUYXhlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSwgcHJpdmF0ZSBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbENvbmZpZ1NlcnZpY2UuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKGNoYW5uZWwgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dUYXhMZWdlbmQgPSBjaGFubmVsPy5zaG93VGF4TGVnZW5kO1xyXG4gICAgICAgICAgICB0aGlzLmhpZGVUYXhlcyA9IGNoYW5uZWw/LmhpZGVUYXhlcyA/PyBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmVjT25Jbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNob3VsZFNob3dUYXhlcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGlzYWJsZVRheEluZm8gJiZcclxuICAgICAgICAgICAgdGhpcy5zaG93VGF4TGVnZW5kICYmXHJcbiAgICAgICAgICAgICF0aGlzLmhpZGVUYXhlcyAmJlxyXG4gICAgICAgICAgICAhIXRoaXMuYmFzZVByaWNlICYmXHJcbiAgICAgICAgICAgICEhdGhpcy50YXhlQW1vdW50O1xyXG4gICAgfVxyXG59Il19
|
|
@@ -169,6 +169,7 @@ let ProductDetailService = class ProductDetailService {
|
|
|
169
169
|
if (this.isReady()) {
|
|
170
170
|
asociated.stock = this.variants[0].stock;
|
|
171
171
|
asociated.price = this.variants[0].price.toString();
|
|
172
|
+
asociated.priceWithoutTaxes = this.variants[0].priceWithoutTaxes.toString() || undefined;
|
|
172
173
|
asociated.saleprice = this.variants[0].saleprice && this.variants[0].saleprice.toString() || undefined;
|
|
173
174
|
asociated.discount = ((_a = this.variants[0]) === null || _a === void 0 ? void 0 : _a.discount) || undefined;
|
|
174
175
|
asociated.properties = this.variants[0].properties ? this.beautifyProperties(this.variants[0].properties) : undefined;
|
|
@@ -429,4 +430,4 @@ ProductDetailService = __decorate([
|
|
|
429
430
|
Injectable()
|
|
430
431
|
], ProductDetailService);
|
|
431
432
|
export { ProductDetailService };
|
|
432
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0LWRldGFpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBeUIsTUFBTSxNQUFNLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHdEQsSUFBYSxvQkFBb0IsR0FBakMsTUFBYSxvQkFBb0I7SUFlN0IsWUFDWSxlQUFnQyxFQUFVLFdBQXdCLEVBQVUsYUFBMkIsRUFDdkcsU0FBb0IsRUFBUyxnQkFBa0MsRUFBUyxlQUFnQztRQUR4RyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQ3ZHLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBUyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBZjVHLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsRUFBRSxDQUFDLENBQUM7UUFDbEQsbUJBQWMsR0FBRyxJQUFJ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QWNKLENBQUE7O1lBamJnQyxlQUFlO1lBQXVCLFdBQVc7WUFBeUIsWUFBWTtZQUM1RixTQUFTO1lBQTJCLGdCQUFnQjtZQUEwQixlQUFlOztBQWpCM0csb0JBQW9CO0lBRGhDLFVBQVUsRUFBRTtHQUNBLG9CQUFvQixDQWljaEM7U0FqY1ksb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIHBhcnRpdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQcm9kdWN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wcm9kdWN0JztcclxuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi9wcm9kdWN0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi9jYXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29yZS5jb25zdHMnO1xyXG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi9hbmFseXRpY3Muc2VydmljZSc7XHJcbmltcG9ydCB7IFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3BhcmFtc0ludGVyZmFjZXMvcGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCc7XHJcbmltcG9ydCB7IEN1cnJlbmN5U2VydmljZSB9IGZyb20gJy4uL2N1cnJlbmN5LnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdERldGFpbFNlcnZpY2Uge1xyXG5cclxuICAgIHByaXZhdGUgcHJvZHVjdFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFByb2R1Y3Q+KHt9KTtcclxuICAgIHByaXZhdGUgb3B0aW9uc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xyXG4gICAgcHJpdmF0ZSBhc29jaWF0ZWREYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7IHByaWNlOiAnJywgc3RvY2s6IDAsIHBpY3R1cmU6ICcnIH0pO1xyXG5cclxuICAgIHByaXZhdGUgdmFyaWFudHMgPSBbXVxyXG5cclxuICAgIHB1YmxpYyBwcm9kdWN0JCA9IHRoaXMucHJvZHVjdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgb3B0aW9ucyQgPSB0aGlzLm9wdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGFzb2NpYXRlZERhdGEkID0gdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgY3VycmVudFRvdGFsQW1vdW50OiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGNyZWRpdEFtb3VudDogbnVtYmVyIHwgbnVsbDtcclxuICAgIHByaXZhdGUgcmVtYWluaW5nQ3JlZGl0czogbnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcHJvZHVjdHNTZXJ2aWNlOiBQcm9kdWN0c1NlcnZpY2UsIHByaXZhdGUgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLCBwcml2YXRlIHRvYXN0clNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNvbnN0YW50czogQ29uc3RhbnRzLCBwdWJsaWMgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSwgcHVibGljIGN1cnJlbmN5U2VydmljZTogQ3VycmVuY3lTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEBwYXJhbSBjb2RlIElkZW50aWZpY2Fkb3IgZGVsIHByb2R1Y3RvXHJcbiAgICAqIEBwYXJhbSB2YXJpYW50IEluZGljYSBzaSBzZSBlc3TDoSBzb2xpY2l0YW5kbyB1biBwcm9kdWN0byBwb3Igc3UgY29kaWdvLCBvIHBvciBlbCBjb2RpZ28gY29ycmVzcG9uZGllbnRlIGEgdW5hIGRlIHN1cyB2YXJpYW50ZXNcclxuICAgICogIFxyXG4gICAgKiBDYXJnYSBlbCBwcm9kdWN0byBzb2xpY2l0YWRvIGFzeW5jcm9uaWNhbWVudGUgc2luIHJlc3B1ZXN0YSBcclxuICAgICovXHJcbiAgICBsb2FkUHJvZHVjdCA9IChjb2RlLCB2YXJpYW50OiBib29sZWFuID0gZmFsc2UpID0+XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0c1NlcnZpY2UuZ2V0U3BlY2lmaWNQcm9kdWN0KGNvZGUsIHZhcmlhbnQpLnRvUHJvbWlzZSgpLnRoZW4oXHJcbiAgICAgICAgICAgIHJlcyA9PiB2YXJpYW50ID8gdGhpcy5pbml0aWFsaXplKHJlcywgY29kZSkgOiB0aGlzLmluaXRpYWxpemUocmVzKSxcclxuICAgICAgICAgICAgZXJyID0+IHRoaXMucHJvZHVjdFN1YmplY3QubmV4dChudWxsKVxyXG4gICAgICAgIClcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSBwcm9kdWN0X2lkIElkZW50aWZpY2Fkb3IgZGVsIHByb2R1Y3RvXHJcbiAgICAgKiBAcGFyYW0gdmFyaWFudCBJbmRpY2Egc2kgc2UgZXN0w6Egc29saWNpdGFuZG8gdW4gcHJvZHVjdG8gcG9yIHN1IGNvZGlnbywgbyBwb3IgZWwgY29kaWdvIGNvcnJlc3BvbmRpZW50ZSBhIHVuYSBkZSBzdXMgdmFyaWFudGVzXHJcbiAgICAgKiBAYXN5bmNcclxuICAgICAqICBcclxuICAgICAqIEEgZGlmZXJlbmNpYSBkZWwgbWV0b2RvIGxvYWRQcm9kdWN0LCBlc3RlIHJldG9ybmEgdW4gdmFsb3IgY3VhbmRvIHRlcm1pbmEgXHJcbiAgICAgKi9cclxuICAgIGdldFByb2R1Y3QgPSBhc3luYyAocHJvZHVjdF9pZCwgdmFyaWFudDogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJvZHVjdHNTZXJ2aWNlLmdldFNwZWNpZmljUHJvZHVjdChwcm9kdWN0X2lkLCB2YXJpYW50KS50b1Byb21pc2UoKTtcclxuICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQuZXJyb3IpIHRoaXMucHJvZHVjdFN1YmplY3QubmV4dChudWxsKTtcclxuICAgICAgICBlbHNlIHZhcmlhbnQgPyB0aGlzLmluaXRpYWxpemUocmVzdWx0LCBwcm9kdWN0X2lkKSA6IHRoaXMuaW5pdGlhbGl6ZShyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZSA9IChwcm9kdWN0LCB2YXJpYW50X2NvZGU/KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0U3ViamVjdC5uZXh0KHByb2R1Y3QpO1xyXG4gICAgICAgIHRoaXMub3B0aW9uc1N1YmplY3QubmV4dCh0aGlzLmdldE9wdGlvbnMoKSlcclxuICAgICAgICB2YXJpYW50X2NvZGUgPyB0aGlzLnVwZGF0ZVZhcmlhbnRzKHZhcmlhbnRfY29kZSkgOiB0aGlzLnVwZGF0ZVZhcmlhbnRzKCk7XHJcbiAgICAgICAgdGhpcy52YXJpYW50cy5sZW5ndGggJiYgdGhpcy5nZW5lcmF0ZUFzb2NpYXRlZERhdGFGcm9tVmFyaWFudHMoKTtcclxuICAgICAgICB0aGlzLmZldGNoQ2FydERhdGEoKVxyXG4gICAgICAgIC8vdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgndmlld19pdGVtJywgeyAuLi5wcm9kdWN0LCBjdXJyZW5jeTogdGhpcy5jb25zdGFudHMuY3VycmVuY3kuY29kZSB9KVxyXG4gICAgICAgIC8vIHZhcmlhbnRfY29kZSAmJiB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCd2aWV3X2l0ZW0nLCB7IC4uLnByb2R1Y3QsIGN1cnJlbmN5OiB0aGlzLmNvbnN0YW50cy5jdXJyZW5jeS5jb2RlIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UHJvZHVjdCA9IChwcm9kdWN0KSA9PiB0aGlzLmlzUHJvZHVjdFZhbGlkKHByb2R1Y3QpICYmIHRoaXMuaW5pdGlhbGl6ZShwcm9kdWN0KTtcclxuXHJcbiAgICBpc1JlYWR5ID0gKCkgPT4gdGhpcy52YXJpYW50cy5sZW5ndGggPT0gMTtcclxuXHJcbiAgICBzZXRPcHRpb24gPSAob3B0aW9uX2NvZGUsIG9wdGlvbl92YWx1ZSkgPT4ge1xyXG4gICAgICAgIGxldCBvcHRpb25zID0gdGhpcy5vcHRpb25zU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBsZXQgb3B0aW9uID0gb3B0aW9ucy5maW5kKGVsZW1lbnQgPT4gZWxlbWVudC5jb2RlID09IG9wdGlvbl9jb2RlKS52YWx1ZXMuZmluZCh2YWx1ZSA9PiB2YWx1ZS5uYW1lID09IG9wdGlvbl92YWx1ZSk7XHJcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gIW9wdGlvbi5zZWxlY3RlZDtcclxuICAgICAgICBvcHRpb25zLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LmNvZGUgPT0gb3B0aW9uX2NvZGUpLnZhbHVlcy5mb3JFYWNoKFxyXG4gICAgICAgICAgICB2YWx1ZSA9PiB7IGlmICh2YWx1ZS5uYW1lICE9IG9wdGlvbi5uYW1lKSB2YWx1ZS5zZWxlY3RlZCA9IGZhbHNlIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMub3B0aW9uc1N1YmplY3QubmV4dChvcHRpb25zKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZhcmlhbnRzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFyaWFudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBIYWJpbGl0YXIgdG9kb3MgbG9zIGJvdG9uZXMgY29uIGxhIGNsYXNlICdhZGRDYXJ0QnV0dG9uJ1xyXG4gICAgICAgICAgICBjb25zdCBzdWJtaXRCdXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFkZENhcnRCdXR0b24nKTtcclxuICAgICAgICAgICAgc3VibWl0QnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAoYnV0dG9uIGFzIEhUTUxCdXR0b25FbGVtZW50KS5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUFzb2NpYXRlZERhdGFGcm9tVmFyaWFudHMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnc2VsZWN0aW9uLW5vdC1hdmFpbGFibGUnKTtcclxuXHJcbiAgICAgICAgICAgIC8vIERlc2hhYmlsaXRhciB0b2RvcyBsb3MgYm90b25lcyBjb24gbGEgY2xhc2UgJ3N1Ym1pdC1idXR0b24nXHJcbiAgICAgICAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYWRkQ2FydEJ1dHRvbicpO1xyXG4gICAgICAgICAgICBzdWJtaXRCdXR0b25zLmZvckVhY2goYnV0dG9uID0+IHtcclxuICAgICAgICAgICAgICAgIChidXR0b24gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VQaWN0dXJlID0gKHBpY3R1cmUpID0+IHtcclxuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWU7XHJcbiAgICAgICAgZGF0YS5waWN0dXJlID0gcGljdHVyZTtcclxuICAgICAgICB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0Lm5leHQoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRXJyb3IgPSAoZXJyb3IpID0+IHtcclxuICAgICAgICAvLyBXaGF0aGV2ZXIgd2UgbmVlZCB0byBkbyB3aXRoIGVycm9yXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gYWdyZWdhL2FjdHVhbGl6YSB1biBpdGVtIGVuIGVsIGNhcnJpdG8gXHJcbiAgICAgKiBAcGFyYW0gcXVhbnRpdHkgY2FudGlkYWQgYSBhZ3JlZ2FyXHJcbiAgICAgKiBAcGFyYW0gdmFyaWFudF9jb2RlICoqKG9wY2lvbmFsKSoqIGNvZGlnbyBkZSBsYSB2YXJpYW50ZSBzZWxlY2Npb25hZGEgZGVsIHByb2R1Y3RvLlxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGFkZFRvQ2FydChxdWFudGl0eSwgdmFyaWFudF9jb2RlPzogc3RyaW5nKSB7XHJcbiAgICAgICAgcXVhbnRpdHkgPSBwYXJzZUludChxdWFudGl0eSk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy52YXJpYW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ2NhbnQtYnV5Jyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHByb2R1Y3Rfc2VsZWN0ZWQgPSBfLmNsb25lKHRoaXMucHJvZHVjdFN1YmplY3QudmFsdWUpO1xyXG5cclxuICAgICAgICBsZXQgdmFyaWFudDogYW55O1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHRoaXMudmFyaWFudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCduby12YXJpYW50cycpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUuc3RvY2sgPT0gMCA/XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jaycpIDpcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gdGhpcy52YXJpYW50c1swXVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFudF9jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IHRoaXMudmFyaWFudHMuZmluZCh2YXJpYW50ID0+IHZhcmlhbnQuY29kZSA9PT0gdmFyaWFudF9jb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCd2YXJpYW50cy1sZWZ0Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF2YXJpYW50KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUXVhbnRpdHkocXVhbnRpdHkpKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHByaWNlVG9WYWxpZGF0ZSA9IHByb2R1Y3Rfc2VsZWN0ZWQuc2FsZXByaWNlID8gcHJvZHVjdF9zZWxlY3RlZC5zYWxlcHJpY2UgKiBxdWFudGl0eSA6IHByb2R1Y3Rfc2VsZWN0ZWQucHJpY2UgKiBxdWFudGl0eTtcclxuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVQcmljZUFuZENyZWRpdHMocHJpY2VUb1ZhbGlkYXRlKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZFRvQ2FydCh0aGlzLm1ha2VBZmZvcmRhYmxlUHJvZHVjdChwcm9kdWN0X3NlbGVjdGVkKSwgcXVhbnRpdHksIHZhcmlhbnQuY29kZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcblxyXG4gICAgYWRkVG9DYXJ0UHJvbWlzZSA9IGFzeW5jIChxdWFudGl0eSkgPT4ge1xyXG4gICAgICAgIHF1YW50aXR5ID0gcGFyc2VJbnQocXVhbnRpdHkpO1xyXG4gICAgICAgIGlmICghdGhpcy52YXJpYW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICdjYW50LWJ1eScgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHByb2R1Y3Rfc2VsZWN0ZWQgPSBfLmNsb25lKHRoaXMucHJvZHVjdFN1YmplY3QudmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLnZhcmlhbnRzLmxlbmd0aCA+IDEgfHwgdGhpcy52YXJpYW50cy5sZW5ndGggPT0gMCB8fCB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlLnN0b2NrID09IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFudHMubGVuZ3RoID09IDApIHJldHVybiB7IGVycm9yOiB0cnVlLCBtZXNzYWdlOiAnbm8tdmFyaWFudHMnIH07XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmFyaWFudHMubGVuZ3RoID4gMSAmJiB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlLnN0b2NrID4gMCkgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICd2YXJpYW50cy1sZWZ0JyB9O1xyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnZhcmlhbnRzLmxlbmd0aCAhPSAwICYmIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUuc3RvY2sgPT0gMCkgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICdvdXQtb2Ytc3RvY2snIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy52YWxpZGF0ZVF1YW50aXR5KHF1YW50aXR5KSkgcmV0dXJuO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmNhcnRTZXJ2aWNlLmFkZFRvQ2FydFByb21pc2UodGhpcy5tYWtlQWZmb3JkYWJsZVByb2R1Y3QocHJvZHVjdF9zZWxlY3RlZCksIHF1YW50aXR5LCB0aGlzLnZhcmlhbnRzWzBdLmNvZGUpO1xyXG4gICAgICAgIHJldHVybiAocmVzdWx0ICYmICEocmVzdWx0LmVycm9yKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgZ2V0T3B0aW9ucyA9IChwcm9kdWN0X3JlY2VpdmVkPzogUHJvZHVjdCkgPT4ge1xyXG4gICAgICAgIGxldCBwcm9kdWN0ID0gcHJvZHVjdF9yZWNlaXZlZCB8fCB0aGlzLnByb2R1Y3RTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCBvcHRpb25zID0gW107XHJcbiAgICAgICAgcHJvZHVjdC5vcHRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMucHVzaCh0aGlzLnRvT3B0aW9uKGVsZW1lbnQpKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBvcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdG9PcHRpb24gPSAocHJlb3B0aW9uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZTogcHJlb3B0aW9uLmxhYmVsLFxyXG4gICAgICAgICAgICBjb2RlOiBwcmVvcHRpb24uY29kZSxcclxuICAgICAgICAgICAgdHlwZTogcHJlb3B0aW9uLnR5cGUsXHJcbiAgICAgICAgICAgIHZhbHVlczogcHJlb3B0aW9uLnZhbHVlcy5tYXAodmFsdWUgPT4gKHsgbmFtZTogdmFsdWUuY29kZSwgZGVzY3JpcHRpb246IHZhbHVlLm5hbWUsIGltYWdlOiB2YWx1ZS5pbWFnZSwgbW9iaWxlSW1hZ2U6IHZhbHVlLm1vYmlsZUltYWdlLCBzZWxlY3RlZDogZmFsc2UgfSkpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWFrZUFmZm9yZGFibGVQcm9kdWN0KHByb2R1Y3Rfc2VsZWN0ZWQ6IFByb2R1Y3QpIHtcclxuICAgICAgICBwcm9kdWN0X3NlbGVjdGVkLnByaWNlID0gcGFyc2VGbG9hdCh0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlLnByaWNlKTtcclxuICAgICAgICBwcm9kdWN0X3NlbGVjdGVkLnNhbGVwcmljZSA9IHBhcnNlRmxvYXQodGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZS5wcmljZSk7XHJcbiAgICAgICAgcHJvZHVjdF9zZWxlY3RlZC5vcHRpb25zID0ge307XHJcbiAgICAgICAgdGhpcy52YXJpYW50c1swXS5vcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHByb2R1Y3Rfc2VsZWN0ZWQub3B0aW9ucyA9IHsgLi4ucHJvZHVjdF9zZWxlY3RlZC5vcHRpb25zLCAuLi5vcHRpb24gfSlcclxuICAgICAgICByZXR1cm4gcHJvZHVjdF9zZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVZhcmlhbnRzID0gKGNvZGU/KSA9PiB7XHJcbiAgICAgICAgbGV0IHZhcmlhbnRzID0gdGhpcy5wcm9kdWN0U3ViamVjdC52YWx1ZS52YXJpYW50cztcclxuICAgICAgICBpZiAoIWNvZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zU3ViamVjdC52YWx1ZS5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb24udmFsdWVzLmZvckVhY2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50cyA9IHZhcmlhbnRzLmZpbHRlcih2YXJpYW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYW50Lm9wdGlvbnMuc29tZSh2YXJpYW50X29wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvcHRpb24uY29kZSBpbiB2YXJpYW50X29wdGlvbiAmJiB2YXJpYW50X29wdGlvbltvcHRpb24uY29kZV0gPT0gdmFsdWUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyaWFudHMgPSB2YXJpYW50cy5maWx0ZXIodmFyaWFudCA9PiB2YXJpYW50LmNvZGUgPT0gY29kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFyaWFudHMgPSB2YXJpYW50cztcclxuICAgICAgICBjb2RlICYmIHRoaXMudXBkYXRlT3B0aW9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlT3B0aW9ucyA9ICgpID0+IHtcclxuICAgICAgICBsZXQgeyBvcHRpb25zIH0gPSB0aGlzLnZhcmlhbnRzLmxlbmd0aCAmJiB0aGlzLnZhcmlhbnRzWzBdO1xyXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiBPYmplY3Qua2V5cyhvcHRpb24pLmZvckVhY2goa2V5ID0+IHRoaXMuc2V0T3B0aW9uKGtleSwgb3B0aW9uW2tleV0pKSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlQXNvY2lhdGVkRGF0YUZyb21WYXJpYW50cyA9ICgpID0+IHtcclxuICAgICAgICBsZXQgYXNvY2lhdGVkOiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5pc1JlYWR5KCkpIHtcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnN0b2NrID0gdGhpcy52YXJpYW50c1swXS5zdG9ja1xyXG4gICAgICAgICAgICBhc29jaWF0ZWQucHJpY2UgPSB0aGlzLnZhcmlhbnRzWzBdLnByaWNlLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnNhbGVwcmljZSA9IHRoaXMudmFyaWFudHNbMF0uc2FsZXByaWNlICYmIHRoaXMudmFyaWFudHNbMF0uc2FsZXByaWNlLnRvU3RyaW5nKCkgfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBhc29jaWF0ZWQuZGlzY291bnQgPSB0aGlzLnZhcmlhbnRzWzBdPy5kaXNjb3VudCB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5wcm9wZXJ0aWVzID0gdGhpcy52YXJpYW50c1swXS5wcm9wZXJ0aWVzID8gdGhpcy5iZWF1dGlmeVByb3BlcnRpZXModGhpcy52YXJpYW50c1swXS5wcm9wZXJ0aWVzKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnVuaXF1ZUV4dGVybmFsQ29kZSA9IHRoaXMudmFyaWFudHNbMF0/LnVuaXF1ZUV4dGVybmFsQ29kZSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5tdWx0aXBsZVF1YW50aXR5ID0gdGhpcy52YXJpYW50c1swXT8ubXVsdGlwbGVRdWFudGl0eSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnByaWNlID0gdGhpcy5jcmF0ZVByaWNlKClcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnNhbGVwcmljZSA9IHRoaXMuY3JhdGVTYWxlUHJpY2UoKVxyXG4gICAgICAgICAgICBhc29jaWF0ZWQuc3RvY2sgPSAodGhpcy52YXJpYW50cy5tYXAodmFyaWFudCA9PiB2YXJpYW50LnN0b2NrKSkucmVkdWNlKChhLCBiKSA9PiBhICsgYilcclxuICAgICAgICAgICAgYXNvY2lhdGVkLmRpc2NvdW50ID0gdGhpcy5jcmF0ZURpc2NvdW50KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICgnaW1hZ2VzJyBpbiB0aGlzLnZhcmlhbnRzWzBdICYmIHRoaXMudmFyaWFudHNbMF0uaW1hZ2VzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgID8gYXNvY2lhdGVkLnBpY3R1cmUgPSB0aGlzLnZhcmlhbnRzWzBdLmltYWdlc1swXVxyXG4gICAgICAgICAgICA6IGFzb2NpYXRlZC5waWN0dXJlID0gKHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUucGljdHVyZSB8fCB0aGlzLnByb2R1Y3RTdWJqZWN0LnZhbHVlLnBpY3R1cmVzZGVmYXVsdFswXSk7XHJcblxyXG5cclxuICAgICAgICBhc29jaWF0ZWQubWF4aW11bUFtb3VudCA9IHRoaXMudmFyaWFudHNbMF0/Lm1heGltdW1BbW91bnQgfHwgMFxyXG4gICAgICAgIGFzb2NpYXRlZC5taW5pbXVtQW1vdW50ID0gdGhpcy52YXJpYW50c1swXT8ubWluaW11bUFtb3VudCB8fCAwXHJcblxyXG4gICAgICAgIGFzb2NpYXRlZC5tYXhpbXVtSXRlbXNRdWFudGl0eSA9IHRoaXMudmFyaWFudHNbMF0/LnN0b2NrID4gMCAmJiAnbWF4aW11bUl0ZW1zUXVhbnRpdHknIGluIHRoaXMudmFyaWFudHNbMF0gPyB0aGlzLnZhcmlhbnRzWzBdPy5tYXhpbXVtSXRlbXNRdWFudGl0eSA6IHRoaXMudmFyaWFudHNbMF0/LnN0b2NrXHJcbiAgICAgICAgYXNvY2lhdGVkLm1pbmltdW1JdGVtc1F1YW50aXR5ID0gdGhpcy52YXJpYW50c1swXT8uc3RvY2sgPiAwICYmICdtaW5pbXVtSXRlbXNRdWFudGl0eScgaW4gdGhpcy52YXJpYW50c1swXVxyXG4gICAgICAgICAgICAmJiB0aGlzLnZhcmlhbnRzWzBdPy5taW5pbXVtSXRlbXNRdWFudGl0eSA+IDAgPyB0aGlzLnZhcmlhbnRzWzBdPy5taW5pbXVtSXRlbXNRdWFudGl0eVxyXG4gICAgICAgICAgICA6ICh0aGlzLnZhcmlhbnRzWzBdPy5tdWx0aXBsZVF1YW50aXR5ID8gdGhpcy52YXJpYW50c1swXT8ubXVsdGlwbGVRdWFudGl0eSA6IDEpXHJcblxyXG4gICAgICAgIGFzb2NpYXRlZC5maW5hbENvbnN1bWVyID0ge1xyXG4gICAgICAgICAgICBmaW5hbENvbnN1bWVyUHJpY2U6IHRoaXMudmFyaWFudHNbMF0/LmZpbmFsX2NvbnN1bWVyX3ByaWNlLFxyXG4gICAgICAgICAgICBvcmlnaW5hbEZpbmFsQ29uc3VtZXJQcmljZTogdGhpcy52YXJpYW50c1swXT8ub3JpZ2luYWxfZmluYWxfY29uc3VtZXJfcHJpY2UsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhc29jaWF0ZWQudGF4ZXMgPSB7XHJcbiAgICAgICAgICAgIHRheEluY2x1ZGVkOiB0aGlzLnZhcmlhbnRzWzBdPy50YXhJbmNsdWRlZCxcclxuICAgICAgICAgICAgdGF4Q2F0ZWdvcnk6IHRoaXMudmFyaWFudHNbMF0/LnRheENhdGVnb3J5LFxyXG4gICAgICAgIH1cclxuICAgICAgICBhc29jaWF0ZWQudGF4ZUFtb3VudCA9IHRoaXMudmFyaWFudHNbMF0/LnRheGVzIHx8IHVuZGVmaW5lZDtcclxuICAgICAgICBhc29jaWF0ZWQudGF4UmF0ZSA9IHRoaXMudmFyaWFudHNbMF0/LnRheFJhdGUgfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGFzb2NpYXRlZC5wcmljZVdpdGhvdXRUYXhlcyA9IHRoaXMudmFyaWFudHNbMF0/LnByaWNlV2l0aG91dFRheGVzIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC5uZXh0KGFzb2NpYXRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVjaWJlIGxhcyBwcm9waWVkYWRlcyBkZSB1bmEgdmFyaWFudGUgeSBwb3IgY2FkYSBpdGVtIGFybWEgdW4gb2JqZXRvIGNvbiBcclxuICAgICAqIGVsIG5hbWU9Y2xhdmUgeSB2YWx1ZT12YWxvciBkZSBlc2UgaXRlbS4gIFxyXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgXHJcbiAgICAgKiBAcmV0dXJucyBVbiBhcnJlZ2xvIGNvbiBsYXMgcHJvcGllZGFkZXMgZGUgbGEgZm9ybWEgeyBuYW1lID0gLi4uICwgdmFsdWUgPSAuLi59XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYmVhdXRpZnlQcm9wZXJ0aWVzID0gKHByb3BlcnRpZXMpID0+IHtcclxuICAgICAgICBsZXQgYmVhdXRpZnlEYXRhID0gW11cclxuICAgICAgICBwcm9wZXJ0aWVzLmZvckVhY2gocHJvcCA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICBiZWF1dGlmeURhdGEucHVzaCh7IG5hbWU6IGtleSwgdmFsdWU6IHByb3Bba2V5XSB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGJlYXV0aWZ5RGF0YVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JhdGVEaXNjb3VudCA9ICgpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgYWxsX2Rpc2NvdW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMudmFyaWFudHMuZm9yRWFjaCh2YXJpYW50ID0+IHtcclxuICAgICAgICAgICAgICAgIHZhcmlhbnQuZGlzY291bnQgJiYgKGFsbF9kaXNjb3VudCA9IGFsbF9kaXNjb3VudCArICcsICcgKyB2YXJpYW50LmRpc2NvdW50KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChhbGxfZGlzY291bnQgPT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYWxsX2Rpc2NvdW50XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyYXRlUHJpY2UgPSAoKSA9PiB7XHJcbiAgICAgICAgbGV0IG1pbl9wcmljZSA9IDA7XHJcbiAgICAgICAgbGV0IG1heF9wcmljZSA9IDA7XHJcbiAgICAgICAgbGV0IGFsbF9wcmljZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XHJcbiAgICAgICAgICAgIGFsbF9wcmljZXMucHVzaCh2YXJpYW50LnByaWNlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBtaW5fcHJpY2UgPSBhbGxfcHJpY2VzLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5taW4oYSwgYikpO1xyXG4gICAgICAgIG1heF9wcmljZSA9IGFsbF9wcmljZXMucmVkdWNlKChhLCBiKSA9PiBNYXRoLm1heChhLCBiKSwgMCk7XHJcbiAgICAgICAgcmV0dXJuIG1pbl9wcmljZSA9PSBtYXhfcHJpY2UgPyBtYXhfcHJpY2UudG9TdHJpbmcoKSA6IG1pbl9wcmljZSArICcgLSAnICsgbWF4X3ByaWNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JhdGVTYWxlUHJpY2UgPSAoKSA9PiB7XHJcbiAgICAgICAgbGV0IG1pbl9wcmljZSA9IDA7XHJcbiAgICAgICAgbGV0IG1heF9wcmljZSA9IDA7XHJcbiAgICAgICAgbGV0IGFsbF9wcmljZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XHJcbiAgICAgICAgICAgIHZhcmlhbnQuc2FsZXByaWNlICYmIGFsbF9wcmljZXMucHVzaCh2YXJpYW50LnNhbGVwcmljZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFhbGxfcHJpY2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1pbl9wcmljZSA9IGFsbF9wcmljZXMucmVkdWNlKChhLCBiKSA9PiBNYXRoLm1pbihhLCBiKSk7XHJcbiAgICAgICAgbWF4X3ByaWNlID0gYWxsX3ByaWNlcy5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWF4KGEsIGIpLCAwKTtcclxuICAgICAgICByZXR1cm4gbWluX3ByaWNlID09IG1heF9wcmljZSA/IG1heF9wcmljZS50b1N0cmluZygpIDogbWluX3ByaWNlICsgJyAtICcgKyBtYXhfcHJpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpblJhbmdlID0gKHF1YW50aXR5LCBtaW4sIG1heCkgPT4gKChxdWFudGl0eSAtIG1pbikgKiAocXVhbnRpdHkgLSBtYXgpIDw9IDApXHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVF1YW50aXR5ID0gKHF1YW50aXR5OiBudW1iZXIpID0+IHtcclxuICAgICAgICBjb25zdCBhY3R1YWxRdWFudGl0eSA9IHRoaXMuY2FydFNlcnZpY2UuZ2V0Q291bnRGcm9tSXRlbUluQ2FydCh0aGlzLnZhcmlhbnRzWzBdLmNvZGUpO1xyXG4gICAgICAgIGNvbnN0IGFzb2NpYXRlZERhdGEgPSB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdMYSBjYW50aWRhZCBxdWUgbGxlZ286ICcsIHF1YW50aXR5LCAnIHkgbGEgY2FudGlkYWQgYWN0dWFsOiAnLCBhY3R1YWxRdWFudGl0eSk7XHJcbiAgICAgICAgaWYgKChhY3R1YWxRdWFudGl0eSArIHF1YW50aXR5KSA+IGFzb2NpYXRlZERhdGEubWF4aW11bUl0ZW1zUXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ21heGltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBhc29jaWF0ZWREYXRhLm1heGltdW1JdGVtc1F1YW50aXR5IH0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY3R1YWxRdWFudGl0eSArIHF1YW50aXR5KSA8IGFzb2NpYXRlZERhdGEubWluaW11bUl0ZW1zUXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ21pbmltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBhc29jaWF0ZWREYXRhLm1pbmltdW1JdGVtc1F1YW50aXR5IH0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHZhbGlkYXRlUHJpY2VBbmRDcmVkaXRzID0gKHByaWNlOiBudW1iZXIpOiBib29sZWFuID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jcmVkaXRBbW91bnQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ05vIGhheSBjb25maWd1cmFjacOzbiBkZSBjcsOpZGl0b3MgcGFyYSBlc3RlIHVzdWFyaW8uJyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwcmljZSA+IHRoaXMucmVtYWluaW5nQ3JlZGl0cykge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbm90LWVub3VnaC1jcmVkaXRzJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgcHJpdmF0ZSBmZXRjaENhcnREYXRhID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0VG90YWxBbW91bnQoKS5zdWJzY3JpYmUoKHRvdGFsQW1vdW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRvdGFsQW1vdW50ID0gdG90YWxBbW91bnQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q3JlZGl0QW1vdW50KCkuc3Vic2NyaWJlKChjcmVkaXRBbW91bnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jcmVkaXRBbW91bnQgPSBjcmVkaXRBbW91bnQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0UmVtYWluaW5nQ3JlZGl0cygpLnN1YnNjcmliZSgocmVtYWluaW5nQ3JlZGl0cykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlbWFpbmluZ0NyZWRpdHMgPSByZW1haW5pbmdDcmVkaXRzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBDdWFuZG8gaGF5YSBtb2RlbG9zIGRlIHJlc3B1ZXN0YSwgdmFsaWRhbW9zIHF1ZSBubyBzZSBpbnRlbnRlIGNhcmdhciB1biBwcm9kdWN0byBpbmNvbXBsZXRvXHJcbiAgICBwcml2YXRlIGlzUHJvZHVjdFZhbGlkID0gKHByb2R1Y3Q6IFByb2R1Y3QpID0+IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIEFycmF5IGRlIFZhcmlhbnRlcyB5IHN1cyB2YWxvcmVzXHJcbiAgICAgKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRvcm5hIHVuYSBsaXN0YSBmaWx0cmFkYSBkZSBsYXMgdmFyaWFudGVzIHF1ZSBlc3RhbiBzZWxlY2Npb25hZGFzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VmFyaWFudHNTZWxlY3RlZChvcHRpb25zOiBhbnksIG9wdGlvbnNFeGNlcHRpb246IEFycmF5PGFueT4pOiBBcnJheTxPYmplY3Q+IHtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhbnRzU2VsZWN0ZWQgPSBbXTtcclxuICAgICAgICBvcHRpb25zLmZvckVhY2godiA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2LnZhbHVlcyAmJiB2LnZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHYudmFsdWVzLmZvckVhY2godmFsID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsLnNlbGVjdGVkICYmICFvcHRpb25zRXhjZXB0aW9uLmZpbmQob3AgPT4gb3AudG9VcHBlckNhc2UoKSA9PSB2LmNvZGUudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHNTZWxlY3RlZFt2LmNvZGVdID0gdmFsLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdmFyaWFudHNTZWxlY3RlZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIEFycmF5IGRlIFZhcmlhbnRlcyB5IHN1cyB2YWxvcmVzXHJcbiAgICAgKiBAcGFyYW0gdmFyaWFudHMgVG9kYXMgbGFzIHZhcmlhbnRlcyBkaXNwb25pYmxlcyBkZWwgcHJvZHVjdG9cclxuICAgICAqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIHJldG9ybmEgdG9kYXMgbGFzIHZhcmlhbnRlcyBkaXNwb25pYmxlcyBhIHNlbGVjY2lvbiB5IHN1IHN0b2NrXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRWYXJpYW50c0F2YWlsYWJsZShvcHRpb25zOiBhbnksIHZhcmlhbnRzOiBhbnksIG9wdGlvbnNFeGNlcHRpb246IEFycmF5PGFueT4pOiBhbnkge1xyXG5cclxuICAgICAgICBsZXQgdmFyaWFudHNTZWxlY3RlZCA9IHRoaXMuZ2V0VmFyaWFudHNTZWxlY3RlZChvcHRpb25zLCBvcHRpb25zRXhjZXB0aW9uKTtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhbnRzQXZhaWxhYmxlID0gW107XHJcblxyXG4gICAgICAgIHZhcmlhbnRzLm1hcCh2ID0+IHtcclxuXHJcbiAgICAgICAgICAgIGxldCBhdXggPSB7fTtcclxuICAgICAgICAgICAgaWYgKHYub3B0aW9ucyAmJiB2Lm9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB2Lm9wdGlvbnMubWFwKG9wID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGF1eCwgb3AsIHsgc3RvY2s6IHYuc3RvY2sgfSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhcmlhbnRzQXZhaWxhYmxlLnB1c2goYXV4KTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiB2YXJpYW50c0F2YWlsYWJsZS5maWx0ZXIodmEgPT4gdGhpcy5jb25zdGFudHMuY29udGFpbnNBbGwoeyAuLi52YXJpYW50c1NlbGVjdGVkIH0sIHZhKSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIEFycmF5IGRlIHZhcmlhbnRlcyB5IHN1cyB2YWxvcmVzXHJcbiAgICAgKiBAcGFyYW0gY29kZSBDb2RpZ28gZGUgbGEgdmFyaWFudGUgYSBidXNjYXJcclxuICAgICAqIEBwYXJhbSBuYW1lIG5vbWJyZSBkZSBsYSB2YXJpYW50ZSBhIGJ1c2NhclxyXG4gICAgICogQHBhcmFtIHZhcmlhbnRzIHZhcmlhbnRlcyBkZWwgcHJvZHVjdG9cclxuICAgICAqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIGJ1c2NhIGVuIGxhIGxpc3RhIGRlIHZhcmlhbnRlcyBkaXNwb25pYmxlcyBzaSBoYXkgZGUgZXNlIGNvZGlnbywgZXNlIG5vbWJyZSB5IGNvbiBzdG9jayBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGV4aXN0VmFyaWFudEFuZEhhc1N0b2NrKG9wdGlvbnMsIGNvZGUsIG5hbWUsIHZhcmlhbnRzLCBvcHRpb25zRXhjZXB0aW9uID0gW10pOiBib29sZWFuIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFyaWFudHNBdmFpbGFibGUob3B0aW9ucywgdmFyaWFudHMsIG9wdGlvbnNFeGNlcHRpb24pLmZpbmQodmEgPT5cclxuICAgICAgICAgICAgdmEuaGFzT3duUHJvcGVydHkoY29kZSkgJiYgdmFbY29kZV0gPT09IG5hbWUgJiYgdmEuc3RvY2sgPiAwKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gcHJvZHVjdCBwcm9kdWN0byBlbCBjdWFsIHNlIHF1aWVyZSBkZXNkb2JsYXIgcG9yIHZhcmlhbnRlcyBwb3IgdW5hIG9wY2nDs24uXHJcbiAgICAgKiBAcGFyYW0gd2l0aE9wdGlvbiAndHlwZScgdGlwbyBkZSBvcGNpw7NuLCBjb2RlOiBjw7NkaWdvIGRlIGxhIG9wY2nDs24uICdkZWZhdWx0Rmlyc3RPcHRpb24nOiBlbiBjYXNvIGRlIHF1ZSBubyBzZSBwdWVkYSBkZXNkb2JsYXIgcG9yIGxhIG9wY2nDs24gaW5kaWNhZGEgc2kgZWwgdmFsb3IgZXMgdmVyZGFkZXJvIHNlIGludGVudGFyYSBkZXNkb2JsYXIgcG9yIGxhIHByaW1lcmEgb3BjacOzbiBhc29jaWFkYSBhbCBwcm9kdWN0by5cclxuICAgICAqICdjaGVja0lmU3RvY2snOiBlbiBjYXNvIGRlIHF1ZSBlc3RhIHZhbG9yIHNlYSB2ZXJkYWRlcm8gc2UgcmVhbGl6YSB1biBjb250cm9sIGRlIHF1ZSBsYSB2YXJpYW50ZXMgY3VlbnRlbiBjb24gc3RvY2sgcGFyYSBzZXIgdW4gcHJvZHVjdG8gZGVzZG9ibGFkbyBwb3IgbGEgdmFyaWFudGUsIHNpIGVsIHZhbG9yIGVzIGZhbHNvIG5vIHNlIHJlYWxpemEgZGljaG8gY29udHJvbCB5IGVsIHByb2R1Y3RvIHNlIGRlc2RvYmxhcmEgY29uIHN0b2NrIGVuIDAuXHJcbiAgICAgKiBAcmV0dXJucyBhcnJlZ2xvIGNvbiBlbCBwcm9kdWN0byBkZXNkb2JsYWRvIHBvciBsYSB2YXJpYW50ZSBzb2xpY2l0YWRhLlxyXG4gICAgICogKG9wY2nDs24gcG9yIGRlZmVjdG8gcXVlIHNlIGludGVudGEgaGFjZXIgZWwgZGVzZG9ibGFtaWVudG8gJ2NvbG9yJywgbyBiaWVuIHNpIGVuIGxlIHBhcsOhbWV0cm8gd2l0aE9wdGlvbiBlbCBhdHJpYnV0byAnZGVmYXVsdEZpcnN0T3B0aW9uJyBlcyB2ZXJkYWRlcm8gc2UgZGVzZG9ibGEgcG9yIGxhIHByaW1lcmEgb3BjacOzbiBhc29jaWFkYSBhbCBwcm9kdWN0byApIFxyXG4gICAgICovXHJcbiAgICBnZXRQcm9kdWN0V2l0aFVuaXF1ZVZhcmlhbnQgPSAocHJvZHVjdCwgd2l0aE9wdGlvbj86IFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0c1NlcnZpY2UuZ2V0UHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudChbcHJvZHVjdF0sIHdpdGhPcHRpb24pXHJcbiAgICB9XHJcblxyXG59Il19
|
|
433
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0LWRldGFpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBeUIsTUFBTSxNQUFNLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHdEQsSUFBYSxvQkFBb0IsR0FBakMsTUFBYSxvQkFBb0I7SUFlN0IsWUFDWSxlQUFnQyxFQUFVLFdBQXdCLEVBQVUsYUFBMkIsRUFDdkcsU0FBb0IsRUFBUyxnQkFBa0MsRUFBUyxlQUFnQztRQUR4RyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQ3ZHLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBUyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBZjVHLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsRUFBRSxDQUFDLENBQUM7UUFDbEQsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUM5Qyx5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUV0RixhQUFRLEdBQUcsRUFBRSxDQUFBO1FBRWQsYUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDOUMsYUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDOUMsbUJBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLENBQUM7UUFVakU7Ozs7O1VBS0U7UUFDRixnQkFBVyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQW1CLEtBQUssRUFBRSxFQUFFLENBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FDbkUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUNsRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUN4QyxDQUFBO1FBRUw7Ozs7OztXQU1HO1FBQ0gsZUFBVSxHQUFHLENBQU8sVUFBVSxFQUFFLFVBQW1CLEtBQUssRUFBRSxFQUFFO1lBQ3hELElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDNUYsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSztnQkFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Z0JBQ3ZELE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0UsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFBLENBQUE7UUFFTyxlQUFVLEdBQUcsQ0FBQyxPQUFPLEVBQUUsWUFBYSxFQUFFLEVBQUU7WUFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7WUFDM0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7WUFDakUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1lBQ3BCLHNHQUFzRztZQUN0Ryx1SEFBdUg7UUFDM0gsQ0FBQyxDQUFBO1FBRUQsZUFBVSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkYsWUFBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUUxQyxjQUFTLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7WUFDeEMsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDLENBQUM7WUFDbkgsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDbkMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDL0QsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUk7Z0JBQUUsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDLENBQ3JFLENBQUM7WUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzFCLDJEQUEyRDtnQkFDM0QsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ2xFLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQzFCLE1BQTRCLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7YUFDNUM7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFFbkQsOERBQThEO2dCQUM5RCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDbEUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDMUIsTUFBNEIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNsRCxDQUFDLENBQUMsQ0FBQzthQUNOO1FBRUwsQ0FBQyxDQUFBO1FBRUQsa0JBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3hCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7WUFDM0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUE7UUFFRCxnQkFBVyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEIscUNBQXFDO1FBQ3pDLENBQUMsQ0FBQTtRQW1ERCxxQkFBZ0IsR0FBRyxDQUFPLFFBQVEsRUFBRSxFQUFFO1lBQ2xDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7YUFDL0M7WUFDRCxJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFO2dCQUNyRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUM7b0JBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO3FCQUN6RSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDO29CQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsQ0FBQztxQkFDNUgsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQztvQkFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7YUFDckk7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztnQkFBRSxPQUFPO1lBQzdDLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUEsQ0FBQztRQUVNLGVBQVUsR0FBRyxDQUFDLGdCQUEwQixFQUFFLEVBQUU7WUFDaEQsSUFBSSxPQUFPLEdBQUcsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7WUFDNUQsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQTtZQUNGLE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUMsQ0FBQTtRQUVPLGFBQVEsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzdCLE9BQU87Z0JBQ0gsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLO2dCQUNyQixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7Z0JBQ3BCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDcEIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQzlKLENBQUE7UUFDTCxDQUFDLENBQUE7UUFVTyxtQkFBYyxHQUFHLENBQUMsSUFBSyxFQUFFLEVBQUU7WUFDL0IsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQ2xELElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDMUIsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFOzRCQUNoQixRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQ0FDakMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtvQ0FDekMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dDQUN4RixDQUFDLENBQUMsQ0FBQTs0QkFDTixDQUFDLENBQUMsQ0FBQTt5QkFDTDtvQkFDTCxDQUFDLENBQUMsQ0FBQTtnQkFDTixDQUFDLENBQUMsQ0FBQTthQUNMO2lCQUFNO2dCQUNILFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQzthQUMvRDtZQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ3pCLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFBO1FBRU8sa0JBQWEsR0FBRyxHQUFHLEVBQUU7WUFDekIsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM5RyxDQUFDLENBQUE7UUFFTyxzQ0FBaUMsR0FBRyxHQUFHLEVBQUU7O1lBQzdDLElBQUksU0FBUyxHQUFRLEVBQUUsQ0FBQztZQUN4QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDaEIsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDekMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEQsU0FBUyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLElBQUksU0FBUyxDQUFDO2dCQUN6RixTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLFNBQVMsQ0FBQztnQkFDdkcsU0FBUyxDQUFDLFFBQVEsR0FBRyxPQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDBDQUFFLFFBQVEsS0FBSSxTQUFTLENBQUM7Z0JBQzdELFNBQVMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ3RILFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxPQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDBDQUFFLGtCQUFrQixLQUFJLFNBQVMsQ0FBQztnQkFDakYsU0FBUyxDQUFDLGdCQUFnQixHQUFHLE9BQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsMENBQUUsZ0JBQWdCLEtBQUksU0FBUyxDQUFDO2FBQ2hGO2lCQUFNO2dCQUNILFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO2dCQUNuQyxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtnQkFDM0MsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO2dCQUN2RixTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTthQUM1QztZQUVELENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDaEUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBR3BILFNBQVMsQ0FBQyxhQUFhLEdBQUcsT0FBQSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywwQ0FBRSxhQUFhLEtBQUksQ0FBQyxDQUFBO1lBQzlELFNBQVMsQ0FBQyxhQUFhLEdBQUcsT0FBQSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywwQ0FBRSxhQUFhLEtBQUksQ0FBQyxDQUFBO1lBRTlELFNBQVMsQ0FBQyxvQkFBb0IsR0FBRyxPQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDBDQUFFLEtBQUssSUFBRyxDQUFDLElBQUksc0JBQXNCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsMENBQUUsb0JBQW9CLENBQUMsQ0FBQyxPQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDBDQUFFLEtBQUssQ0FBQTtZQUM3SyxTQUFTLENBQUMsb0JBQW9CLEdBQUcsT0FBQSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywwQ0FBRSxLQUFLLElBQUcsQ0FBQyxJQUFJLHNCQUFzQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO21CQUNuRyxPQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDBDQUFFLG9CQUFvQixJQUFHLENBQUMsQ0FBQyxDQUFDLE9BQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsMENBQUUsb0JBQW9CLENBQ3RGLENBQUMsQ0FBQyxDQUFDLE9BQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsMENBQUUsZ0JBQWdCLEVBQUMsQ0FBQyxPQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDBDQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUVuRixTQUFTLENBQUMsYUFBYSxHQUFHO2dCQUN0QixrQkFBa0IsUUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywwQ0FBRSxvQkFBb0I7Z0JBQzFELDBCQUEwQixRQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDBDQUFFLDZCQUE2QjthQUM5RSxDQUFBO1lBRUQsU0FBUyxDQUFDLEtBQUssR0FBRztnQkFDZCxXQUFXLFFBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsMENBQUUsV0FBVztnQkFDMUMsV0FBVyxRQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDBDQUFFLFdBQVc7YUFDN0MsQ0FBQTtZQUNELFNBQVMsQ0FBQyxVQUFVLEdBQUcsT0FBQSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywwQ0FBRSxLQUFLLEtBQUksU0FBUyxDQUFDO1lBQzVELFNBQVMsQ0FBQyxPQUFPLEdBQUcsT0FBQSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywwQ0FBRSxPQUFPLEtBQUksU0FBUyxDQUFDO1lBQzNELFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxPQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDBDQUFFLGlCQUFpQixLQUFJLFNBQVMsQ0FBQztZQUUvRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQTtRQUVEOzs7OztXQUtHO1FBQ0ssdUJBQWtCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4QyxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUE7WUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEIsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7b0JBQ2xCLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO2lCQUNyRDtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxZQUFZLENBQUE7UUFDdkIsQ0FBQyxDQUFBO1FBRU8sa0JBQWEsR0FBRyxHQUFHLEVBQUU7WUFDekIsSUFBSTtnQkFDQSxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUM1QixPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNoRixDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLFlBQVksSUFBSSxFQUFFLEVBQUU7b0JBQ3BCLE9BQU8sU0FBUyxDQUFBO2lCQUNuQjtnQkFDRCxPQUFPLFlBQVksQ0FBQTthQUN0QjtZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNaLE9BQU8sU0FBUyxDQUFBO2FBQ25CO1FBQ0wsQ0FBQyxDQUFBO1FBRU8sZUFBVSxHQUFHLEdBQUcsRUFBRTtZQUN0QixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDNUIsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFDSCxTQUFTLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzRCxPQUFPLFNBQVMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDekYsQ0FBQyxDQUFBO1FBRU8sbUJBQWMsR0FBRyxHQUFHLEVBQUU7WUFDMUIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNsQixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzVCLE9BQU8sQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtnQkFDcEIsT0FBTyxTQUFTLENBQUE7YUFDbkI7WUFDRCxTQUFTLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzRCxPQUFPLFNBQVMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDekYsQ0FBQyxDQUFBO1FBRU8sWUFBTyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFFNUUscUJBQWdCLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEVBQUU7WUFDNUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7WUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxRQUFRLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDNUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxhQUFhLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ2xFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUE7Z0JBQ25HLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxhQUFhLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ2xFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUE7Z0JBQ25HLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBQ0QsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDLENBQUE7UUFFTyw0QkFBdUIsR0FBRyxDQUFDLEtBQWEsRUFBVyxFQUFFO1lBQ3pELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUU7Z0JBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMscURBQXFELENBQUMsQ0FBQztnQkFDbkUsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUVELElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtnQkFDckMsT0FBTyxLQUFLLENBQUM7YUFDaEI7WUFFRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzlDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBR00sa0JBQWEsR0FBRyxHQUFHLEVBQUU7WUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDeEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFdBQVcsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7Z0JBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztZQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQztRQUVGLDhGQUE4RjtRQUN0RixtQkFBYyxHQUFHLENBQUMsT0FBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO1FBbUVwRDs7Ozs7OztXQU9HO1FBQ0gsZ0NBQTJCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsVUFBNEMsRUFBRSxFQUFFO1lBQ3BGLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBQ25GLENBQUMsQ0FBQTtJQTlhRCxDQUFDO0lBZ0ZEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLFFBQVEsRUFBRSxZQUFxQjtRQUNyQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwQyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxRCxJQUFJLE9BQVksQ0FBQztRQUVqQixRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQzFCLEtBQUssQ0FBQztnQkFDRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDdkMsTUFBTTtZQUNWLEtBQUssQ0FBQztnQkFDRixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDekMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQzlCLE1BQU07WUFDVjtnQkFDSSxJQUFJLFlBQVksRUFBRTtvQkFDZCxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFBO29CQUN0RSxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFO3dCQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTt3QkFDdkMsT0FBTyxHQUFHLFNBQVMsQ0FBQTtxQkFDdEI7aUJBQ0o7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7aUJBQzVDO2dCQUNELE1BQU07U0FDYjtRQUNELElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU87UUFFN0MsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBQy9ILElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDO1lBQUUsT0FBTztRQUUzRCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFBQSxDQUFDO0lBc0NNLHFCQUFxQixDQUFDLGdCQUF5QjtRQUNuRCxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0UsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9FLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxtQ0FBUSxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUssTUFBTSxDQUFFLENBQUMsQ0FBQTtRQUNqSCxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUEwTEQ7Ozs7O09BS0c7SUFDSyxtQkFBbUIsQ0FBQyxPQUFZLEVBQUUsZ0JBQTRCO1FBRWxFLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUM3QixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDbkIsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTt3QkFDeEYsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7cUJBQ3ZDO2dCQUNMLENBQUMsQ0FBQyxDQUFBO2FBQ0w7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sZ0JBQWdCLENBQUM7SUFFNUIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLG9CQUFvQixDQUFDLE9BQVksRUFBRSxRQUFhLEVBQUUsZ0JBQTRCO1FBRWpGLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTNFLElBQUksaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBRTNCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFFYixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7Z0JBQy9CLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUNmLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDL0MsQ0FBQyxDQUFDLENBQUE7YUFDTDtZQUNELGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQTtRQUNGLE9BQU8saUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLG1CQUFNLGdCQUFnQixHQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDbEcsQ0FBQztJQUdEOzs7Ozs7OztPQVFHO0lBQ0ksdUJBQXVCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixHQUFHLEVBQUU7UUFFL0UsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUM1RSxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNyRSxDQUFDO0NBY0osQ0FBQTs7WUFsYmdDLGVBQWU7WUFBdUIsV0FBVztZQUF5QixZQUFZO1lBQzVGLFNBQVM7WUFBMkIsZ0JBQWdCO1lBQTBCLGVBQWU7O0FBakIzRyxvQkFBb0I7SUFEaEMsVUFBVSxFQUFFO0dBQ0Esb0JBQW9CLENBa2NoQztTQWxjWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgcGFydGl0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFByb2R1Y3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3Byb2R1Y3QnO1xyXG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuL3Byb2R1Y3RzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3V0aWxzL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb3JlLmNvbnN0cyc7XHJcbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uL2FuYWx5dGljcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcGFyYW1zSW50ZXJmYWNlcy9wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50JztcclxuaW1wb3J0IHsgQ3VycmVuY3lTZXJ2aWNlIH0gZnJvbSAnLi4vY3VycmVuY3kuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0RGV0YWlsU2VydmljZSB7XHJcblxyXG4gICAgcHJpdmF0ZSBwcm9kdWN0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJvZHVjdD4oe30pO1xyXG4gICAgcHJpdmF0ZSBvcHRpb25zU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XHJcbiAgICBwcml2YXRlIGFzb2NpYXRlZERhdGFTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHsgcHJpY2U6ICcnLCBzdG9jazogMCwgcGljdHVyZTogJycgfSk7XHJcblxyXG4gICAgcHJpdmF0ZSB2YXJpYW50cyA9IFtdXHJcblxyXG4gICAgcHVibGljIHByb2R1Y3QkID0gdGhpcy5wcm9kdWN0U3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBvcHRpb25zJCA9IHRoaXMub3B0aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgYXNvY2lhdGVkRGF0YSQgPSB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50VG90YWxBbW91bnQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgY3JlZGl0QW1vdW50OiBudW1iZXIgfCBudWxsO1xyXG4gICAgcHJpdmF0ZSByZW1haW5pbmdDcmVkaXRzOiBudW1iZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBwcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSwgcHJpdmF0ZSBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsIHByaXZhdGUgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY29uc3RhbnRzOiBDb25zdGFudHMsIHB1YmxpYyBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLCBwdWJsaWMgY3VycmVuY3lTZXJ2aWNlOiBDdXJyZW5jeVNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogQHBhcmFtIGNvZGUgSWRlbnRpZmljYWRvciBkZWwgcHJvZHVjdG9cclxuICAgICogQHBhcmFtIHZhcmlhbnQgSW5kaWNhIHNpIHNlIGVzdMOhIHNvbGljaXRhbmRvIHVuIHByb2R1Y3RvIHBvciBzdSBjb2RpZ28sIG8gcG9yIGVsIGNvZGlnbyBjb3JyZXNwb25kaWVudGUgYSB1bmEgZGUgc3VzIHZhcmlhbnRlc1xyXG4gICAgKiAgXHJcbiAgICAqIENhcmdhIGVsIHByb2R1Y3RvIHNvbGljaXRhZG8gYXN5bmNyb25pY2FtZW50ZSBzaW4gcmVzcHVlc3RhIFxyXG4gICAgKi9cclxuICAgIGxvYWRQcm9kdWN0ID0gKGNvZGUsIHZhcmlhbnQ6IGJvb2xlYW4gPSBmYWxzZSkgPT5cclxuICAgICAgICB0aGlzLnByb2R1Y3RzU2VydmljZS5nZXRTcGVjaWZpY1Byb2R1Y3QoY29kZSwgdmFyaWFudCkudG9Qcm9taXNlKCkudGhlbihcclxuICAgICAgICAgICAgcmVzID0+IHZhcmlhbnQgPyB0aGlzLmluaXRpYWxpemUocmVzLCBjb2RlKSA6IHRoaXMuaW5pdGlhbGl6ZShyZXMpLFxyXG4gICAgICAgICAgICBlcnIgPT4gdGhpcy5wcm9kdWN0U3ViamVjdC5uZXh0KG51bGwpXHJcbiAgICAgICAgKVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHByb2R1Y3RfaWQgSWRlbnRpZmljYWRvciBkZWwgcHJvZHVjdG9cclxuICAgICAqIEBwYXJhbSB2YXJpYW50IEluZGljYSBzaSBzZSBlc3TDoSBzb2xpY2l0YW5kbyB1biBwcm9kdWN0byBwb3Igc3UgY29kaWdvLCBvIHBvciBlbCBjb2RpZ28gY29ycmVzcG9uZGllbnRlIGEgdW5hIGRlIHN1cyB2YXJpYW50ZXNcclxuICAgICAqIEBhc3luY1xyXG4gICAgICogIFxyXG4gICAgICogQSBkaWZlcmVuY2lhIGRlbCBtZXRvZG8gbG9hZFByb2R1Y3QsIGVzdGUgcmV0b3JuYSB1biB2YWxvciBjdWFuZG8gdGVybWluYSBcclxuICAgICAqL1xyXG4gICAgZ2V0UHJvZHVjdCA9IGFzeW5jIChwcm9kdWN0X2lkLCB2YXJpYW50OiBib29sZWFuID0gZmFsc2UpID0+IHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9kdWN0c1NlcnZpY2UuZ2V0U3BlY2lmaWNQcm9kdWN0KHByb2R1Y3RfaWQsIHZhcmlhbnQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC5lcnJvcikgdGhpcy5wcm9kdWN0U3ViamVjdC5uZXh0KG51bGwpO1xyXG4gICAgICAgIGVsc2UgdmFyaWFudCA/IHRoaXMuaW5pdGlhbGl6ZShyZXN1bHQsIHByb2R1Y3RfaWQpIDogdGhpcy5pbml0aWFsaXplKHJlc3VsdCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplID0gKHByb2R1Y3QsIHZhcmlhbnRfY29kZT8pID0+IHtcclxuICAgICAgICB0aGlzLnByb2R1Y3RTdWJqZWN0Lm5leHQocHJvZHVjdCk7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zU3ViamVjdC5uZXh0KHRoaXMuZ2V0T3B0aW9ucygpKVxyXG4gICAgICAgIHZhcmlhbnRfY29kZSA/IHRoaXMudXBkYXRlVmFyaWFudHModmFyaWFudF9jb2RlKSA6IHRoaXMudXBkYXRlVmFyaWFudHMoKTtcclxuICAgICAgICB0aGlzLnZhcmlhbnRzLmxlbmd0aCAmJiB0aGlzLmdlbmVyYXRlQXNvY2lhdGVkRGF0YUZyb21WYXJpYW50cygpO1xyXG4gICAgICAgIHRoaXMuZmV0Y2hDYXJ0RGF0YSgpXHJcbiAgICAgICAgLy90aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCd2aWV3X2l0ZW0nLCB7IC4uLnByb2R1Y3QsIGN1cnJlbmN5OiB0aGlzLmNvbnN0YW50cy5jdXJyZW5jeS5jb2RlIH0pXHJcbiAgICAgICAgLy8gdmFyaWFudF9jb2RlICYmIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3ZpZXdfaXRlbScsIHsgLi4ucHJvZHVjdCwgY3VycmVuY3k6IHRoaXMuY29uc3RhbnRzLmN1cnJlbmN5LmNvZGUgfSlcclxuICAgIH1cclxuXHJcbiAgICBzZXRQcm9kdWN0ID0gKHByb2R1Y3QpID0+IHRoaXMuaXNQcm9kdWN0VmFsaWQocHJvZHVjdCkgJiYgdGhpcy5pbml0aWFsaXplKHByb2R1Y3QpO1xyXG5cclxuICAgIGlzUmVhZHkgPSAoKSA9PiB0aGlzLnZhcmlhbnRzLmxlbmd0aCA9PSAxO1xyXG5cclxuICAgIHNldE9wdGlvbiA9IChvcHRpb25fY29kZSwgb3B0aW9uX3ZhbHVlKSA9PiB7XHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCBvcHRpb24gPSBvcHRpb25zLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LmNvZGUgPT0gb3B0aW9uX2NvZGUpLnZhbHVlcy5maW5kKHZhbHVlID0+IHZhbHVlLm5hbWUgPT0gb3B0aW9uX3ZhbHVlKTtcclxuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSAhb3B0aW9uLnNlbGVjdGVkO1xyXG4gICAgICAgIG9wdGlvbnMuZmluZChlbGVtZW50ID0+IGVsZW1lbnQuY29kZSA9PSBvcHRpb25fY29kZSkudmFsdWVzLmZvckVhY2goXHJcbiAgICAgICAgICAgIHZhbHVlID0+IHsgaWYgKHZhbHVlLm5hbWUgIT0gb3B0aW9uLm5hbWUpIHZhbHVlLnNlbGVjdGVkID0gZmFsc2UgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zU3ViamVjdC5uZXh0KG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmFyaWFudHMoKTtcclxuICAgICAgICBpZiAodGhpcy52YXJpYW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIEhhYmlsaXRhciB0b2RvcyBsb3MgYm90b25lcyBjb24gbGEgY2xhc2UgJ2FkZENhcnRCdXR0b24nXHJcbiAgICAgICAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYWRkQ2FydEJ1dHRvbicpO1xyXG4gICAgICAgICAgICBzdWJtaXRCdXR0b25zLmZvckVhY2goYnV0dG9uID0+IHtcclxuICAgICAgICAgICAgICAgIChidXR0b24gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlQXNvY2lhdGVkRGF0YUZyb21WYXJpYW50cygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdzZWxlY3Rpb24tbm90LWF2YWlsYWJsZScpO1xyXG5cclxuICAgICAgICAgICAgLy8gRGVzaGFiaWxpdGFyIHRvZG9zIGxvcyBib3RvbmVzIGNvbiBsYSBjbGFzZSAnc3VibWl0LWJ1dHRvbidcclxuICAgICAgICAgICAgY29uc3Qgc3VibWl0QnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hZGRDYXJ0QnV0dG9uJyk7XHJcbiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4ge1xyXG4gICAgICAgICAgICAgICAgKGJ1dHRvbiBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVBpY3R1cmUgPSAocGljdHVyZSkgPT4ge1xyXG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBkYXRhLnBpY3R1cmUgPSBwaWN0dXJlO1xyXG4gICAgICAgIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QubmV4dChkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVFcnJvciA9IChlcnJvcikgPT4ge1xyXG4gICAgICAgIC8vIFdoYXRoZXZlciB3ZSBuZWVkIHRvIGRvIHdpdGggZXJyb3JcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBhZ3JlZ2EvYWN0dWFsaXphIHVuIGl0ZW0gZW4gZWwgY2Fycml0byBcclxuICAgICAqIEBwYXJhbSBxdWFudGl0eSBjYW50aWRhZCBhIGFncmVnYXJcclxuICAgICAqIEBwYXJhbSB2YXJpYW50X2NvZGUgKioob3BjaW9uYWwpKiogY29kaWdvIGRlIGxhIHZhcmlhbnRlIHNlbGVjY2lvbmFkYSBkZWwgcHJvZHVjdG8uXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYXJ0KHF1YW50aXR5LCB2YXJpYW50X2NvZGU/OiBzdHJpbmcpIHtcclxuICAgICAgICBxdWFudGl0eSA9IHBhcnNlSW50KHF1YW50aXR5KTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnZhcmlhbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnY2FudC1idXknKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcHJvZHVjdF9zZWxlY3RlZCA9IF8uY2xvbmUodGhpcy5wcm9kdWN0U3ViamVjdC52YWx1ZSk7XHJcblxyXG4gICAgICAgIGxldCB2YXJpYW50OiBhbnk7XHJcblxyXG4gICAgICAgIHN3aXRjaCAodGhpcy52YXJpYW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vLXZhcmlhbnRzJyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZS5zdG9jayA9PSAwID9cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrJykgOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSB0aGlzLnZhcmlhbnRzWzBdXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYW50X2NvZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gdGhpcy52YXJpYW50cy5maW5kKHZhcmlhbnQgPT4gdmFyaWFudC5jb2RlID09PSB2YXJpYW50X2NvZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RvY2sgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3ZhcmlhbnRzLWxlZnQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXZhcmlhbnQpIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVRdWFudGl0eShxdWFudGl0eSkpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgcHJpY2VUb1ZhbGlkYXRlID0gcHJvZHVjdF9zZWxlY3RlZC5zYWxlcHJpY2UgPyBwcm9kdWN0X3NlbGVjdGVkLnNhbGVwcmljZSAqIHF1YW50aXR5IDogcHJvZHVjdF9zZWxlY3RlZC5wcmljZSAqIHF1YW50aXR5O1xyXG4gICAgICAgIGlmICghdGhpcy52YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyhwcmljZVRvVmFsaWRhdGUpKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkVG9DYXJ0KHRoaXMubWFrZUFmZm9yZGFibGVQcm9kdWN0KHByb2R1Y3Rfc2VsZWN0ZWQpLCBxdWFudGl0eSwgdmFyaWFudC5jb2RlKTtcclxuICAgIH07XHJcblxyXG5cclxuXHJcbiAgICBhZGRUb0NhcnRQcm9taXNlID0gYXN5bmMgKHF1YW50aXR5KSA9PiB7XHJcbiAgICAgICAgcXVhbnRpdHkgPSBwYXJzZUludChxdWFudGl0eSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhcmlhbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgbWVzc2FnZTogJ2NhbnQtYnV5JyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcHJvZHVjdF9zZWxlY3RlZCA9IF8uY2xvbmUodGhpcy5wcm9kdWN0U3ViamVjdC52YWx1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFyaWFudHMubGVuZ3RoID4gMSB8fCB0aGlzLnZhcmlhbnRzLmxlbmd0aCA9PSAwIHx8IHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUuc3RvY2sgPT0gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YXJpYW50cy5sZW5ndGggPT0gMCkgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICduby12YXJpYW50cycgfTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52YXJpYW50cy5sZW5ndGggPiAxICYmIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUuc3RvY2sgPiAwKSByZXR1cm4geyBlcnJvcjogdHJ1ZSwgbWVzc2FnZTogJ3ZhcmlhbnRzLWxlZnQnIH07XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmFyaWFudHMubGVuZ3RoICE9IDAgJiYgdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZS5zdG9jayA9PSAwKSByZXR1cm4geyBlcnJvcjogdHJ1ZSwgbWVzc2FnZTogJ291dC1vZi1zdG9jaycgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUXVhbnRpdHkocXVhbnRpdHkpKSByZXR1cm47XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2FydFNlcnZpY2UuYWRkVG9DYXJ0UHJvbWlzZSh0aGlzLm1ha2VBZmZvcmRhYmxlUHJvZHVjdChwcm9kdWN0X3NlbGVjdGVkKSwgcXVhbnRpdHksIHRoaXMudmFyaWFudHNbMF0uY29kZSk7XHJcbiAgICAgICAgcmV0dXJuIChyZXN1bHQgJiYgIShyZXN1bHQuZXJyb3IpKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRPcHRpb25zID0gKHByb2R1Y3RfcmVjZWl2ZWQ/OiBQcm9kdWN0KSA9PiB7XHJcbiAgICAgICAgbGV0IHByb2R1Y3QgPSBwcm9kdWN0X3JlY2VpdmVkIHx8IHRoaXMucHJvZHVjdFN1YmplY3QudmFsdWU7XHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBbXTtcclxuICAgICAgICBwcm9kdWN0Lm9wdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgb3B0aW9ucy5wdXNoKHRoaXMudG9PcHRpb24oZWxlbWVudCkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0b09wdGlvbiA9IChwcmVvcHRpb24pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYW1lOiBwcmVvcHRpb24ubGFiZWwsXHJcbiAgICAgICAgICAgIGNvZGU6IHByZW9wdGlvbi5jb2RlLFxyXG4gICAgICAgICAgICB0eXBlOiBwcmVvcHRpb24udHlwZSxcclxuICAgICAgICAgICAgdmFsdWVzOiBwcmVvcHRpb24udmFsdWVzLm1hcCh2YWx1ZSA9PiAoeyBuYW1lOiB2YWx1ZS5jb2RlLCBkZXNjcmlwdGlvbjogdmFsdWUubmFtZSwgaW1hZ2U6IHZhbHVlLmltYWdlLCBtb2JpbGVJbWFnZTogdmFsdWUubW9iaWxlSW1hZ2UsIHNlbGVjdGVkOiBmYWxzZSB9KSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtYWtlQWZmb3JkYWJsZVByb2R1Y3QocHJvZHVjdF9zZWxlY3RlZDogUHJvZHVjdCkge1xyXG4gICAgICAgIHByb2R1Y3Rfc2VsZWN0ZWQucHJpY2UgPSBwYXJzZUZsb2F0KHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUucHJpY2UpO1xyXG4gICAgICAgIHByb2R1Y3Rfc2VsZWN0ZWQuc2FsZXByaWNlID0gcGFyc2VGbG9hdCh0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlLnByaWNlKTtcclxuICAgICAgICBwcm9kdWN0X3NlbGVjdGVkLm9wdGlvbnMgPSB7fTtcclxuICAgICAgICB0aGlzLnZhcmlhbnRzWzBdLm9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4gcHJvZHVjdF9zZWxlY3RlZC5vcHRpb25zID0geyAuLi5wcm9kdWN0X3NlbGVjdGVkLm9wdGlvbnMsIC4uLm9wdGlvbiB9KVxyXG4gICAgICAgIHJldHVybiBwcm9kdWN0X3NlbGVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlVmFyaWFudHMgPSAoY29kZT8pID0+IHtcclxuICAgICAgICBsZXQgdmFyaWFudHMgPSB0aGlzLnByb2R1Y3RTdWJqZWN0LnZhbHVlLnZhcmlhbnRzO1xyXG4gICAgICAgIGlmICghY29kZSkge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNTdWJqZWN0LnZhbHVlLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbi52YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzID0gdmFyaWFudHMuZmlsdGVyKHZhcmlhbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhbnQub3B0aW9ucy5zb21lKHZhcmlhbnRfb3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG9wdGlvbi5jb2RlIGluIHZhcmlhbnRfb3B0aW9uICYmIHZhcmlhbnRfb3B0aW9uW29wdGlvbi5jb2RlXSA9PSB2YWx1ZS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXJpYW50cyA9IHZhcmlhbnRzLmZpbHRlcih2YXJpYW50ID0+IHZhcmlhbnQuY29kZSA9PSBjb2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YXJpYW50cyA9IHZhcmlhbnRzO1xyXG4gICAgICAgIGNvZGUgJiYgdGhpcy51cGRhdGVPcHRpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVPcHRpb25zID0gKCkgPT4ge1xyXG4gICAgICAgIGxldCB7IG9wdGlvbnMgfSA9IHRoaXMudmFyaWFudHMubGVuZ3RoICYmIHRoaXMudmFyaWFudHNbMF07XHJcbiAgICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmZvckVhY2gob3B0aW9uID0+IE9iamVjdC5rZXlzKG9wdGlvbikuZm9yRWFjaChrZXkgPT4gdGhpcy5zZXRPcHRpb24oa2V5LCBvcHRpb25ba2V5XSkpKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2VuZXJhdGVBc29jaWF0ZWREYXRhRnJvbVZhcmlhbnRzID0gKCkgPT4ge1xyXG4gICAgICAgIGxldCBhc29jaWF0ZWQ6IGFueSA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZHkoKSkge1xyXG4gICAgICAgICAgICBhc29jaWF0ZWQuc3RvY2sgPSB0aGlzLnZhcmlhbnRzWzBdLnN0b2NrO1xyXG4gICAgICAgICAgICBhc29jaWF0ZWQucHJpY2UgPSB0aGlzLnZhcmlhbnRzWzBdLnByaWNlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5wcmljZVdpdGhvdXRUYXhlcyA9IHRoaXMudmFyaWFudHNbMF0ucHJpY2VXaXRob3V0VGF4ZXMudG9TdHJpbmcoKSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5zYWxlcHJpY2UgPSB0aGlzLnZhcmlhbnRzWzBdLnNhbGVwcmljZSAmJiB0aGlzLnZhcmlhbnRzWzBdLnNhbGVwcmljZS50b1N0cmluZygpIHx8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgYXNvY2lhdGVkLmRpc2NvdW50ID0gdGhpcy52YXJpYW50c1swXT8uZGlzY291bnQgfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBhc29jaWF0ZWQucHJvcGVydGllcyA9IHRoaXMudmFyaWFudHNbMF0ucHJvcGVydGllcyA/IHRoaXMuYmVhdXRpZnlQcm9wZXJ0aWVzKHRoaXMudmFyaWFudHNbMF0ucHJvcGVydGllcykgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC51bmlxdWVFeHRlcm5hbENvZGUgPSB0aGlzLnZhcmlhbnRzWzBdPy51bmlxdWVFeHRlcm5hbENvZGUgfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBhc29jaWF0ZWQubXVsdGlwbGVRdWFudGl0eSA9IHRoaXMudmFyaWFudHNbMF0/Lm11bHRpcGxlUXVhbnRpdHkgfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5wcmljZSA9IHRoaXMuY3JhdGVQcmljZSgpXHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5zYWxlcHJpY2UgPSB0aGlzLmNyYXRlU2FsZVByaWNlKClcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnN0b2NrID0gKHRoaXMudmFyaWFudHMubWFwKHZhcmlhbnQgPT4gdmFyaWFudC5zdG9jaykpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpXHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5kaXNjb3VudCA9IHRoaXMuY3JhdGVEaXNjb3VudCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAoJ2ltYWdlcycgaW4gdGhpcy52YXJpYW50c1swXSAmJiB0aGlzLnZhcmlhbnRzWzBdLmltYWdlcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICA/IGFzb2NpYXRlZC5waWN0dXJlID0gdGhpcy52YXJpYW50c1swXS5pbWFnZXNbMF1cclxuICAgICAgICAgICAgOiBhc29jaWF0ZWQucGljdHVyZSA9ICh0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlLnBpY3R1cmUgfHwgdGhpcy5wcm9kdWN0U3ViamVjdC52YWx1ZS5waWN0dXJlc2RlZmF1bHRbMF0pO1xyXG5cclxuXHJcbiAgICAgICAgYXNvY2lhdGVkLm1heGltdW1BbW91bnQgPSB0aGlzLnZhcmlhbnRzWzBdPy5tYXhpbXVtQW1vdW50IHx8IDBcclxuICAgICAgICBhc29jaWF0ZWQubWluaW11bUFtb3VudCA9IHRoaXMudmFyaWFudHNbMF0/Lm1pbmltdW1BbW91bnQgfHwgMFxyXG5cclxuICAgICAgICBhc29jaWF0ZWQubWF4aW11bUl0ZW1zUXVhbnRpdHkgPSB0aGlzLnZhcmlhbnRzWzBdPy5zdG9jayA+IDAgJiYgJ21heGltdW1JdGVtc1F1YW50aXR5JyBpbiB0aGlzLnZhcmlhbnRzWzBdID8gdGhpcy52YXJpYW50c1swXT8ubWF4aW11bUl0ZW1zUXVhbnRpdHkgOiB0aGlzLnZhcmlhbnRzWzBdPy5zdG9ja1xyXG4gICAgICAgIGFzb2NpYXRlZC5taW5pbXVtSXRlbXNRdWFudGl0eSA9IHRoaXMudmFyaWFudHNbMF0/LnN0b2NrID4gMCAmJiAnbWluaW11bUl0ZW1zUXVhbnRpdHknIGluIHRoaXMudmFyaWFudHNbMF1cclxuICAgICAgICAgICAgJiYgdGhpcy52YXJpYW50c1swXT8ubWluaW11bUl0ZW1zUXVhbnRpdHkgPiAwID8gdGhpcy52YXJpYW50c1swXT8ubWluaW11bUl0ZW1zUXVhbnRpdHlcclxuICAgICAgICAgICAgOiAodGhpcy52YXJpYW50c1swXT8ubXVsdGlwbGVRdWFudGl0eSA/IHRoaXMudmFyaWFudHNbMF0/Lm11bHRpcGxlUXVhbnRpdHkgOiAxKVxyXG5cclxuICAgICAgICBhc29jaWF0ZWQuZmluYWxDb25zdW1lciA9IHtcclxuICAgICAgICAgICAgZmluYWxDb25zdW1lclByaWNlOiB0aGlzLnZhcmlhbnRzWzBdPy5maW5hbF9jb25zdW1lcl9wcmljZSxcclxuICAgICAgICAgICAgb3JpZ2luYWxGaW5hbENvbnN1bWVyUHJpY2U6IHRoaXMudmFyaWFudHNbMF0/Lm9yaWdpbmFsX2ZpbmFsX2NvbnN1bWVyX3ByaWNlLFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXNvY2lhdGVkLnRheGVzID0ge1xyXG4gICAgICAgICAgICB0YXhJbmNsdWRlZDogdGhpcy52YXJpYW50c1swXT8udGF4SW5jbHVkZWQsXHJcbiAgICAgICAgICAgIHRheENhdGVnb3J5OiB0aGlzLnZhcmlhbnRzWzBdPy50YXhDYXRlZ29yeSxcclxuICAgICAgICB9XHJcbiAgICAgICAgYXNvY2lhdGVkLnRheGVBbW91bnQgPSB0aGlzLnZhcmlhbnRzWzBdPy50YXhlcyB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgYXNvY2lhdGVkLnRheFJhdGUgPSB0aGlzLnZhcmlhbnRzWzBdPy50YXhSYXRlIHx8IHVuZGVmaW5lZDtcclxuICAgICAgICBhc29jaWF0ZWQucHJpY2VXaXRob3V0VGF4ZXMgPSB0aGlzLnZhcmlhbnRzWzBdPy5wcmljZVdpdGhvdXRUYXhlcyB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QubmV4dChhc29jaWF0ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJlY2liZSBsYXMgcHJvcGllZGFkZXMgZGUgdW5hIHZhcmlhbnRlIHkgcG9yIGNhZGEgaXRlbSBhcm1hIHVuIG9iamV0byBjb24gXHJcbiAgICAgKiBlbCBuYW1lPWNsYXZlIHkgdmFsdWU9dmFsb3IgZGUgZXNlIGl0ZW0uICBcclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIFxyXG4gICAgICogQHJldHVybnMgVW4gYXJyZWdsbyBjb24gbGFzIHByb3BpZWRhZGVzIGRlIGxhIGZvcm1hIHsgbmFtZSA9IC4uLiAsIHZhbHVlID0gLi4ufVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGJlYXV0aWZ5UHJvcGVydGllcyA9IChwcm9wZXJ0aWVzKSA9PiB7XHJcbiAgICAgICAgbGV0IGJlYXV0aWZ5RGF0YSA9IFtdXHJcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHByb3AgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgYmVhdXRpZnlEYXRhLnB1c2goeyBuYW1lOiBrZXksIHZhbHVlOiBwcm9wW2tleV0gfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBiZWF1dGlmeURhdGFcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyYXRlRGlzY291bnQgPSAoKSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGFsbF9kaXNjb3VudCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXJpYW50LmRpc2NvdW50ICYmIChhbGxfZGlzY291bnQgPSBhbGxfZGlzY291bnQgKyAnLCAnICsgdmFyaWFudC5kaXNjb3VudCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoYWxsX2Rpc2NvdW50ID09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGFsbF9kaXNjb3VudFxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmF0ZVByaWNlID0gKCkgPT4ge1xyXG4gICAgICAgIGxldCBtaW5fcHJpY2UgPSAwO1xyXG4gICAgICAgIGxldCBtYXhfcHJpY2UgPSAwO1xyXG4gICAgICAgIGxldCBhbGxfcHJpY2VzID0gW107XHJcbiAgICAgICAgdGhpcy52YXJpYW50cy5mb3JFYWNoKHZhcmlhbnQgPT4ge1xyXG4gICAgICAgICAgICBhbGxfcHJpY2VzLnB1c2godmFyaWFudC5wcmljZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbWluX3ByaWNlID0gYWxsX3ByaWNlcy5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWluKGEsIGIpKTtcclxuICAgICAgICBtYXhfcHJpY2UgPSBhbGxfcHJpY2VzLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5tYXgoYSwgYiksIDApO1xyXG4gICAgICAgIHJldHVybiBtaW5fcHJpY2UgPT0gbWF4X3ByaWNlID8gbWF4X3ByaWNlLnRvU3RyaW5nKCkgOiBtaW5fcHJpY2UgKyAnIC0gJyArIG1heF9wcmljZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyYXRlU2FsZVByaWNlID0gKCkgPT4ge1xyXG4gICAgICAgIGxldCBtaW5fcHJpY2UgPSAwO1xyXG4gICAgICAgIGxldCBtYXhfcHJpY2UgPSAwO1xyXG4gICAgICAgIGxldCBhbGxfcHJpY2VzID0gW107XHJcbiAgICAgICAgdGhpcy52YXJpYW50cy5mb3JFYWNoKHZhcmlhbnQgPT4ge1xyXG4gICAgICAgICAgICB2YXJpYW50LnNhbGVwcmljZSAmJiBhbGxfcHJpY2VzLnB1c2godmFyaWFudC5zYWxlcHJpY2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghYWxsX3ByaWNlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgICAgICBtaW5fcHJpY2UgPSBhbGxfcHJpY2VzLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5taW4oYSwgYikpO1xyXG4gICAgICAgIG1heF9wcmljZSA9IGFsbF9wcmljZXMucmVkdWNlKChhLCBiKSA9PiBNYXRoLm1heChhLCBiKSwgMCk7XHJcbiAgICAgICAgcmV0dXJuIG1pbl9wcmljZSA9PSBtYXhfcHJpY2UgPyBtYXhfcHJpY2UudG9TdHJpbmcoKSA6IG1pbl9wcmljZSArICcgLSAnICsgbWF4X3ByaWNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5SYW5nZSA9IChxdWFudGl0eSwgbWluLCBtYXgpID0+ICgocXVhbnRpdHkgLSBtaW4pICogKHF1YW50aXR5IC0gbWF4KSA8PSAwKVxyXG5cclxuICAgIHByaXZhdGUgdmFsaWRhdGVRdWFudGl0eSA9IChxdWFudGl0eTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYWN0dWFsUXVhbnRpdHkgPSB0aGlzLmNhcnRTZXJ2aWNlLmdldENvdW50RnJvbUl0ZW1JbkNhcnQodGhpcy52YXJpYW50c1swXS5jb2RlKTtcclxuICAgICAgICBjb25zdCBhc29jaWF0ZWREYXRhID0gdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBjb25zb2xlLmxvZygnTGEgY2FudGlkYWQgcXVlIGxsZWdvOiAnLCBxdWFudGl0eSwgJyB5IGxhIGNhbnRpZGFkIGFjdHVhbDogJywgYWN0dWFsUXVhbnRpdHkpO1xyXG4gICAgICAgIGlmICgoYWN0dWFsUXVhbnRpdHkgKyBxdWFudGl0eSkgPiBhc29jaWF0ZWREYXRhLm1heGltdW1JdGVtc1F1YW50aXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtYXhpbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogYXNvY2lhdGVkRGF0YS5tYXhpbXVtSXRlbXNRdWFudGl0eSB9KVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoYWN0dWFsUXVhbnRpdHkgKyBxdWFudGl0eSkgPCBhc29jaWF0ZWREYXRhLm1pbmltdW1JdGVtc1F1YW50aXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtaW5pbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogYXNvY2lhdGVkRGF0YS5taW5pbXVtSXRlbXNRdWFudGl0eSB9KVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyA9IChwcmljZTogbnVtYmVyKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3JlZGl0QW1vdW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdObyBoYXkgY29uZmlndXJhY2nDs24gZGUgY3LDqWRpdG9zIHBhcmEgZXN0ZSB1c3VhcmlvLicpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlbWFpbmluZ0NyZWRpdHMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocHJpY2UgPiB0aGlzLnJlbWFpbmluZ0NyZWRpdHMpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIHByaXZhdGUgZmV0Y2hDYXJ0RGF0YSA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmdldFRvdGFsQW1vdW50KCkuc3Vic2NyaWJlKCh0b3RhbEFtb3VudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb3RhbEFtb3VudCA9IHRvdGFsQW1vdW50O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmdldENyZWRpdEFtb3VudCgpLnN1YnNjcmliZSgoY3JlZGl0QW1vdW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0QW1vdW50ID0gY3JlZGl0QW1vdW50O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmdldFJlbWFpbmluZ0NyZWRpdHMoKS5zdWJzY3JpYmUoKHJlbWFpbmluZ0NyZWRpdHMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZW1haW5pbmdDcmVkaXRzID0gcmVtYWluaW5nQ3JlZGl0cztcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gQ3VhbmRvIGhheWEgbW9kZWxvcyBkZSByZXNwdWVzdGEsIHZhbGlkYW1vcyBxdWUgbm8gc2UgaW50ZW50ZSBjYXJnYXIgdW4gcHJvZHVjdG8gaW5jb21wbGV0b1xyXG4gICAgcHJpdmF0ZSBpc1Byb2R1Y3RWYWxpZCA9IChwcm9kdWN0OiBQcm9kdWN0KSA9PiB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBcnJheSBkZSBWYXJpYW50ZXMgeSBzdXMgdmFsb3Jlc1xyXG4gICAgICogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0b3JuYSB1bmEgbGlzdGEgZmlsdHJhZGEgZGUgbGFzIHZhcmlhbnRlcyBxdWUgZXN0YW4gc2VsZWNjaW9uYWRhc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFZhcmlhbnRzU2VsZWN0ZWQob3B0aW9uczogYW55LCBvcHRpb25zRXhjZXB0aW9uOiBBcnJheTxhbnk+KTogQXJyYXk8T2JqZWN0PiB7XHJcblxyXG4gICAgICAgIGxldCB2YXJpYW50c1NlbGVjdGVkID0gW107XHJcbiAgICAgICAgb3B0aW9ucy5mb3JFYWNoKHYgPT4ge1xyXG4gICAgICAgICAgICBpZiAodi52YWx1ZXMgJiYgdi52YWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB2LnZhbHVlcy5mb3JFYWNoKHZhbCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC5zZWxlY3RlZCAmJiAhb3B0aW9uc0V4Y2VwdGlvbi5maW5kKG9wID0+IG9wLnRvVXBwZXJDYXNlKCkgPT0gdi5jb2RlLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzU2VsZWN0ZWRbdi5jb2RlXSA9IHZhbC5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHZhcmlhbnRzU2VsZWN0ZWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBcnJheSBkZSBWYXJpYW50ZXMgeSBzdXMgdmFsb3Jlc1xyXG4gICAgICogQHBhcmFtIHZhcmlhbnRzIFRvZGFzIGxhcyB2YXJpYW50ZXMgZGlzcG9uaWJsZXMgZGVsIHByb2R1Y3RvXHJcbiAgICAgKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiByZXRvcm5hIHRvZGFzIGxhcyB2YXJpYW50ZXMgZGlzcG9uaWJsZXMgYSBzZWxlY2Npb24geSBzdSBzdG9ja1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VmFyaWFudHNBdmFpbGFibGUob3B0aW9uczogYW55LCB2YXJpYW50czogYW55LCBvcHRpb25zRXhjZXB0aW9uOiBBcnJheTxhbnk+KTogYW55IHtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhbnRzU2VsZWN0ZWQgPSB0aGlzLmdldFZhcmlhbnRzU2VsZWN0ZWQob3B0aW9ucywgb3B0aW9uc0V4Y2VwdGlvbik7XHJcblxyXG4gICAgICAgIGxldCB2YXJpYW50c0F2YWlsYWJsZSA9IFtdO1xyXG5cclxuICAgICAgICB2YXJpYW50cy5tYXAodiA9PiB7XHJcblxyXG4gICAgICAgICAgICBsZXQgYXV4ID0ge307XHJcbiAgICAgICAgICAgIGlmICh2Lm9wdGlvbnMgJiYgdi5vcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdi5vcHRpb25zLm1hcChvcCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhdXgsIG9wLCB7IHN0b2NrOiB2LnN0b2NrIH0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXJpYW50c0F2YWlsYWJsZS5wdXNoKGF1eCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gdmFyaWFudHNBdmFpbGFibGUuZmlsdGVyKHZhID0+IHRoaXMuY29uc3RhbnRzLmNvbnRhaW5zQWxsKHsgLi4udmFyaWFudHNTZWxlY3RlZCB9LCB2YSkpXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBcnJheSBkZSB2YXJpYW50ZXMgeSBzdXMgdmFsb3Jlc1xyXG4gICAgICogQHBhcmFtIGNvZGUgQ29kaWdvIGRlIGxhIHZhcmlhbnRlIGEgYnVzY2FyXHJcbiAgICAgKiBAcGFyYW0gbmFtZSBub21icmUgZGUgbGEgdmFyaWFudGUgYSBidXNjYXJcclxuICAgICAqIEBwYXJhbSB2YXJpYW50cyB2YXJpYW50ZXMgZGVsIHByb2R1Y3RvXHJcbiAgICAgKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBidXNjYSBlbiBsYSBsaXN0YSBkZSB2YXJpYW50ZXMgZGlzcG9uaWJsZXMgc2kgaGF5IGRlIGVzZSBjb2RpZ28sIGVzZSBub21icmUgeSBjb24gc3RvY2sgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleGlzdFZhcmlhbnRBbmRIYXNTdG9jayhvcHRpb25zLCBjb2RlLCBuYW1lLCB2YXJpYW50cywgb3B0aW9uc0V4Y2VwdGlvbiA9IFtdKTogYm9vbGVhbiB7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFZhcmlhbnRzQXZhaWxhYmxlKG9wdGlvbnMsIHZhcmlhbnRzLCBvcHRpb25zRXhjZXB0aW9uKS5maW5kKHZhID0+XHJcbiAgICAgICAgICAgIHZhLmhhc093blByb3BlcnR5KGNvZGUpICYmIHZhW2NvZGVdID09PSBuYW1lICYmIHZhLnN0b2NrID4gMClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHByb2R1Y3QgcHJvZHVjdG8gZWwgY3VhbCBzZSBxdWllcmUgZGVzZG9ibGFyIHBvciB2YXJpYW50ZXMgcG9yIHVuYSBvcGNpw7NuLlxyXG4gICAgICogQHBhcmFtIHdpdGhPcHRpb24gJ3R5cGUnIHRpcG8gZGUgb3BjacOzbiwgY29kZTogY8OzZGlnbyBkZSBsYSBvcGNpw7NuLiAnZGVmYXVsdEZpcnN0T3B0aW9uJzogZW4gY2FzbyBkZSBxdWUgbm8gc2UgcHVlZGEgZGVzZG9ibGFyIHBvciBsYSBvcGNpw7NuIGluZGljYWRhIHNpIGVsIHZhbG9yIGVzIHZlcmRhZGVybyBzZSBpbnRlbnRhcmEgZGVzZG9ibGFyIHBvciBsYSBwcmltZXJhIG9wY2nDs24gYXNvY2lhZGEgYWwgcHJvZHVjdG8uXHJcbiAgICAgKiAnY2hlY2tJZlN0b2NrJzogZW4gY2FzbyBkZSBxdWUgZXN0YSB2YWxvciBzZWEgdmVyZGFkZXJvIHNlIHJlYWxpemEgdW4gY29udHJvbCBkZSBxdWUgbGEgdmFyaWFudGVzIGN1ZW50ZW4gY29uIHN0b2NrIHBhcmEgc2VyIHVuIHByb2R1Y3RvIGRlc2RvYmxhZG8gcG9yIGxhIHZhcmlhbnRlLCBzaSBlbCB2YWxvciBlcyBmYWxzbyBubyBzZSByZWFsaXphIGRpY2hvIGNvbnRyb2wgeSBlbCBwcm9kdWN0byBzZSBkZXNkb2JsYXJhIGNvbiBzdG9jayBlbiAwLlxyXG4gICAgICogQHJldHVybnMgYXJyZWdsbyBjb24gZWwgcHJvZHVjdG8gZGVzZG9ibGFkbyBwb3IgbGEgdmFyaWFudGUgc29saWNpdGFkYS5cclxuICAgICAqIChvcGNpw7NuIHBvciBkZWZlY3RvIHF1ZSBzZSBpbnRlbnRhIGhhY2VyIGVsIGRlc2RvYmxhbWllbnRvICdjb2xvcicsIG8gYmllbiBzaSBlbiBsZSBwYXLDoW1ldHJvIHdpdGhPcHRpb24gZWwgYXRyaWJ1dG8gJ2RlZmF1bHRGaXJzdE9wdGlvbicgZXMgdmVyZGFkZXJvIHNlIGRlc2RvYmxhIHBvciBsYSBwcmltZXJhIG9wY2nDs24gYXNvY2lhZGEgYWwgcHJvZHVjdG8gKSBcclxuICAgICAqL1xyXG4gICAgZ2V0UHJvZHVjdFdpdGhVbmlxdWVWYXJpYW50ID0gKHByb2R1Y3QsIHdpdGhPcHRpb24/OiBQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZHVjdHNTZXJ2aWNlLmdldFByb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQoW3Byb2R1Y3RdLCB3aXRoT3B0aW9uKVxyXG4gICAgfVxyXG5cclxufSJdfQ==
|
|
@@ -67,6 +67,9 @@ var PriceEcComponent = /** @class */ (function (_super) {
|
|
|
67
67
|
__decorate([
|
|
68
68
|
Input()
|
|
69
69
|
], PriceEcComponent.prototype, "saleprice", void 0);
|
|
70
|
+
__decorate([
|
|
71
|
+
Input()
|
|
72
|
+
], PriceEcComponent.prototype, "priceWithoutTaxes", void 0);
|
|
70
73
|
__decorate([
|
|
71
74
|
Input()
|
|
72
75
|
], PriceEcComponent.prototype, "priceSize", void 0);
|
|
@@ -116,4 +119,4 @@ var PriceEcComponent = /** @class */ (function (_super) {
|
|
|
116
119
|
return PriceEcComponent;
|
|
117
120
|
}(ComponentHelper));
|
|
118
121
|
export { PriceEcComponent };
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2UtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC93aWRnZXRzLWVjL3ByaWNlLWVjL3ByaWNlLWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFRaEY7SUFBc0Msb0NBQWU7SUF3QmpELDBCQUFtQixlQUFnQyxFQUFVLG9CQUEwQztRQUF2RyxZQUNJLGlCQUFPLFNBRVY7UUFIa0IscUJBQWUsR0FBZixlQUFlLENBQWlCO1FBQVUsMEJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQW5COUYsZUFBUyxHQUFZLElBQUksQ0FBQztRQUcxQixnQkFBVSxHQUFXLENBQUMsQ0FBQztRQUN2QixXQUFLLEdBQXVDLEVBQUUsQ0FBQztRQUMvQyx1QkFBaUIsR0FBWSxLQUFLLENBQUM7UUFDbkMsb0JBQWMsR0FBWSxLQUFLLENBQUM7UUFVbEMsbUJBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsZUFBUyxHQUFZLEtBQUssQ0FBQztRQUk5QixLQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7O0lBQ3pCLENBQUM7SUFFRCxtQ0FBUSxHQUFSO1FBQUEsaUJBTUM7UUFMRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxVQUFBLE9BQU87O1lBQ3RELEtBQUksQ0FBQyxhQUFhLFNBQUcsT0FBTywwQ0FBRSxhQUFhLENBQUM7WUFDNUMsS0FBSSxDQUFDLFNBQVMsZUFBRyxPQUFPLDBDQUFFLFNBQVMsdUNBQUksS0FBSyxFQUFBLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELHNCQUFJLDZDQUFlO2FBQW5CO1lBQ0ksT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjO2dCQUN2QixJQUFJLENBQUMsYUFBYTtnQkFDbEIsQ0FBQyxJQUFJLENBQUMsU0FBUztnQkFDZixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVM7Z0JBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzFCLENBQUM7OztPQUFBOztnQkFuQm1DLGVBQWU7Z0JBQWdDLG9CQUFvQjs7SUF0QjlGO1FBQVIsS0FBSyxFQUFFO21EQUFlO0lBQ2Q7UUFBUixLQUFLLEVBQUU7dURBQW1CO0lBQ2xCO1FBQVIsS0FBSyxFQUFFOytEQUEyQjtJQUMxQjtRQUFSLEtBQUssRUFBRTt1REFBMkI7SUFDMUI7UUFBUixLQUFLLEVBQUU7NkRBQXlCO0lBQ3hCO1FBQVIsS0FBSyxFQUFFO3VEQUFtQjtJQUNsQjtRQUFSLEtBQUssRUFBRTt3REFBd0I7SUFDdkI7UUFBUixLQUFLLEVBQUU7bURBQWdEO0lBQy9DO1FBQVIsS0FBSyxFQUFFOytEQUFvQztJQUNuQztRQUFSLEtBQUssRUFBRTs0REFBaUM7SUFHaEM7UUFBUixLQUFLLEVBQUU7aUVBQXVDO0lBQ3RDO1FBQVIsS0FBSyxFQUFFO3FFQUEyQztJQUMxQztRQUFSLEtBQUssRUFBRTt1RUFBNkM7SUFDNUM7UUFBUixLQUFLLEVBQUU7MkVBQWlEO0lBQ2hEO1FBQVIsS0FBSyxFQUFFOytEQUFxQztJQUNwQztRQUFSLEtBQUssRUFBRTt3RUFBOEM7SUFuQjdDLGdCQUFnQjtRQUw1QixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsY0FBYztZQUN4QiwyNUhBQXNDOztTQUV6QyxDQUFDO09BQ1csZ0JBQWdCLENBNEM1QjtJQUFELHVCQUFDO0NBQUEsQUE1Q0QsQ0FBc0MsZUFBZSxHQTRDcEQ7U0E1Q1ksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyJztcclxuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYXBwLXByaWNlLWVjJyxcclxuICAgIHRlbXBsYXRlVXJsOiAncHJpY2UtZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJ3ByaWNlLWVjLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFByaWNlRWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIEBJbnB1dCgpIHByaWNlOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBzYWxlcHJpY2U6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHByaWNlV2l0aG91dFRheGVzOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwcmljZVNpemU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgY2xhc3NTdHJTcGFjaW5nOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBiYXNlUHJpY2U6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHRheGVBbW91bnQ6IG51bWJlciA9IDA7XHJcbiAgICBASW5wdXQoKSB0YXhlczogeyBuYW1lOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyIH1bXSA9IFtdO1xyXG4gICAgQElucHV0KCkgc2hvd1RheExlZ2VuZE9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGRpc2FibGVUYXhJbmZvOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLy8gVGVtcGxhdGVzIGV4dGVybm9zXHJcbiAgICBASW5wdXQoKSBjdXN0b21QcmljZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQElucHV0KCkgY3VzdG9tU2FsZVByaWNlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBASW5wdXQoKSBjdXN0b21TaW1wbGVQcmljZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQElucHV0KCkgY3VzdG9tU2ltcGxlU2FsZVByaWNlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBASW5wdXQoKSBjdXN0b21UYXhUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBJbnB1dCgpIGN1c3RvbU9ubHlUYXhMYWJlbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIHB1YmxpYyBzaG93VGF4TGVnZW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGlkZVRheGVzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIHByb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlLCBwcml2YXRlIGNoYW5uZWxDb25maWdTZXJ2aWNlOiBDaGFubmVsQ29uZmlnU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoY2hhbm5lbCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RheExlZ2VuZCA9IGNoYW5uZWw/LnNob3dUYXhMZWdlbmQ7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZVRheGVzID0gY2hhbm5lbD8uaGlkZVRheGVzID8/IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZWNPbkluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2hvdWxkU2hvd1RheGVzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5kaXNhYmxlVGF4SW5mbyAmJlxyXG4gICAgICAgICAgICB0aGlzLnNob3dUYXhMZWdlbmQgJiZcclxuICAgICAgICAgICAgIXRoaXMuaGlkZVRheGVzICYmXHJcbiAgICAgICAgICAgICEhdGhpcy5iYXNlUHJpY2UgJiZcclxuICAgICAgICAgICAgISF0aGlzLnRheGVBbW91bnQ7XHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -229,6 +229,7 @@ var ProductDetailService = /** @class */ (function () {
|
|
|
229
229
|
if (_this.isReady()) {
|
|
230
230
|
asociated.stock = _this.variants[0].stock;
|
|
231
231
|
asociated.price = _this.variants[0].price.toString();
|
|
232
|
+
asociated.priceWithoutTaxes = _this.variants[0].priceWithoutTaxes.toString() || undefined;
|
|
232
233
|
asociated.saleprice = _this.variants[0].saleprice && _this.variants[0].saleprice.toString() || undefined;
|
|
233
234
|
asociated.discount = ((_a = _this.variants[0]) === null || _a === void 0 ? void 0 : _a.discount) || undefined;
|
|
234
235
|
asociated.properties = _this.variants[0].properties ? _this.beautifyProperties(_this.variants[0].properties) : undefined;
|
|
@@ -494,4 +495,4 @@ var ProductDetailService = /** @class */ (function () {
|
|
|
494
495
|
return ProductDetailService;
|
|
495
496
|
}());
|
|
496
497
|
export { ProductDetailService };
|
|
497
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0LWRldGFpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUF5QixNQUFNLE1BQU0sQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd0RDtJQWVJLDhCQUNZLGVBQWdDLEVBQVUsV0FBd0IsRUFBVSxhQUEyQixFQUN2RyxTQUFvQixFQUFTLGdCQUFrQyxFQUFTLGVBQWdDO1FBRnBILGlCQUdDO1FBRlcsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUN2RyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUFTLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQWY1RyxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFVLEVBQUUsQ0FBQyxDQUFDO1FB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QkFuYTRCLGVBQWU7Z0JBQXVCLFdBQVc7Z0JBQXlCLFlBQVk7Z0JBQzVGLFNBQVM7Z0JBQTJCLGdCQUFnQjtnQkFBMEIsZUFBZTs7SUFqQjNHLG9CQUFvQjtRQURoQyxVQUFVLEVBQUU7T0FDQSxvQkFBb0IsQ0FpY2hDO0lBQUQsMkJBQUM7Q0FBQSxBQWpjRCxJQWljQztTQWpjWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgcGFydGl0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFByb2R1Y3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3Byb2R1Y3QnO1xyXG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuL3Byb2R1Y3RzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3V0aWxzL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb3JlLmNvbnN0cyc7XHJcbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uL2FuYWx5dGljcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcGFyYW1zSW50ZXJmYWNlcy9wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50JztcclxuaW1wb3J0IHsgQ3VycmVuY3lTZXJ2aWNlIH0gZnJvbSAnLi4vY3VycmVuY3kuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0RGV0YWlsU2VydmljZSB7XHJcblxyXG4gICAgcHJpdmF0ZSBwcm9kdWN0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJvZHVjdD4oe30pO1xyXG4gICAgcHJpdmF0ZSBvcHRpb25zU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XHJcbiAgICBwcml2YXRlIGFzb2NpYXRlZERhdGFTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHsgcHJpY2U6ICcnLCBzdG9jazogMCwgcGljdHVyZTogJycgfSk7XHJcblxyXG4gICAgcHJpdmF0ZSB2YXJpYW50cyA9IFtdXHJcblxyXG4gICAgcHVibGljIHByb2R1Y3QkID0gdGhpcy5wcm9kdWN0U3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBvcHRpb25zJCA9IHRoaXMub3B0aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgYXNvY2lhdGVkRGF0YSQgPSB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50VG90YWxBbW91bnQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgY3JlZGl0QW1vdW50OiBudW1iZXIgfCBudWxsO1xyXG4gICAgcHJpdmF0ZSByZW1haW5pbmdDcmVkaXRzOiBudW1iZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBwcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSwgcHJpdmF0ZSBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsIHByaXZhdGUgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY29uc3RhbnRzOiBDb25zdGFudHMsIHB1YmxpYyBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLCBwdWJsaWMgY3VycmVuY3lTZXJ2aWNlOiBDdXJyZW5jeVNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogQHBhcmFtIGNvZGUgSWRlbnRpZmljYWRvciBkZWwgcHJvZHVjdG9cclxuICAgICogQHBhcmFtIHZhcmlhbnQgSW5kaWNhIHNpIHNlIGVzdMOhIHNvbGljaXRhbmRvIHVuIHByb2R1Y3RvIHBvciBzdSBjb2RpZ28sIG8gcG9yIGVsIGNvZGlnbyBjb3JyZXNwb25kaWVudGUgYSB1bmEgZGUgc3VzIHZhcmlhbnRlc1xyXG4gICAgKiAgXHJcbiAgICAqIENhcmdhIGVsIHByb2R1Y3RvIHNvbGljaXRhZG8gYXN5bmNyb25pY2FtZW50ZSBzaW4gcmVzcHVlc3RhIFxyXG4gICAgKi9cclxuICAgIGxvYWRQcm9kdWN0ID0gKGNvZGUsIHZhcmlhbnQ6IGJvb2xlYW4gPSBmYWxzZSkgPT5cclxuICAgICAgICB0aGlzLnByb2R1Y3RzU2VydmljZS5nZXRTcGVjaWZpY1Byb2R1Y3QoY29kZSwgdmFyaWFudCkudG9Qcm9taXNlKCkudGhlbihcclxuICAgICAgICAgICAgcmVzID0+IHZhcmlhbnQgPyB0aGlzLmluaXRpYWxpemUocmVzLCBjb2RlKSA6IHRoaXMuaW5pdGlhbGl6ZShyZXMpLFxyXG4gICAgICAgICAgICBlcnIgPT4gdGhpcy5wcm9kdWN0U3ViamVjdC5uZXh0KG51bGwpXHJcbiAgICAgICAgKVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHByb2R1Y3RfaWQgSWRlbnRpZmljYWRvciBkZWwgcHJvZHVjdG9cclxuICAgICAqIEBwYXJhbSB2YXJpYW50IEluZGljYSBzaSBzZSBlc3TDoSBzb2xpY2l0YW5kbyB1biBwcm9kdWN0byBwb3Igc3UgY29kaWdvLCBvIHBvciBlbCBjb2RpZ28gY29ycmVzcG9uZGllbnRlIGEgdW5hIGRlIHN1cyB2YXJpYW50ZXNcclxuICAgICAqIEBhc3luY1xyXG4gICAgICogIFxyXG4gICAgICogQSBkaWZlcmVuY2lhIGRlbCBtZXRvZG8gbG9hZFByb2R1Y3QsIGVzdGUgcmV0b3JuYSB1biB2YWxvciBjdWFuZG8gdGVybWluYSBcclxuICAgICAqL1xyXG4gICAgZ2V0UHJvZHVjdCA9IGFzeW5jIChwcm9kdWN0X2lkLCB2YXJpYW50OiBib29sZWFuID0gZmFsc2UpID0+IHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9kdWN0c1NlcnZpY2UuZ2V0U3BlY2lmaWNQcm9kdWN0KHByb2R1Y3RfaWQsIHZhcmlhbnQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC5lcnJvcikgdGhpcy5wcm9kdWN0U3ViamVjdC5uZXh0KG51bGwpO1xyXG4gICAgICAgIGVsc2UgdmFyaWFudCA/IHRoaXMuaW5pdGlhbGl6ZShyZXN1bHQsIHByb2R1Y3RfaWQpIDogdGhpcy5pbml0aWFsaXplKHJlc3VsdCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplID0gKHByb2R1Y3QsIHZhcmlhbnRfY29kZT8pID0+IHtcclxuICAgICAgICB0aGlzLnByb2R1Y3RTdWJqZWN0Lm5leHQocHJvZHVjdCk7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zU3ViamVjdC5uZXh0KHRoaXMuZ2V0T3B0aW9ucygpKVxyXG4gICAgICAgIHZhcmlhbnRfY29kZSA/IHRoaXMudXBkYXRlVmFyaWFudHModmFyaWFudF9jb2RlKSA6IHRoaXMudXBkYXRlVmFyaWFudHMoKTtcclxuICAgICAgICB0aGlzLnZhcmlhbnRzLmxlbmd0aCAmJiB0aGlzLmdlbmVyYXRlQXNvY2lhdGVkRGF0YUZyb21WYXJpYW50cygpO1xyXG4gICAgICAgIHRoaXMuZmV0Y2hDYXJ0RGF0YSgpXHJcbiAgICAgICAgLy90aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCd2aWV3X2l0ZW0nLCB7IC4uLnByb2R1Y3QsIGN1cnJlbmN5OiB0aGlzLmNvbnN0YW50cy5jdXJyZW5jeS5jb2RlIH0pXHJcbiAgICAgICAgLy8gdmFyaWFudF9jb2RlICYmIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3ZpZXdfaXRlbScsIHsgLi4ucHJvZHVjdCwgY3VycmVuY3k6IHRoaXMuY29uc3RhbnRzLmN1cnJlbmN5LmNvZGUgfSlcclxuICAgIH1cclxuXHJcbiAgICBzZXRQcm9kdWN0ID0gKHByb2R1Y3QpID0+IHRoaXMuaXNQcm9kdWN0VmFsaWQocHJvZHVjdCkgJiYgdGhpcy5pbml0aWFsaXplKHByb2R1Y3QpO1xyXG5cclxuICAgIGlzUmVhZHkgPSAoKSA9PiB0aGlzLnZhcmlhbnRzLmxlbmd0aCA9PSAxO1xyXG5cclxuICAgIHNldE9wdGlvbiA9IChvcHRpb25fY29kZSwgb3B0aW9uX3ZhbHVlKSA9PiB7XHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCBvcHRpb24gPSBvcHRpb25zLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LmNvZGUgPT0gb3B0aW9uX2NvZGUpLnZhbHVlcy5maW5kKHZhbHVlID0+IHZhbHVlLm5hbWUgPT0gb3B0aW9uX3ZhbHVlKTtcclxuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSAhb3B0aW9uLnNlbGVjdGVkO1xyXG4gICAgICAgIG9wdGlvbnMuZmluZChlbGVtZW50ID0+IGVsZW1lbnQuY29kZSA9PSBvcHRpb25fY29kZSkudmFsdWVzLmZvckVhY2goXHJcbiAgICAgICAgICAgIHZhbHVlID0+IHsgaWYgKHZhbHVlLm5hbWUgIT0gb3B0aW9uLm5hbWUpIHZhbHVlLnNlbGVjdGVkID0gZmFsc2UgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zU3ViamVjdC5uZXh0KG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmFyaWFudHMoKTtcclxuICAgICAgICBpZiAodGhpcy52YXJpYW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIEhhYmlsaXRhciB0b2RvcyBsb3MgYm90b25lcyBjb24gbGEgY2xhc2UgJ2FkZENhcnRCdXR0b24nXHJcbiAgICAgICAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYWRkQ2FydEJ1dHRvbicpO1xyXG4gICAgICAgICAgICBzdWJtaXRCdXR0b25zLmZvckVhY2goYnV0dG9uID0+IHtcclxuICAgICAgICAgICAgICAgIChidXR0b24gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlQXNvY2lhdGVkRGF0YUZyb21WYXJpYW50cygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdzZWxlY3Rpb24tbm90LWF2YWlsYWJsZScpO1xyXG5cclxuICAgICAgICAgICAgLy8gRGVzaGFiaWxpdGFyIHRvZG9zIGxvcyBib3RvbmVzIGNvbiBsYSBjbGFzZSAnc3VibWl0LWJ1dHRvbidcclxuICAgICAgICAgICAgY29uc3Qgc3VibWl0QnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hZGRDYXJ0QnV0dG9uJyk7XHJcbiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4ge1xyXG4gICAgICAgICAgICAgICAgKGJ1dHRvbiBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVBpY3R1cmUgPSAocGljdHVyZSkgPT4ge1xyXG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBkYXRhLnBpY3R1cmUgPSBwaWN0dXJlO1xyXG4gICAgICAgIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QubmV4dChkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVFcnJvciA9IChlcnJvcikgPT4ge1xyXG4gICAgICAgIC8vIFdoYXRoZXZlciB3ZSBuZWVkIHRvIGRvIHdpdGggZXJyb3JcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBhZ3JlZ2EvYWN0dWFsaXphIHVuIGl0ZW0gZW4gZWwgY2Fycml0byBcclxuICAgICAqIEBwYXJhbSBxdWFudGl0eSBjYW50aWRhZCBhIGFncmVnYXJcclxuICAgICAqIEBwYXJhbSB2YXJpYW50X2NvZGUgKioob3BjaW9uYWwpKiogY29kaWdvIGRlIGxhIHZhcmlhbnRlIHNlbGVjY2lvbmFkYSBkZWwgcHJvZHVjdG8uXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYXJ0KHF1YW50aXR5LCB2YXJpYW50X2NvZGU/OiBzdHJpbmcpIHtcclxuICAgICAgICBxdWFudGl0eSA9IHBhcnNlSW50KHF1YW50aXR5KTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnZhcmlhbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnY2FudC1idXknKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcHJvZHVjdF9zZWxlY3RlZCA9IF8uY2xvbmUodGhpcy5wcm9kdWN0U3ViamVjdC52YWx1ZSk7XHJcblxyXG4gICAgICAgIGxldCB2YXJpYW50OiBhbnk7XHJcblxyXG4gICAgICAgIHN3aXRjaCAodGhpcy52YXJpYW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vLXZhcmlhbnRzJyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZS5zdG9jayA9PSAwID9cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrJykgOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSB0aGlzLnZhcmlhbnRzWzBdXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYW50X2NvZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gdGhpcy52YXJpYW50cy5maW5kKHZhcmlhbnQgPT4gdmFyaWFudC5jb2RlID09PSB2YXJpYW50X2NvZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RvY2sgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3ZhcmlhbnRzLWxlZnQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXZhcmlhbnQpIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVRdWFudGl0eShxdWFudGl0eSkpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgcHJpY2VUb1ZhbGlkYXRlID0gcHJvZHVjdF9zZWxlY3RlZC5zYWxlcHJpY2UgPyBwcm9kdWN0X3NlbGVjdGVkLnNhbGVwcmljZSAqIHF1YW50aXR5IDogcHJvZHVjdF9zZWxlY3RlZC5wcmljZSAqIHF1YW50aXR5O1xyXG4gICAgICAgIGlmICghdGhpcy52YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyhwcmljZVRvVmFsaWRhdGUpKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkVG9DYXJ0KHRoaXMubWFrZUFmZm9yZGFibGVQcm9kdWN0KHByb2R1Y3Rfc2VsZWN0ZWQpLCBxdWFudGl0eSwgdmFyaWFudC5jb2RlKTtcclxuICAgIH07XHJcblxyXG5cclxuXHJcbiAgICBhZGRUb0NhcnRQcm9taXNlID0gYXN5bmMgKHF1YW50aXR5KSA9PiB7XHJcbiAgICAgICAgcXVhbnRpdHkgPSBwYXJzZUludChxdWFudGl0eSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhcmlhbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgbWVzc2FnZTogJ2NhbnQtYnV5JyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcHJvZHVjdF9zZWxlY3RlZCA9IF8uY2xvbmUodGhpcy5wcm9kdWN0U3ViamVjdC52YWx1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFyaWFudHMubGVuZ3RoID4gMSB8fCB0aGlzLnZhcmlhbnRzLmxlbmd0aCA9PSAwIHx8IHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUuc3RvY2sgPT0gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YXJpYW50cy5sZW5ndGggPT0gMCkgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICduby12YXJpYW50cycgfTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52YXJpYW50cy5sZW5ndGggPiAxICYmIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUuc3RvY2sgPiAwKSByZXR1cm4geyBlcnJvcjogdHJ1ZSwgbWVzc2FnZTogJ3ZhcmlhbnRzLWxlZnQnIH07XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmFyaWFudHMubGVuZ3RoICE9IDAgJiYgdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZS5zdG9jayA9PSAwKSByZXR1cm4geyBlcnJvcjogdHJ1ZSwgbWVzc2FnZTogJ291dC1vZi1zdG9jaycgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUXVhbnRpdHkocXVhbnRpdHkpKSByZXR1cm47XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2FydFNlcnZpY2UuYWRkVG9DYXJ0UHJvbWlzZSh0aGlzLm1ha2VBZmZvcmRhYmxlUHJvZHVjdChwcm9kdWN0X3NlbGVjdGVkKSwgcXVhbnRpdHksIHRoaXMudmFyaWFudHNbMF0uY29kZSk7XHJcbiAgICAgICAgcmV0dXJuIChyZXN1bHQgJiYgIShyZXN1bHQuZXJyb3IpKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRPcHRpb25zID0gKHByb2R1Y3RfcmVjZWl2ZWQ/OiBQcm9kdWN0KSA9PiB7XHJcbiAgICAgICAgbGV0IHByb2R1Y3QgPSBwcm9kdWN0X3JlY2VpdmVkIHx8IHRoaXMucHJvZHVjdFN1YmplY3QudmFsdWU7XHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBbXTtcclxuICAgICAgICBwcm9kdWN0Lm9wdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgb3B0aW9ucy5wdXNoKHRoaXMudG9PcHRpb24oZWxlbWVudCkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0b09wdGlvbiA9IChwcmVvcHRpb24pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYW1lOiBwcmVvcHRpb24ubGFiZWwsXHJcbiAgICAgICAgICAgIGNvZGU6IHByZW9wdGlvbi5jb2RlLFxyXG4gICAgICAgICAgICB0eXBlOiBwcmVvcHRpb24udHlwZSxcclxuICAgICAgICAgICAgdmFsdWVzOiBwcmVvcHRpb24udmFsdWVzLm1hcCh2YWx1ZSA9PiAoeyBuYW1lOiB2YWx1ZS5jb2RlLCBkZXNjcmlwdGlvbjogdmFsdWUubmFtZSwgaW1hZ2U6IHZhbHVlLmltYWdlLCBtb2JpbGVJbWFnZTogdmFsdWUubW9iaWxlSW1hZ2UsIHNlbGVjdGVkOiBmYWxzZSB9KSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtYWtlQWZmb3JkYWJsZVByb2R1Y3QocHJvZHVjdF9zZWxlY3RlZDogUHJvZHVjdCkge1xyXG4gICAgICAgIHByb2R1Y3Rfc2VsZWN0ZWQucHJpY2UgPSBwYXJzZUZsb2F0KHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUucHJpY2UpO1xyXG4gICAgICAgIHByb2R1Y3Rfc2VsZWN0ZWQuc2FsZXByaWNlID0gcGFyc2VGbG9hdCh0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlLnByaWNlKTtcclxuICAgICAgICBwcm9kdWN0X3NlbGVjdGVkLm9wdGlvbnMgPSB7fTtcclxuICAgICAgICB0aGlzLnZhcmlhbnRzWzBdLm9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4gcHJvZHVjdF9zZWxlY3RlZC5vcHRpb25zID0geyAuLi5wcm9kdWN0X3NlbGVjdGVkLm9wdGlvbnMsIC4uLm9wdGlvbiB9KVxyXG4gICAgICAgIHJldHVybiBwcm9kdWN0X3NlbGVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlVmFyaWFudHMgPSAoY29kZT8pID0+IHtcclxuICAgICAgICBsZXQgdmFyaWFudHMgPSB0aGlzLnByb2R1Y3RTdWJqZWN0LnZhbHVlLnZhcmlhbnRzO1xyXG4gICAgICAgIGlmICghY29kZSkge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNTdWJqZWN0LnZhbHVlLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbi52YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzID0gdmFyaWFudHMuZmlsdGVyKHZhcmlhbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhbnQub3B0aW9ucy5zb21lKHZhcmlhbnRfb3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG9wdGlvbi5jb2RlIGluIHZhcmlhbnRfb3B0aW9uICYmIHZhcmlhbnRfb3B0aW9uW29wdGlvbi5jb2RlXSA9PSB2YWx1ZS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXJpYW50cyA9IHZhcmlhbnRzLmZpbHRlcih2YXJpYW50ID0+IHZhcmlhbnQuY29kZSA9PSBjb2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YXJpYW50cyA9IHZhcmlhbnRzO1xyXG4gICAgICAgIGNvZGUgJiYgdGhpcy51cGRhdGVPcHRpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVPcHRpb25zID0gKCkgPT4ge1xyXG4gICAgICAgIGxldCB7IG9wdGlvbnMgfSA9IHRoaXMudmFyaWFudHMubGVuZ3RoICYmIHRoaXMudmFyaWFudHNbMF07XHJcbiAgICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmZvckVhY2gob3B0aW9uID0+IE9iamVjdC5rZXlzKG9wdGlvbikuZm9yRWFjaChrZXkgPT4gdGhpcy5zZXRPcHRpb24oa2V5LCBvcHRpb25ba2V5XSkpKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2VuZXJhdGVBc29jaWF0ZWREYXRhRnJvbVZhcmlhbnRzID0gKCkgPT4ge1xyXG4gICAgICAgIGxldCBhc29jaWF0ZWQ6IGFueSA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZHkoKSkge1xyXG4gICAgICAgICAgICBhc29jaWF0ZWQuc3RvY2sgPSB0aGlzLnZhcmlhbnRzWzBdLnN0b2NrXHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5wcmljZSA9IHRoaXMudmFyaWFudHNbMF0ucHJpY2UudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICBhc29jaWF0ZWQuc2FsZXByaWNlID0gdGhpcy52YXJpYW50c1swXS5zYWxlcHJpY2UgJiYgdGhpcy52YXJpYW50c1swXS5zYWxlcHJpY2UudG9TdHJpbmcoKSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5kaXNjb3VudCA9IHRoaXMudmFyaWFudHNbMF0/LmRpc2NvdW50IHx8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnByb3BlcnRpZXMgPSB0aGlzLnZhcmlhbnRzWzBdLnByb3BlcnRpZXMgPyB0aGlzLmJlYXV0aWZ5UHJvcGVydGllcyh0aGlzLnZhcmlhbnRzWzBdLnByb3BlcnRpZXMpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBhc29jaWF0ZWQudW5pcXVlRXh0ZXJuYWxDb2RlID0gdGhpcy52YXJpYW50c1swXT8udW5pcXVlRXh0ZXJuYWxDb2RlIHx8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgYXNvY2lhdGVkLm11bHRpcGxlUXVhbnRpdHkgPSB0aGlzLnZhcmlhbnRzWzBdPy5tdWx0aXBsZVF1YW50aXR5IHx8IHVuZGVmaW5lZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhc29jaWF0ZWQucHJpY2UgPSB0aGlzLmNyYXRlUHJpY2UoKVxyXG4gICAgICAgICAgICBhc29jaWF0ZWQuc2FsZXByaWNlID0gdGhpcy5jcmF0ZVNhbGVQcmljZSgpXHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5zdG9jayA9ICh0aGlzLnZhcmlhbnRzLm1hcCh2YXJpYW50ID0+IHZhcmlhbnQuc3RvY2spKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiKVxyXG4gICAgICAgICAgICBhc29jaWF0ZWQuZGlzY291bnQgPSB0aGlzLmNyYXRlRGlzY291bnQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgKCdpbWFnZXMnIGluIHRoaXMudmFyaWFudHNbMF0gJiYgdGhpcy52YXJpYW50c1swXS5pbWFnZXMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgPyBhc29jaWF0ZWQucGljdHVyZSA9IHRoaXMudmFyaWFudHNbMF0uaW1hZ2VzWzBdXHJcbiAgICAgICAgICAgIDogYXNvY2lhdGVkLnBpY3R1cmUgPSAodGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZS5waWN0dXJlIHx8IHRoaXMucHJvZHVjdFN1YmplY3QudmFsdWUucGljdHVyZXNkZWZhdWx0WzBdKTtcclxuXHJcblxyXG4gICAgICAgIGFzb2NpYXRlZC5tYXhpbXVtQW1vdW50ID0gdGhpcy52YXJpYW50c1swXT8ubWF4aW11bUFtb3VudCB8fCAwXHJcbiAgICAgICAgYXNvY2lhdGVkLm1pbmltdW1BbW91bnQgPSB0aGlzLnZhcmlhbnRzWzBdPy5taW5pbXVtQW1vdW50IHx8IDBcclxuXHJcbiAgICAgICAgYXNvY2lhdGVkLm1heGltdW1JdGVtc1F1YW50aXR5ID0gdGhpcy52YXJpYW50c1swXT8uc3RvY2sgPiAwICYmICdtYXhpbXVtSXRlbXNRdWFudGl0eScgaW4gdGhpcy52YXJpYW50c1swXSA/IHRoaXMudmFyaWFudHNbMF0/Lm1heGltdW1JdGVtc1F1YW50aXR5IDogdGhpcy52YXJpYW50c1swXT8uc3RvY2tcclxuICAgICAgICBhc29jaWF0ZWQubWluaW11bUl0ZW1zUXVhbnRpdHkgPSB0aGlzLnZhcmlhbnRzWzBdPy5zdG9jayA+IDAgJiYgJ21pbmltdW1JdGVtc1F1YW50aXR5JyBpbiB0aGlzLnZhcmlhbnRzWzBdXHJcbiAgICAgICAgICAgICYmIHRoaXMudmFyaWFudHNbMF0/Lm1pbmltdW1JdGVtc1F1YW50aXR5ID4gMCA/IHRoaXMudmFyaWFudHNbMF0/Lm1pbmltdW1JdGVtc1F1YW50aXR5XHJcbiAgICAgICAgICAgIDogKHRoaXMudmFyaWFudHNbMF0/Lm11bHRpcGxlUXVhbnRpdHkgPyB0aGlzLnZhcmlhbnRzWzBdPy5tdWx0aXBsZVF1YW50aXR5IDogMSlcclxuXHJcbiAgICAgICAgYXNvY2lhdGVkLmZpbmFsQ29uc3VtZXIgPSB7XHJcbiAgICAgICAgICAgIGZpbmFsQ29uc3VtZXJQcmljZTogdGhpcy52YXJpYW50c1swXT8uZmluYWxfY29uc3VtZXJfcHJpY2UsXHJcbiAgICAgICAgICAgIG9yaWdpbmFsRmluYWxDb25zdW1lclByaWNlOiB0aGlzLnZhcmlhbnRzWzBdPy5vcmlnaW5hbF9maW5hbF9jb25zdW1lcl9wcmljZSxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFzb2NpYXRlZC50YXhlcyA9IHtcclxuICAgICAgICAgICAgdGF4SW5jbHVkZWQ6IHRoaXMudmFyaWFudHNbMF0/LnRheEluY2x1ZGVkLFxyXG4gICAgICAgICAgICB0YXhDYXRlZ29yeTogdGhpcy52YXJpYW50c1swXT8udGF4Q2F0ZWdvcnksXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFzb2NpYXRlZC50YXhlQW1vdW50ID0gdGhpcy52YXJpYW50c1swXT8udGF4ZXMgfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGFzb2NpYXRlZC50YXhSYXRlID0gdGhpcy52YXJpYW50c1swXT8udGF4UmF0ZSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgYXNvY2lhdGVkLnByaWNlV2l0aG91dFRheGVzID0gdGhpcy52YXJpYW50c1swXT8ucHJpY2VXaXRob3V0VGF4ZXMgfHwgdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0Lm5leHQoYXNvY2lhdGVkKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWNpYmUgbGFzIHByb3BpZWRhZGVzIGRlIHVuYSB2YXJpYW50ZSB5IHBvciBjYWRhIGl0ZW0gYXJtYSB1biBvYmpldG8gY29uIFxyXG4gICAgICogZWwgbmFtZT1jbGF2ZSB5IHZhbHVlPXZhbG9yIGRlIGVzZSBpdGVtLiAgXHJcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyBcclxuICAgICAqIEByZXR1cm5zIFVuIGFycmVnbG8gY29uIGxhcyBwcm9waWVkYWRlcyBkZSBsYSBmb3JtYSB7IG5hbWUgPSAuLi4gLCB2YWx1ZSA9IC4uLn1cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBiZWF1dGlmeVByb3BlcnRpZXMgPSAocHJvcGVydGllcykgPT4ge1xyXG4gICAgICAgIGxldCBiZWF1dGlmeURhdGEgPSBbXVxyXG4gICAgICAgIHByb3BlcnRpZXMuZm9yRWFjaChwcm9wID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHByb3ApIHtcclxuICAgICAgICAgICAgICAgIGJlYXV0aWZ5RGF0YS5wdXNoKHsgbmFtZToga2V5LCB2YWx1ZTogcHJvcFtrZXldIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYmVhdXRpZnlEYXRhXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmF0ZURpc2NvdW50ID0gKCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBhbGxfZGlzY291bnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy52YXJpYW50cy5mb3JFYWNoKHZhcmlhbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyaWFudC5kaXNjb3VudCAmJiAoYWxsX2Rpc2NvdW50ID0gYWxsX2Rpc2NvdW50ICsgJywgJyArIHZhcmlhbnQuZGlzY291bnQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGFsbF9kaXNjb3VudCA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhbGxfZGlzY291bnRcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JhdGVQcmljZSA9ICgpID0+IHtcclxuICAgICAgICBsZXQgbWluX3ByaWNlID0gMDtcclxuICAgICAgICBsZXQgbWF4X3ByaWNlID0gMDtcclxuICAgICAgICBsZXQgYWxsX3ByaWNlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMudmFyaWFudHMuZm9yRWFjaCh2YXJpYW50ID0+IHtcclxuICAgICAgICAgICAgYWxsX3ByaWNlcy5wdXNoKHZhcmlhbnQucHJpY2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG1pbl9wcmljZSA9IGFsbF9wcmljZXMucmVkdWNlKChhLCBiKSA9PiBNYXRoLm1pbihhLCBiKSk7XHJcbiAgICAgICAgbWF4X3ByaWNlID0gYWxsX3ByaWNlcy5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWF4KGEsIGIpLCAwKTtcclxuICAgICAgICByZXR1cm4gbWluX3ByaWNlID09IG1heF9wcmljZSA/IG1heF9wcmljZS50b1N0cmluZygpIDogbWluX3ByaWNlICsgJyAtICcgKyBtYXhfcHJpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmF0ZVNhbGVQcmljZSA9ICgpID0+IHtcclxuICAgICAgICBsZXQgbWluX3ByaWNlID0gMDtcclxuICAgICAgICBsZXQgbWF4X3ByaWNlID0gMDtcclxuICAgICAgICBsZXQgYWxsX3ByaWNlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMudmFyaWFudHMuZm9yRWFjaCh2YXJpYW50ID0+IHtcclxuICAgICAgICAgICAgdmFyaWFudC5zYWxlcHJpY2UgJiYgYWxsX3ByaWNlcy5wdXNoKHZhcmlhbnQuc2FsZXByaWNlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIWFsbF9wcmljZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICAgICAgbWluX3ByaWNlID0gYWxsX3ByaWNlcy5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWluKGEsIGIpKTtcclxuICAgICAgICBtYXhfcHJpY2UgPSBhbGxfcHJpY2VzLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5tYXgoYSwgYiksIDApO1xyXG4gICAgICAgIHJldHVybiBtaW5fcHJpY2UgPT0gbWF4X3ByaWNlID8gbWF4X3ByaWNlLnRvU3RyaW5nKCkgOiBtaW5fcHJpY2UgKyAnIC0gJyArIG1heF9wcmljZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluUmFuZ2UgPSAocXVhbnRpdHksIG1pbiwgbWF4KSA9PiAoKHF1YW50aXR5IC0gbWluKSAqIChxdWFudGl0eSAtIG1heCkgPD0gMClcclxuXHJcbiAgICBwcml2YXRlIHZhbGlkYXRlUXVhbnRpdHkgPSAocXVhbnRpdHk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFjdHVhbFF1YW50aXR5ID0gdGhpcy5jYXJ0U2VydmljZS5nZXRDb3VudEZyb21JdGVtSW5DYXJ0KHRoaXMudmFyaWFudHNbMF0uY29kZSk7XHJcbiAgICAgICAgY29uc3QgYXNvY2lhdGVkRGF0YSA9IHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWU7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0xhIGNhbnRpZGFkIHF1ZSBsbGVnbzogJywgcXVhbnRpdHksICcgeSBsYSBjYW50aWRhZCBhY3R1YWw6ICcsIGFjdHVhbFF1YW50aXR5KTtcclxuICAgICAgICBpZiAoKGFjdHVhbFF1YW50aXR5ICsgcXVhbnRpdHkpID4gYXNvY2lhdGVkRGF0YS5tYXhpbXVtSXRlbXNRdWFudGl0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbWF4aW11bS1pdGVtcy1xdWFudGl0eScsIHsgcXVhbnRpdHk6IGFzb2NpYXRlZERhdGEubWF4aW11bUl0ZW1zUXVhbnRpdHkgfSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGFjdHVhbFF1YW50aXR5ICsgcXVhbnRpdHkpIDwgYXNvY2lhdGVkRGF0YS5taW5pbXVtSXRlbXNRdWFudGl0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbWluaW11bS1pdGVtcy1xdWFudGl0eScsIHsgcXVhbnRpdHk6IGFzb2NpYXRlZERhdGEubWluaW11bUl0ZW1zUXVhbnRpdHkgfSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdmFsaWRhdGVQcmljZUFuZENyZWRpdHMgPSAocHJpY2U6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNyZWRpdEFtb3VudCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnTm8gaGF5IGNvbmZpZ3VyYWNpw7NuIGRlIGNyw6lkaXRvcyBwYXJhIGVzdGUgdXN1YXJpby4nKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5yZW1haW5pbmdDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHByaWNlID4gdGhpcy5yZW1haW5pbmdDcmVkaXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdub3QtZW5vdWdoLWNyZWRpdHMnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICBwcml2YXRlIGZldGNoQ2FydERhdGEgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5nZXRUb3RhbEFtb3VudCgpLnN1YnNjcmliZSgodG90YWxBbW91bnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG90YWxBbW91bnQgPSB0b3RhbEFtb3VudDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5nZXRDcmVkaXRBbW91bnQoKS5zdWJzY3JpYmUoKGNyZWRpdEFtb3VudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWRpdEFtb3VudCA9IGNyZWRpdEFtb3VudDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5nZXRSZW1haW5pbmdDcmVkaXRzKCkuc3Vic2NyaWJlKChyZW1haW5pbmdDcmVkaXRzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtYWluaW5nQ3JlZGl0cyA9IHJlbWFpbmluZ0NyZWRpdHM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEN1YW5kbyBoYXlhIG1vZGVsb3MgZGUgcmVzcHVlc3RhLCB2YWxpZGFtb3MgcXVlIG5vIHNlIGludGVudGUgY2FyZ2FyIHVuIHByb2R1Y3RvIGluY29tcGxldG9cclxuICAgIHByaXZhdGUgaXNQcm9kdWN0VmFsaWQgPSAocHJvZHVjdDogUHJvZHVjdCkgPT4gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgQXJyYXkgZGUgVmFyaWFudGVzIHkgc3VzIHZhbG9yZXNcclxuICAgICAqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldG9ybmEgdW5hIGxpc3RhIGZpbHRyYWRhIGRlIGxhcyB2YXJpYW50ZXMgcXVlIGVzdGFuIHNlbGVjY2lvbmFkYXNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRWYXJpYW50c1NlbGVjdGVkKG9wdGlvbnM6IGFueSwgb3B0aW9uc0V4Y2VwdGlvbjogQXJyYXk8YW55Pik6IEFycmF5PE9iamVjdD4ge1xyXG5cclxuICAgICAgICBsZXQgdmFyaWFudHNTZWxlY3RlZCA9IFtdO1xyXG4gICAgICAgIG9wdGlvbnMuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICAgICAgaWYgKHYudmFsdWVzICYmIHYudmFsdWVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdi52YWx1ZXMuZm9yRWFjaCh2YWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwuc2VsZWN0ZWQgJiYgIW9wdGlvbnNFeGNlcHRpb24uZmluZChvcCA9PiBvcC50b1VwcGVyQ2FzZSgpID09IHYuY29kZS50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50c1NlbGVjdGVkW3YuY29kZV0gPSB2YWwubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB2YXJpYW50c1NlbGVjdGVkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgQXJyYXkgZGUgVmFyaWFudGVzIHkgc3VzIHZhbG9yZXNcclxuICAgICAqIEBwYXJhbSB2YXJpYW50cyBUb2RhcyBsYXMgdmFyaWFudGVzIGRpc3BvbmlibGVzIGRlbCBwcm9kdWN0b1xyXG4gICAgICogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gcmV0b3JuYSB0b2RhcyBsYXMgdmFyaWFudGVzIGRpc3BvbmlibGVzIGEgc2VsZWNjaW9uIHkgc3Ugc3RvY2tcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFZhcmlhbnRzQXZhaWxhYmxlKG9wdGlvbnM6IGFueSwgdmFyaWFudHM6IGFueSwgb3B0aW9uc0V4Y2VwdGlvbjogQXJyYXk8YW55Pik6IGFueSB7XHJcblxyXG4gICAgICAgIGxldCB2YXJpYW50c1NlbGVjdGVkID0gdGhpcy5nZXRWYXJpYW50c1NlbGVjdGVkKG9wdGlvbnMsIG9wdGlvbnNFeGNlcHRpb24pO1xyXG5cclxuICAgICAgICBsZXQgdmFyaWFudHNBdmFpbGFibGUgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyaWFudHMubWFwKHYgPT4ge1xyXG5cclxuICAgICAgICAgICAgbGV0IGF1eCA9IHt9O1xyXG4gICAgICAgICAgICBpZiAodi5vcHRpb25zICYmIHYub3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHYub3B0aW9ucy5tYXAob3AgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYXV4LCBvcCwgeyBzdG9jazogdi5zdG9jayB9KTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyaWFudHNBdmFpbGFibGUucHVzaChhdXgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHZhcmlhbnRzQXZhaWxhYmxlLmZpbHRlcih2YSA9PiB0aGlzLmNvbnN0YW50cy5jb250YWluc0FsbCh7IC4uLnZhcmlhbnRzU2VsZWN0ZWQgfSwgdmEpKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgQXJyYXkgZGUgdmFyaWFudGVzIHkgc3VzIHZhbG9yZXNcclxuICAgICAqIEBwYXJhbSBjb2RlIENvZGlnbyBkZSBsYSB2YXJpYW50ZSBhIGJ1c2NhclxyXG4gICAgICogQHBhcmFtIG5hbWUgbm9tYnJlIGRlIGxhIHZhcmlhbnRlIGEgYnVzY2FyXHJcbiAgICAgKiBAcGFyYW0gdmFyaWFudHMgdmFyaWFudGVzIGRlbCBwcm9kdWN0b1xyXG4gICAgICogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gYnVzY2EgZW4gbGEgbGlzdGEgZGUgdmFyaWFudGVzIGRpc3BvbmlibGVzIHNpIGhheSBkZSBlc2UgY29kaWdvLCBlc2Ugbm9tYnJlIHkgY29uIHN0b2NrIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXhpc3RWYXJpYW50QW5kSGFzU3RvY2sob3B0aW9ucywgY29kZSwgbmFtZSwgdmFyaWFudHMsIG9wdGlvbnNFeGNlcHRpb24gPSBbXSk6IGJvb2xlYW4ge1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYXJpYW50c0F2YWlsYWJsZShvcHRpb25zLCB2YXJpYW50cywgb3B0aW9uc0V4Y2VwdGlvbikuZmluZCh2YSA9PlxyXG4gICAgICAgICAgICB2YS5oYXNPd25Qcm9wZXJ0eShjb2RlKSAmJiB2YVtjb2RlXSA9PT0gbmFtZSAmJiB2YS5zdG9jayA+IDApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBwcm9kdWN0IHByb2R1Y3RvIGVsIGN1YWwgc2UgcXVpZXJlIGRlc2RvYmxhciBwb3IgdmFyaWFudGVzIHBvciB1bmEgb3BjacOzbi5cclxuICAgICAqIEBwYXJhbSB3aXRoT3B0aW9uICd0eXBlJyB0aXBvIGRlIG9wY2nDs24sIGNvZGU6IGPDs2RpZ28gZGUgbGEgb3BjacOzbi4gJ2RlZmF1bHRGaXJzdE9wdGlvbic6IGVuIGNhc28gZGUgcXVlIG5vIHNlIHB1ZWRhIGRlc2RvYmxhciBwb3IgbGEgb3BjacOzbiBpbmRpY2FkYSBzaSBlbCB2YWxvciBlcyB2ZXJkYWRlcm8gc2UgaW50ZW50YXJhIGRlc2RvYmxhciBwb3IgbGEgcHJpbWVyYSBvcGNpw7NuIGFzb2NpYWRhIGFsIHByb2R1Y3RvLlxyXG4gICAgICogJ2NoZWNrSWZTdG9jayc6IGVuIGNhc28gZGUgcXVlIGVzdGEgdmFsb3Igc2VhIHZlcmRhZGVybyBzZSByZWFsaXphIHVuIGNvbnRyb2wgZGUgcXVlIGxhIHZhcmlhbnRlcyBjdWVudGVuIGNvbiBzdG9jayBwYXJhIHNlciB1biBwcm9kdWN0byBkZXNkb2JsYWRvIHBvciBsYSB2YXJpYW50ZSwgc2kgZWwgdmFsb3IgZXMgZmFsc28gbm8gc2UgcmVhbGl6YSBkaWNobyBjb250cm9sIHkgZWwgcHJvZHVjdG8gc2UgZGVzZG9ibGFyYSBjb24gc3RvY2sgZW4gMC5cclxuICAgICAqIEByZXR1cm5zIGFycmVnbG8gY29uIGVsIHByb2R1Y3RvIGRlc2RvYmxhZG8gcG9yIGxhIHZhcmlhbnRlIHNvbGljaXRhZGEuXHJcbiAgICAgKiAob3BjacOzbiBwb3IgZGVmZWN0byBxdWUgc2UgaW50ZW50YSBoYWNlciBlbCBkZXNkb2JsYW1pZW50byAnY29sb3InLCBvIGJpZW4gc2kgZW4gbGUgcGFyw6FtZXRybyB3aXRoT3B0aW9uIGVsIGF0cmlidXRvICdkZWZhdWx0Rmlyc3RPcHRpb24nIGVzIHZlcmRhZGVybyBzZSBkZXNkb2JsYSBwb3IgbGEgcHJpbWVyYSBvcGNpw7NuIGFzb2NpYWRhIGFsIHByb2R1Y3RvICkgXHJcbiAgICAgKi9cclxuICAgIGdldFByb2R1Y3RXaXRoVW5pcXVlVmFyaWFudCA9IChwcm9kdWN0LCB3aXRoT3B0aW9uPzogUGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3RzU2VydmljZS5nZXRQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50KFtwcm9kdWN0XSwgd2l0aE9wdGlvbilcclxuICAgIH1cclxuXHJcbn0iXX0=
|
|
498
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0LWRldGFpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUF5QixNQUFNLE1BQU0sQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd0RDtJQWVJLDhCQUNZLGVBQWdDLEVBQVUsV0FBd0IsRUFBVSxhQUEyQixFQUN2RyxTQUFvQixFQUFTLGdCQUFrQyxFQUFTLGVBQWdDO1FBRnBILGlCQUdDO1FBRlcsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUN2RyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUFTLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQWY1RyxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFVLEVBQUUsQ0FBQyxDQUFDO1FB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LElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUM7UUFBNUQsQ0FBNEQsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7O2dCQXBhNEIsZUFBZTtnQkFBdUIsV0FBVztnQkFBeUIsWUFBWTtnQkFDNUYsU0FBUztnQkFBMkIsZ0JBQWdCO2dCQUEwQixlQUFlOztJQWpCM0csb0JBQW9CO1FBRGhDLFVBQVUsRUFBRTtPQUNBLG9CQUFvQixDQWtjaEM7SUFBRCwyQkFBQztDQUFBLEFBbGNELElBa2NDO1NBbGNZLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBwYXJ0aXRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUHJvZHVjdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcHJvZHVjdCc7XHJcbmltcG9ydCB7IFByb2R1Y3RzU2VydmljZSB9IGZyb20gJy4vcHJvZHVjdHMuc2VydmljZSc7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vY2FydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvcmUuY29uc3RzJztcclxuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi4vYW5hbHl0aWNzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wYXJhbXNJbnRlcmZhY2VzL3BhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQnO1xyXG5pbXBvcnQgeyBDdXJyZW5jeVNlcnZpY2UgfSBmcm9tICcuLi9jdXJyZW5jeS5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFByb2R1Y3REZXRhaWxTZXJ2aWNlIHtcclxuXHJcbiAgICBwcml2YXRlIHByb2R1Y3RTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcm9kdWN0Pih7fSk7XHJcbiAgICBwcml2YXRlIG9wdGlvbnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHt9KTtcclxuICAgIHByaXZhdGUgYXNvY2lhdGVkRGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oeyBwcmljZTogJycsIHN0b2NrOiAwLCBwaWN0dXJlOiAnJyB9KTtcclxuXHJcbiAgICBwcml2YXRlIHZhcmlhbnRzID0gW11cclxuXHJcbiAgICBwdWJsaWMgcHJvZHVjdCQgPSB0aGlzLnByb2R1Y3RTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIG9wdGlvbnMkID0gdGhpcy5vcHRpb25zU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBhc29jaWF0ZWREYXRhJCA9IHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwcml2YXRlIGN1cnJlbnRUb3RhbEFtb3VudDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBjcmVkaXRBbW91bnQ6IG51bWJlciB8IG51bGw7XHJcbiAgICBwcml2YXRlIHJlbWFpbmluZ0NyZWRpdHM6IG51bWJlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHByb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlLCBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSwgcHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjb25zdGFudHM6IENvbnN0YW50cywgcHVibGljIGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsIHB1YmxpYyBjdXJyZW5jeVNlcnZpY2U6IEN1cnJlbmN5U2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBAcGFyYW0gY29kZSBJZGVudGlmaWNhZG9yIGRlbCBwcm9kdWN0b1xyXG4gICAgKiBAcGFyYW0gdmFyaWFudCBJbmRpY2Egc2kgc2UgZXN0w6Egc29saWNpdGFuZG8gdW4gcHJvZHVjdG8gcG9yIHN1IGNvZGlnbywgbyBwb3IgZWwgY29kaWdvIGNvcnJlc3BvbmRpZW50ZSBhIHVuYSBkZSBzdXMgdmFyaWFudGVzXHJcbiAgICAqICBcclxuICAgICogQ2FyZ2EgZWwgcHJvZHVjdG8gc29saWNpdGFkbyBhc3luY3JvbmljYW1lbnRlIHNpbiByZXNwdWVzdGEgXHJcbiAgICAqL1xyXG4gICAgbG9hZFByb2R1Y3QgPSAoY29kZSwgdmFyaWFudDogYm9vbGVhbiA9IGZhbHNlKSA9PlxyXG4gICAgICAgIHRoaXMucHJvZHVjdHNTZXJ2aWNlLmdldFNwZWNpZmljUHJvZHVjdChjb2RlLCB2YXJpYW50KS50b1Byb21pc2UoKS50aGVuKFxyXG4gICAgICAgICAgICByZXMgPT4gdmFyaWFudCA/IHRoaXMuaW5pdGlhbGl6ZShyZXMsIGNvZGUpIDogdGhpcy5pbml0aWFsaXplKHJlcyksXHJcbiAgICAgICAgICAgIGVyciA9PiB0aGlzLnByb2R1Y3RTdWJqZWN0Lm5leHQobnVsbClcclxuICAgICAgICApXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gcHJvZHVjdF9pZCBJZGVudGlmaWNhZG9yIGRlbCBwcm9kdWN0b1xyXG4gICAgICogQHBhcmFtIHZhcmlhbnQgSW5kaWNhIHNpIHNlIGVzdMOhIHNvbGljaXRhbmRvIHVuIHByb2R1Y3RvIHBvciBzdSBjb2RpZ28sIG8gcG9yIGVsIGNvZGlnbyBjb3JyZXNwb25kaWVudGUgYSB1bmEgZGUgc3VzIHZhcmlhbnRlc1xyXG4gICAgICogQGFzeW5jXHJcbiAgICAgKiAgXHJcbiAgICAgKiBBIGRpZmVyZW5jaWEgZGVsIG1ldG9kbyBsb2FkUHJvZHVjdCwgZXN0ZSByZXRvcm5hIHVuIHZhbG9yIGN1YW5kbyB0ZXJtaW5hIFxyXG4gICAgICovXHJcbiAgICBnZXRQcm9kdWN0ID0gYXN5bmMgKHByb2R1Y3RfaWQsIHZhcmlhbnQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByb2R1Y3RzU2VydmljZS5nZXRTcGVjaWZpY1Byb2R1Y3QocHJvZHVjdF9pZCwgdmFyaWFudCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LmVycm9yKSB0aGlzLnByb2R1Y3RTdWJqZWN0Lm5leHQobnVsbCk7XHJcbiAgICAgICAgZWxzZSB2YXJpYW50ID8gdGhpcy5pbml0aWFsaXplKHJlc3VsdCwgcHJvZHVjdF9pZCkgOiB0aGlzLmluaXRpYWxpemUocmVzdWx0KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRpYWxpemUgPSAocHJvZHVjdCwgdmFyaWFudF9jb2RlPykgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvZHVjdFN1YmplY3QubmV4dChwcm9kdWN0KTtcclxuICAgICAgICB0aGlzLm9wdGlvbnNTdWJqZWN0Lm5leHQodGhpcy5nZXRPcHRpb25zKCkpXHJcbiAgICAgICAgdmFyaWFudF9jb2RlID8gdGhpcy51cGRhdGVWYXJpYW50cyh2YXJpYW50X2NvZGUpIDogdGhpcy51cGRhdGVWYXJpYW50cygpO1xyXG4gICAgICAgIHRoaXMudmFyaWFudHMubGVuZ3RoICYmIHRoaXMuZ2VuZXJhdGVBc29jaWF0ZWREYXRhRnJvbVZhcmlhbnRzKCk7XHJcbiAgICAgICAgdGhpcy5mZXRjaENhcnREYXRhKClcclxuICAgICAgICAvL3RoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3ZpZXdfaXRlbScsIHsgLi4ucHJvZHVjdCwgY3VycmVuY3k6IHRoaXMuY29uc3RhbnRzLmN1cnJlbmN5LmNvZGUgfSlcclxuICAgICAgICAvLyB2YXJpYW50X2NvZGUgJiYgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgndmlld19pdGVtJywgeyAuLi5wcm9kdWN0LCBjdXJyZW5jeTogdGhpcy5jb25zdGFudHMuY3VycmVuY3kuY29kZSB9KVxyXG4gICAgfVxyXG5cclxuICAgIHNldFByb2R1Y3QgPSAocHJvZHVjdCkgPT4gdGhpcy5pc1Byb2R1Y3RWYWxpZChwcm9kdWN0KSAmJiB0aGlzLmluaXRpYWxpemUocHJvZHVjdCk7XHJcblxyXG4gICAgaXNSZWFkeSA9ICgpID0+IHRoaXMudmFyaWFudHMubGVuZ3RoID09IDE7XHJcblxyXG4gICAgc2V0T3B0aW9uID0gKG9wdGlvbl9jb2RlLCBvcHRpb25fdmFsdWUpID0+IHtcclxuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1N1YmplY3QudmFsdWU7XHJcbiAgICAgICAgbGV0IG9wdGlvbiA9IG9wdGlvbnMuZmluZChlbGVtZW50ID0+IGVsZW1lbnQuY29kZSA9PSBvcHRpb25fY29kZSkudmFsdWVzLmZpbmQodmFsdWUgPT4gdmFsdWUubmFtZSA9PSBvcHRpb25fdmFsdWUpO1xyXG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9ICFvcHRpb24uc2VsZWN0ZWQ7XHJcbiAgICAgICAgb3B0aW9ucy5maW5kKGVsZW1lbnQgPT4gZWxlbWVudC5jb2RlID09IG9wdGlvbl9jb2RlKS52YWx1ZXMuZm9yRWFjaChcclxuICAgICAgICAgICAgdmFsdWUgPT4geyBpZiAodmFsdWUubmFtZSAhPSBvcHRpb24ubmFtZSkgdmFsdWUuc2VsZWN0ZWQgPSBmYWxzZSB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLm9wdGlvbnNTdWJqZWN0Lm5leHQob3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWYXJpYW50cygpO1xyXG4gICAgICAgIGlmICh0aGlzLnZhcmlhbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgLy8gSGFiaWxpdGFyIHRvZG9zIGxvcyBib3RvbmVzIGNvbiBsYSBjbGFzZSAnYWRkQ2FydEJ1dHRvbidcclxuICAgICAgICAgICAgY29uc3Qgc3VibWl0QnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hZGRDYXJ0QnV0dG9uJyk7XHJcbiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4ge1xyXG4gICAgICAgICAgICAgICAgKGJ1dHRvbiBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBc29jaWF0ZWREYXRhRnJvbVZhcmlhbnRzKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3NlbGVjdGlvbi1ub3QtYXZhaWxhYmxlJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBEZXNoYWJpbGl0YXIgdG9kb3MgbG9zIGJvdG9uZXMgY29uIGxhIGNsYXNlICdzdWJtaXQtYnV0dG9uJ1xyXG4gICAgICAgICAgICBjb25zdCBzdWJtaXRCdXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFkZENhcnRCdXR0b24nKTtcclxuICAgICAgICAgICAgc3VibWl0QnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAoYnV0dG9uIGFzIEhUTUxCdXR0b25FbGVtZW50KS5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlUGljdHVyZSA9IChwaWN0dXJlKSA9PiB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGRhdGEucGljdHVyZSA9IHBpY3R1cmU7XHJcbiAgICAgICAgdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC5uZXh0KGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUVycm9yID0gKGVycm9yKSA9PiB7XHJcbiAgICAgICAgLy8gV2hhdGhldmVyIHdlIG5lZWQgdG8gZG8gd2l0aCBlcnJvclxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIGFncmVnYS9hY3R1YWxpemEgdW4gaXRlbSBlbiBlbCBjYXJyaXRvIFxyXG4gICAgICogQHBhcmFtIHF1YW50aXR5IGNhbnRpZGFkIGEgYWdyZWdhclxyXG4gICAgICogQHBhcmFtIHZhcmlhbnRfY29kZSAqKihvcGNpb25hbCkqKiBjb2RpZ28gZGUgbGEgdmFyaWFudGUgc2VsZWNjaW9uYWRhIGRlbCBwcm9kdWN0by5cclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhcnQocXVhbnRpdHksIHZhcmlhbnRfY29kZT86IHN0cmluZykge1xyXG4gICAgICAgIHF1YW50aXR5ID0gcGFyc2VJbnQocXVhbnRpdHkpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMudmFyaWFudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdjYW50LWJ1eScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwcm9kdWN0X3NlbGVjdGVkID0gXy5jbG9uZSh0aGlzLnByb2R1Y3RTdWJqZWN0LnZhbHVlKTtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhbnQ6IGFueTtcclxuXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnZhcmlhbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbm8tdmFyaWFudHMnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlLnN0b2NrID09IDAgP1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvdXQtb2Ytc3RvY2snKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IHRoaXMudmFyaWFudHNbMF1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnRfY29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSB0aGlzLnZhcmlhbnRzLmZpbmQodmFyaWFudCA9PiB2YXJpYW50LmNvZGUgPT09IHZhcmlhbnRfY29kZSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5zdG9jayA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvdXQtb2Ytc3RvY2snKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygndmFyaWFudHMtbGVmdCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmFyaWFudCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy52YWxpZGF0ZVF1YW50aXR5KHF1YW50aXR5KSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBwcmljZVRvVmFsaWRhdGUgPSBwcm9kdWN0X3NlbGVjdGVkLnNhbGVwcmljZSA/IHByb2R1Y3Rfc2VsZWN0ZWQuc2FsZXByaWNlICogcXVhbnRpdHkgOiBwcm9kdWN0X3NlbGVjdGVkLnByaWNlICogcXVhbnRpdHk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUHJpY2VBbmRDcmVkaXRzKHByaWNlVG9WYWxpZGF0ZSkpIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRUb0NhcnQodGhpcy5tYWtlQWZmb3JkYWJsZVByb2R1Y3QocHJvZHVjdF9zZWxlY3RlZCksIHF1YW50aXR5LCB2YXJpYW50LmNvZGUpO1xyXG4gICAgfTtcclxuXHJcblxyXG5cclxuICAgIGFkZFRvQ2FydFByb21pc2UgPSBhc3luYyAocXVhbnRpdHkpID0+IHtcclxuICAgICAgICBxdWFudGl0eSA9IHBhcnNlSW50KHF1YW50aXR5KTtcclxuICAgICAgICBpZiAoIXRoaXMudmFyaWFudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiB0cnVlLCBtZXNzYWdlOiAnY2FudC1idXknIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwcm9kdWN0X3NlbGVjdGVkID0gXy5jbG9uZSh0aGlzLnByb2R1Y3RTdWJqZWN0LnZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy52YXJpYW50cy5sZW5ndGggPiAxIHx8IHRoaXMudmFyaWFudHMubGVuZ3RoID09IDAgfHwgdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZS5zdG9jayA9PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhbnRzLmxlbmd0aCA9PSAwKSByZXR1cm4geyBlcnJvcjogdHJ1ZSwgbWVzc2FnZTogJ25vLXZhcmlhbnRzJyB9O1xyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnZhcmlhbnRzLmxlbmd0aCA+IDEgJiYgdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZS5zdG9jayA+IDApIHJldHVybiB7IGVycm9yOiB0cnVlLCBtZXNzYWdlOiAndmFyaWFudHMtbGVmdCcgfTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52YXJpYW50cy5sZW5ndGggIT0gMCAmJiB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlLnN0b2NrID09IDApIHJldHVybiB7IGVycm9yOiB0cnVlLCBtZXNzYWdlOiAnb3V0LW9mLXN0b2NrJyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVRdWFudGl0eShxdWFudGl0eSkpIHJldHVybjtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5jYXJ0U2VydmljZS5hZGRUb0NhcnRQcm9taXNlKHRoaXMubWFrZUFmZm9yZGFibGVQcm9kdWN0KHByb2R1Y3Rfc2VsZWN0ZWQpLCBxdWFudGl0eSwgdGhpcy52YXJpYW50c1swXS5jb2RlKTtcclxuICAgICAgICByZXR1cm4gKHJlc3VsdCAmJiAhKHJlc3VsdC5lcnJvcikpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIGdldE9wdGlvbnMgPSAocHJvZHVjdF9yZWNlaXZlZD86IFByb2R1Y3QpID0+IHtcclxuICAgICAgICBsZXQgcHJvZHVjdCA9IHByb2R1Y3RfcmVjZWl2ZWQgfHwgdGhpcy5wcm9kdWN0U3ViamVjdC52YWx1ZTtcclxuICAgICAgICBsZXQgb3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIHByb2R1Y3Qub3B0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBvcHRpb25zLnB1c2godGhpcy50b09wdGlvbihlbGVtZW50KSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gb3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRvT3B0aW9uID0gKHByZW9wdGlvbikgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHByZW9wdGlvbi5sYWJlbCxcclxuICAgICAgICAgICAgY29kZTogcHJlb3B0aW9uLmNvZGUsXHJcbiAgICAgICAgICAgIHR5cGU6IHByZW9wdGlvbi50eXBlLFxyXG4gICAgICAgICAgICB2YWx1ZXM6IHByZW9wdGlvbi52YWx1ZXMubWFwKHZhbHVlID0+ICh7IG5hbWU6IHZhbHVlLmNvZGUsIGRlc2NyaXB0aW9uOiB2YWx1ZS5uYW1lLCBpbWFnZTogdmFsdWUuaW1hZ2UsIG1vYmlsZUltYWdlOiB2YWx1ZS5tb2JpbGVJbWFnZSwgc2VsZWN0ZWQ6IGZhbHNlIH0pKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1ha2VBZmZvcmRhYmxlUHJvZHVjdChwcm9kdWN0X3NlbGVjdGVkOiBQcm9kdWN0KSB7XHJcbiAgICAgICAgcHJvZHVjdF9zZWxlY3RlZC5wcmljZSA9IHBhcnNlRmxvYXQodGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZS5wcmljZSk7XHJcbiAgICAgICAgcHJvZHVjdF9zZWxlY3RlZC5zYWxlcHJpY2UgPSBwYXJzZUZsb2F0KHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUucHJpY2UpO1xyXG4gICAgICAgIHByb2R1Y3Rfc2VsZWN0ZWQub3B0aW9ucyA9IHt9O1xyXG4gICAgICAgIHRoaXMudmFyaWFudHNbMF0ub3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiBwcm9kdWN0X3NlbGVjdGVkLm9wdGlvbnMgPSB7IC4uLnByb2R1Y3Rfc2VsZWN0ZWQub3B0aW9ucywgLi4ub3B0aW9uIH0pXHJcbiAgICAgICAgcmV0dXJuIHByb2R1Y3Rfc2VsZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVWYXJpYW50cyA9IChjb2RlPykgPT4ge1xyXG4gICAgICAgIGxldCB2YXJpYW50cyA9IHRoaXMucHJvZHVjdFN1YmplY3QudmFsdWUudmFyaWFudHM7XHJcbiAgICAgICAgaWYgKCFjb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc1N1YmplY3QudmFsdWUuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uLnZhbHVlcy5mb3JFYWNoKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHMgPSB2YXJpYW50cy5maWx0ZXIodmFyaWFudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFudC5vcHRpb25zLnNvbWUodmFyaWFudF9vcHRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAob3B0aW9uLmNvZGUgaW4gdmFyaWFudF9vcHRpb24gJiYgdmFyaWFudF9vcHRpb25bb3B0aW9uLmNvZGVdID09IHZhbHVlLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhcmlhbnRzID0gdmFyaWFudHMuZmlsdGVyKHZhcmlhbnQgPT4gdmFyaWFudC5jb2RlID09IGNvZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhcmlhbnRzID0gdmFyaWFudHM7XHJcbiAgICAgICAgY29kZSAmJiB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZU9wdGlvbnMgPSAoKSA9PiB7XHJcbiAgICAgICAgbGV0IHsgb3B0aW9ucyB9ID0gdGhpcy52YXJpYW50cy5sZW5ndGggJiYgdGhpcy52YXJpYW50c1swXTtcclxuICAgICAgICBvcHRpb25zICYmIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4gT2JqZWN0LmtleXMob3B0aW9uKS5mb3JFYWNoKGtleSA9PiB0aGlzLnNldE9wdGlvbihrZXksIG9wdGlvbltrZXldKSkpXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUFzb2NpYXRlZERhdGFGcm9tVmFyaWFudHMgPSAoKSA9PiB7XHJcbiAgICAgICAgbGV0IGFzb2NpYXRlZDogYW55ID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSZWFkeSgpKSB7XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5zdG9jayA9IHRoaXMudmFyaWFudHNbMF0uc3RvY2s7XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5wcmljZSA9IHRoaXMudmFyaWFudHNbMF0ucHJpY2UudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnByaWNlV2l0aG91dFRheGVzID0gdGhpcy52YXJpYW50c1swXS5wcmljZVdpdGhvdXRUYXhlcy50b1N0cmluZygpIHx8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnNhbGVwcmljZSA9IHRoaXMudmFyaWFudHNbMF0uc2FsZXByaWNlICYmIHRoaXMudmFyaWFudHNbMF0uc2FsZXByaWNlLnRvU3RyaW5nKCkgfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBhc29jaWF0ZWQuZGlzY291bnQgPSB0aGlzLnZhcmlhbnRzWzBdPy5kaXNjb3VudCB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5wcm9wZXJ0aWVzID0gdGhpcy52YXJpYW50c1swXS5wcm9wZXJ0aWVzID8gdGhpcy5iZWF1dGlmeVByb3BlcnRpZXModGhpcy52YXJpYW50c1swXS5wcm9wZXJ0aWVzKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnVuaXF1ZUV4dGVybmFsQ29kZSA9IHRoaXMudmFyaWFudHNbMF0/LnVuaXF1ZUV4dGVybmFsQ29kZSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5tdWx0aXBsZVF1YW50aXR5ID0gdGhpcy52YXJpYW50c1swXT8ubXVsdGlwbGVRdWFudGl0eSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnByaWNlID0gdGhpcy5jcmF0ZVByaWNlKClcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnNhbGVwcmljZSA9IHRoaXMuY3JhdGVTYWxlUHJpY2UoKVxyXG4gICAgICAgICAgICBhc29jaWF0ZWQuc3RvY2sgPSAodGhpcy52YXJpYW50cy5tYXAodmFyaWFudCA9PiB2YXJpYW50LnN0b2NrKSkucmVkdWNlKChhLCBiKSA9PiBhICsgYilcclxuICAgICAgICAgICAgYXNvY2lhdGVkLmRpc2NvdW50ID0gdGhpcy5jcmF0ZURpc2NvdW50KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICgnaW1hZ2VzJyBpbiB0aGlzLnZhcmlhbnRzWzBdICYmIHRoaXMudmFyaWFudHNbMF0uaW1hZ2VzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgID8gYXNvY2lhdGVkLnBpY3R1cmUgPSB0aGlzLnZhcmlhbnRzWzBdLmltYWdlc1swXVxyXG4gICAgICAgICAgICA6IGFzb2NpYXRlZC5waWN0dXJlID0gKHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUucGljdHVyZSB8fCB0aGlzLnByb2R1Y3RTdWJqZWN0LnZhbHVlLnBpY3R1cmVzZGVmYXVsdFswXSk7XHJcblxyXG5cclxuICAgICAgICBhc29jaWF0ZWQubWF4aW11bUFtb3VudCA9IHRoaXMudmFyaWFudHNbMF0/Lm1heGltdW1BbW91bnQgfHwgMFxyXG4gICAgICAgIGFzb2NpYXRlZC5taW5pbXVtQW1vdW50ID0gdGhpcy52YXJpYW50c1swXT8ubWluaW11bUFtb3VudCB8fCAwXHJcblxyXG4gICAgICAgIGFzb2NpYXRlZC5tYXhpbXVtSXRlbXNRdWFudGl0eSA9IHRoaXMudmFyaWFudHNbMF0/LnN0b2NrID4gMCAmJiAnbWF4aW11bUl0ZW1zUXVhbnRpdHknIGluIHRoaXMudmFyaWFudHNbMF0gPyB0aGlzLnZhcmlhbnRzWzBdPy5tYXhpbXVtSXRlbXNRdWFudGl0eSA6IHRoaXMudmFyaWFudHNbMF0/LnN0b2NrXHJcbiAgICAgICAgYXNvY2lhdGVkLm1pbmltdW1JdGVtc1F1YW50aXR5ID0gdGhpcy52YXJpYW50c1swXT8uc3RvY2sgPiAwICYmICdtaW5pbXVtSXRlbXNRdWFudGl0eScgaW4gdGhpcy52YXJpYW50c1swXVxyXG4gICAgICAgICAgICAmJiB0aGlzLnZhcmlhbnRzWzBdPy5taW5pbXVtSXRlbXNRdWFudGl0eSA+IDAgPyB0aGlzLnZhcmlhbnRzWzBdPy5taW5pbXVtSXRlbXNRdWFudGl0eVxyXG4gICAgICAgICAgICA6ICh0aGlzLnZhcmlhbnRzWzBdPy5tdWx0aXBsZVF1YW50aXR5ID8gdGhpcy52YXJpYW50c1swXT8ubXVsdGlwbGVRdWFudGl0eSA6IDEpXHJcblxyXG4gICAgICAgIGFzb2NpYXRlZC5maW5hbENvbnN1bWVyID0ge1xyXG4gICAgICAgICAgICBmaW5hbENvbnN1bWVyUHJpY2U6IHRoaXMudmFyaWFudHNbMF0/LmZpbmFsX2NvbnN1bWVyX3ByaWNlLFxyXG4gICAgICAgICAgICBvcmlnaW5hbEZpbmFsQ29uc3VtZXJQcmljZTogdGhpcy52YXJpYW50c1swXT8ub3JpZ2luYWxfZmluYWxfY29uc3VtZXJfcHJpY2UsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhc29jaWF0ZWQudGF4ZXMgPSB7XHJcbiAgICAgICAgICAgIHRheEluY2x1ZGVkOiB0aGlzLnZhcmlhbnRzWzBdPy50YXhJbmNsdWRlZCxcclxuICAgICAgICAgICAgdGF4Q2F0ZWdvcnk6IHRoaXMudmFyaWFudHNbMF0/LnRheENhdGVnb3J5LFxyXG4gICAgICAgIH1cclxuICAgICAgICBhc29jaWF0ZWQudGF4ZUFtb3VudCA9IHRoaXMudmFyaWFudHNbMF0/LnRheGVzIHx8IHVuZGVmaW5lZDtcclxuICAgICAgICBhc29jaWF0ZWQudGF4UmF0ZSA9IHRoaXMudmFyaWFudHNbMF0/LnRheFJhdGUgfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGFzb2NpYXRlZC5wcmljZVdpdGhvdXRUYXhlcyA9IHRoaXMudmFyaWFudHNbMF0/LnByaWNlV2l0aG91dFRheGVzIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC5uZXh0KGFzb2NpYXRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVjaWJlIGxhcyBwcm9waWVkYWRlcyBkZSB1bmEgdmFyaWFudGUgeSBwb3IgY2FkYSBpdGVtIGFybWEgdW4gb2JqZXRvIGNvbiBcclxuICAgICAqIGVsIG5hbWU9Y2xhdmUgeSB2YWx1ZT12YWxvciBkZSBlc2UgaXRlbS4gIFxyXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgXHJcbiAgICAgKiBAcmV0dXJucyBVbiBhcnJlZ2xvIGNvbiBsYXMgcHJvcGllZGFkZXMgZGUgbGEgZm9ybWEgeyBuYW1lID0gLi4uICwgdmFsdWUgPSAuLi59XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYmVhdXRpZnlQcm9wZXJ0aWVzID0gKHByb3BlcnRpZXMpID0+IHtcclxuICAgICAgICBsZXQgYmVhdXRpZnlEYXRhID0gW11cclxuICAgICAgICBwcm9wZXJ0aWVzLmZvckVhY2gocHJvcCA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICBiZWF1dGlmeURhdGEucHVzaCh7IG5hbWU6IGtleSwgdmFsdWU6IHByb3Bba2V5XSB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGJlYXV0aWZ5RGF0YVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JhdGVEaXNjb3VudCA9ICgpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgYWxsX2Rpc2NvdW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMudmFyaWFudHMuZm9yRWFjaCh2YXJpYW50ID0+IHtcclxuICAgICAgICAgICAgICAgIHZhcmlhbnQuZGlzY291bnQgJiYgKGFsbF9kaXNjb3VudCA9IGFsbF9kaXNjb3VudCArICcsICcgKyB2YXJpYW50LmRpc2NvdW50KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChhbGxfZGlzY291bnQgPT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYWxsX2Rpc2NvdW50XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyYXRlUHJpY2UgPSAoKSA9PiB7XHJcbiAgICAgICAgbGV0IG1pbl9wcmljZSA9IDA7XHJcbiAgICAgICAgbGV0IG1heF9wcmljZSA9IDA7XHJcbiAgICAgICAgbGV0IGFsbF9wcmljZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XHJcbiAgICAgICAgICAgIGFsbF9wcmljZXMucHVzaCh2YXJpYW50LnByaWNlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBtaW5fcHJpY2UgPSBhbGxfcHJpY2VzLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5taW4oYSwgYikpO1xyXG4gICAgICAgIG1heF9wcmljZSA9IGFsbF9wcmljZXMucmVkdWNlKChhLCBiKSA9PiBNYXRoLm1heChhLCBiKSwgMCk7XHJcbiAgICAgICAgcmV0dXJuIG1pbl9wcmljZSA9PSBtYXhfcHJpY2UgPyBtYXhfcHJpY2UudG9TdHJpbmcoKSA6IG1pbl9wcmljZSArICcgLSAnICsgbWF4X3ByaWNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JhdGVTYWxlUHJpY2UgPSAoKSA9PiB7XHJcbiAgICAgICAgbGV0IG1pbl9wcmljZSA9IDA7XHJcbiAgICAgICAgbGV0IG1heF9wcmljZSA9IDA7XHJcbiAgICAgICAgbGV0IGFsbF9wcmljZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XHJcbiAgICAgICAgICAgIHZhcmlhbnQuc2FsZXByaWNlICYmIGFsbF9wcmljZXMucHVzaCh2YXJpYW50LnNhbGVwcmljZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFhbGxfcHJpY2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1pbl9wcmljZSA9IGFsbF9wcmljZXMucmVkdWNlKChhLCBiKSA9PiBNYXRoLm1pbihhLCBiKSk7XHJcbiAgICAgICAgbWF4X3ByaWNlID0gYWxsX3ByaWNlcy5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWF4KGEsIGIpLCAwKTtcclxuICAgICAgICByZXR1cm4gbWluX3ByaWNlID09IG1heF9wcmljZSA/IG1heF9wcmljZS50b1N0cmluZygpIDogbWluX3ByaWNlICsgJyAtICcgKyBtYXhfcHJpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpblJhbmdlID0gKHF1YW50aXR5LCBtaW4sIG1heCkgPT4gKChxdWFudGl0eSAtIG1pbikgKiAocXVhbnRpdHkgLSBtYXgpIDw9IDApXHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVF1YW50aXR5ID0gKHF1YW50aXR5OiBudW1iZXIpID0+IHtcclxuICAgICAgICBjb25zdCBhY3R1YWxRdWFudGl0eSA9IHRoaXMuY2FydFNlcnZpY2UuZ2V0Q291bnRGcm9tSXRlbUluQ2FydCh0aGlzLnZhcmlhbnRzWzBdLmNvZGUpO1xyXG4gICAgICAgIGNvbnN0IGFzb2NpYXRlZERhdGEgPSB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdMYSBjYW50aWRhZCBxdWUgbGxlZ286ICcsIHF1YW50aXR5LCAnIHkgbGEgY2FudGlkYWQgYWN0dWFsOiAnLCBhY3R1YWxRdWFudGl0eSk7XHJcbiAgICAgICAgaWYgKChhY3R1YWxRdWFudGl0eSArIHF1YW50aXR5KSA+IGFzb2NpYXRlZERhdGEubWF4aW11bUl0ZW1zUXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ21heGltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBhc29jaWF0ZWREYXRhLm1heGltdW1JdGVtc1F1YW50aXR5IH0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY3R1YWxRdWFudGl0eSArIHF1YW50aXR5KSA8IGFzb2NpYXRlZERhdGEubWluaW11bUl0ZW1zUXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ21pbmltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBhc29jaWF0ZWREYXRhLm1pbmltdW1JdGVtc1F1YW50aXR5IH0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHZhbGlkYXRlUHJpY2VBbmRDcmVkaXRzID0gKHByaWNlOiBudW1iZXIpOiBib29sZWFuID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jcmVkaXRBbW91bnQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ05vIGhheSBjb25maWd1cmFjacOzbiBkZSBjcsOpZGl0b3MgcGFyYSBlc3RlIHVzdWFyaW8uJyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwcmljZSA+IHRoaXMucmVtYWluaW5nQ3JlZGl0cykge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbm90LWVub3VnaC1jcmVkaXRzJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgcHJpdmF0ZSBmZXRjaENhcnREYXRhID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0VG90YWxBbW91bnQoKS5zdWJzY3JpYmUoKHRvdGFsQW1vdW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRvdGFsQW1vdW50ID0gdG90YWxBbW91bnQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q3JlZGl0QW1vdW50KCkuc3Vic2NyaWJlKChjcmVkaXRBbW91bnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jcmVkaXRBbW91bnQgPSBjcmVkaXRBbW91bnQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0UmVtYWluaW5nQ3JlZGl0cygpLnN1YnNjcmliZSgocmVtYWluaW5nQ3JlZGl0cykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlbWFpbmluZ0NyZWRpdHMgPSByZW1haW5pbmdDcmVkaXRzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBDdWFuZG8gaGF5YSBtb2RlbG9zIGRlIHJlc3B1ZXN0YSwgdmFsaWRhbW9zIHF1ZSBubyBzZSBpbnRlbnRlIGNhcmdhciB1biBwcm9kdWN0byBpbmNvbXBsZXRvXHJcbiAgICBwcml2YXRlIGlzUHJvZHVjdFZhbGlkID0gKHByb2R1Y3Q6IFByb2R1Y3QpID0+IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIEFycmF5IGRlIFZhcmlhbnRlcyB5IHN1cyB2YWxvcmVzXHJcbiAgICAgKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRvcm5hIHVuYSBsaXN0YSBmaWx0cmFkYSBkZSBsYXMgdmFyaWFudGVzIHF1ZSBlc3RhbiBzZWxlY2Npb25hZGFzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VmFyaWFudHNTZWxlY3RlZChvcHRpb25zOiBhbnksIG9wdGlvbnNFeGNlcHRpb246IEFycmF5PGFueT4pOiBBcnJheTxPYmplY3Q+IHtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhbnRzU2VsZWN0ZWQgPSBbXTtcclxuICAgICAgICBvcHRpb25zLmZvckVhY2godiA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2LnZhbHVlcyAmJiB2LnZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHYudmFsdWVzLmZvckVhY2godmFsID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsLnNlbGVjdGVkICYmICFvcHRpb25zRXhjZXB0aW9uLmZpbmQob3AgPT4gb3AudG9VcHBlckNhc2UoKSA9PSB2LmNvZGUudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHNTZWxlY3RlZFt2LmNvZGVdID0gdmFsLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdmFyaWFudHNTZWxlY3RlZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIEFycmF5IGRlIFZhcmlhbnRlcyB5IHN1cyB2YWxvcmVzXHJcbiAgICAgKiBAcGFyYW0gdmFyaWFudHMgVG9kYXMgbGFzIHZhcmlhbnRlcyBkaXNwb25pYmxlcyBkZWwgcHJvZHVjdG9cclxuICAgICAqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIHJldG9ybmEgdG9kYXMgbGFzIHZhcmlhbnRlcyBkaXNwb25pYmxlcyBhIHNlbGVjY2lvbiB5IHN1IHN0b2NrXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRWYXJpYW50c0F2YWlsYWJsZShvcHRpb25zOiBhbnksIHZhcmlhbnRzOiBhbnksIG9wdGlvbnNFeGNlcHRpb246IEFycmF5PGFueT4pOiBhbnkge1xyXG5cclxuICAgICAgICBsZXQgdmFyaWFudHNTZWxlY3RlZCA9IHRoaXMuZ2V0VmFyaWFudHNTZWxlY3RlZChvcHRpb25zLCBvcHRpb25zRXhjZXB0aW9uKTtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhbnRzQXZhaWxhYmxlID0gW107XHJcblxyXG4gICAgICAgIHZhcmlhbnRzLm1hcCh2ID0+IHtcclxuXHJcbiAgICAgICAgICAgIGxldCBhdXggPSB7fTtcclxuICAgICAgICAgICAgaWYgKHYub3B0aW9ucyAmJiB2Lm9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB2Lm9wdGlvbnMubWFwKG9wID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGF1eCwgb3AsIHsgc3RvY2s6IHYuc3RvY2sgfSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhcmlhbnRzQXZhaWxhYmxlLnB1c2goYXV4KTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiB2YXJpYW50c0F2YWlsYWJsZS5maWx0ZXIodmEgPT4gdGhpcy5jb25zdGFudHMuY29udGFpbnNBbGwoeyAuLi52YXJpYW50c1NlbGVjdGVkIH0sIHZhKSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIEFycmF5IGRlIHZhcmlhbnRlcyB5IHN1cyB2YWxvcmVzXHJcbiAgICAgKiBAcGFyYW0gY29kZSBDb2RpZ28gZGUgbGEgdmFyaWFudGUgYSBidXNjYXJcclxuICAgICAqIEBwYXJhbSBuYW1lIG5vbWJyZSBkZSBsYSB2YXJpYW50ZSBhIGJ1c2NhclxyXG4gICAgICogQHBhcmFtIHZhcmlhbnRzIHZhcmlhbnRlcyBkZWwgcHJvZHVjdG9cclxuICAgICAqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIGJ1c2NhIGVuIGxhIGxpc3RhIGRlIHZhcmlhbnRlcyBkaXNwb25pYmxlcyBzaSBoYXkgZGUgZXNlIGNvZGlnbywgZXNlIG5vbWJyZSB5IGNvbiBzdG9jayBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGV4aXN0VmFyaWFudEFuZEhhc1N0b2NrKG9wdGlvbnMsIGNvZGUsIG5hbWUsIHZhcmlhbnRzLCBvcHRpb25zRXhjZXB0aW9uID0gW10pOiBib29sZWFuIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFyaWFudHNBdmFpbGFibGUob3B0aW9ucywgdmFyaWFudHMsIG9wdGlvbnNFeGNlcHRpb24pLmZpbmQodmEgPT5cclxuICAgICAgICAgICAgdmEuaGFzT3duUHJvcGVydHkoY29kZSkgJiYgdmFbY29kZV0gPT09IG5hbWUgJiYgdmEuc3RvY2sgPiAwKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gcHJvZHVjdCBwcm9kdWN0byBlbCBjdWFsIHNlIHF1aWVyZSBkZXNkb2JsYXIgcG9yIHZhcmlhbnRlcyBwb3IgdW5hIG9wY2nDs24uXHJcbiAgICAgKiBAcGFyYW0gd2l0aE9wdGlvbiAndHlwZScgdGlwbyBkZSBvcGNpw7NuLCBjb2RlOiBjw7NkaWdvIGRlIGxhIG9wY2nDs24uICdkZWZhdWx0Rmlyc3RPcHRpb24nOiBlbiBjYXNvIGRlIHF1ZSBubyBzZSBwdWVkYSBkZXNkb2JsYXIgcG9yIGxhIG9wY2nDs24gaW5kaWNhZGEgc2kgZWwgdmFsb3IgZXMgdmVyZGFkZXJvIHNlIGludGVudGFyYSBkZXNkb2JsYXIgcG9yIGxhIHByaW1lcmEgb3BjacOzbiBhc29jaWFkYSBhbCBwcm9kdWN0by5cclxuICAgICAqICdjaGVja0lmU3RvY2snOiBlbiBjYXNvIGRlIHF1ZSBlc3RhIHZhbG9yIHNlYSB2ZXJkYWRlcm8gc2UgcmVhbGl6YSB1biBjb250cm9sIGRlIHF1ZSBsYSB2YXJpYW50ZXMgY3VlbnRlbiBjb24gc3RvY2sgcGFyYSBzZXIgdW4gcHJvZHVjdG8gZGVzZG9ibGFkbyBwb3IgbGEgdmFyaWFudGUsIHNpIGVsIHZhbG9yIGVzIGZhbHNvIG5vIHNlIHJlYWxpemEgZGljaG8gY29udHJvbCB5IGVsIHByb2R1Y3RvIHNlIGRlc2RvYmxhcmEgY29uIHN0b2NrIGVuIDAuXHJcbiAgICAgKiBAcmV0dXJucyBhcnJlZ2xvIGNvbiBlbCBwcm9kdWN0byBkZXNkb2JsYWRvIHBvciBsYSB2YXJpYW50ZSBzb2xpY2l0YWRhLlxyXG4gICAgICogKG9wY2nDs24gcG9yIGRlZmVjdG8gcXVlIHNlIGludGVudGEgaGFjZXIgZWwgZGVzZG9ibGFtaWVudG8gJ2NvbG9yJywgbyBiaWVuIHNpIGVuIGxlIHBhcsOhbWV0cm8gd2l0aE9wdGlvbiBlbCBhdHJpYnV0byAnZGVmYXVsdEZpcnN0T3B0aW9uJyBlcyB2ZXJkYWRlcm8gc2UgZGVzZG9ibGEgcG9yIGxhIHByaW1lcmEgb3BjacOzbiBhc29jaWFkYSBhbCBwcm9kdWN0byApIFxyXG4gICAgICovXHJcbiAgICBnZXRQcm9kdWN0V2l0aFVuaXF1ZVZhcmlhbnQgPSAocHJvZHVjdCwgd2l0aE9wdGlvbj86IFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0c1NlcnZpY2UuZ2V0UHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudChbcHJvZHVjdF0sIHdpdGhPcHRpb24pXHJcbiAgICB9XHJcblxyXG59Il19
|
|
@@ -8747,6 +8747,7 @@ let ProductDetailService = class ProductDetailService {
|
|
|
8747
8747
|
if (this.isReady()) {
|
|
8748
8748
|
asociated.stock = this.variants[0].stock;
|
|
8749
8749
|
asociated.price = this.variants[0].price.toString();
|
|
8750
|
+
asociated.priceWithoutTaxes = this.variants[0].priceWithoutTaxes.toString() || undefined;
|
|
8750
8751
|
asociated.saleprice = this.variants[0].saleprice && this.variants[0].saleprice.toString() || undefined;
|
|
8751
8752
|
asociated.discount = ((_a = this.variants[0]) === null || _a === void 0 ? void 0 : _a.discount) || undefined;
|
|
8752
8753
|
asociated.properties = this.variants[0].properties ? this.beautifyProperties(this.variants[0].properties) : undefined;
|
|
@@ -10290,6 +10291,9 @@ __decorate$1f([
|
|
|
10290
10291
|
__decorate$1f([
|
|
10291
10292
|
Input()
|
|
10292
10293
|
], PriceEcComponent.prototype, "saleprice", void 0);
|
|
10294
|
+
__decorate$1f([
|
|
10295
|
+
Input()
|
|
10296
|
+
], PriceEcComponent.prototype, "priceWithoutTaxes", void 0);
|
|
10293
10297
|
__decorate$1f([
|
|
10294
10298
|
Input()
|
|
10295
10299
|
], PriceEcComponent.prototype, "priceSize", void 0);
|