ng-easycommerce 0.1.1 → 1.1.2
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 +4 -0
- package/assets/ec-i18n/ct.json +2 -0
- package/assets/ec-i18n/en.json +2 -0
- package/assets/ec-i18n/es.json +2 -0
- package/assets/ec-i18n/fr.json +2 -0
- package/assets/ec-i18n/gl.json +2 -0
- package/assets/ec-i18n/pr.json +2 -0
- package/bundles/ng-easycommerce.umd.js +84 -20
- 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/account-ec/order-ec/order-ec.component.js +2 -2
- package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +6 -2
- package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
- package/esm2015/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +24 -9
- package/esm2015/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
- package/esm2015/lib/interfaces/checkout-data.js +1 -1
- package/esm2015/lib/services/cart.service.js +9 -1
- package/esm2015/lib/services/checkout/checkout.service.js +3 -1
- package/esm2015/lib/utils/order-util.service.js +22 -2
- package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +2 -2
- package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +6 -2
- package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
- package/esm5/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +29 -14
- package/esm5/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
- package/esm5/lib/interfaces/checkout-data.js +1 -1
- package/esm5/lib/services/cart.service.js +13 -1
- package/esm5/lib/services/checkout/checkout.service.js +3 -2
- package/esm5/lib/utils/order-util.service.js +22 -2
- package/fesm2015/ng-easycommerce.js +75 -14
- package/fesm2015/ng-easycommerce.js.map +1 -1
- package/fesm5/ng-easycommerce.js +84 -20
- package/fesm5/ng-easycommerce.js.map +1 -1
- package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +1 -1
- package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +1 -1
- package/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.d.ts +3 -0
- package/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.d.ts +3 -0
- package/lib/interfaces/checkout-data.d.ts +6 -1
- package/lib/services/cart.service.d.ts +3 -0
- package/lib/utils/order-util.service.d.ts +1 -0
- package/ng-easycommerce.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -219,6 +219,12 @@ let CartService = class CartService {
|
|
|
219
219
|
: this.couponSubject.next(null);
|
|
220
220
|
return true;
|
|
221
221
|
};
|
|
222
|
+
this.updateCartAfterPaymentResponse = (cart) => {
|
|
223
|
+
var _a;
|
|
224
|
+
if (!((_a = cart) === null || _a === void 0 ? void 0 : _a.totals))
|
|
225
|
+
return false;
|
|
226
|
+
return this.updateCartObj(cart, false);
|
|
227
|
+
};
|
|
222
228
|
this.isItemInLocal = (item_id) => this.items.some(item => item.item_id == item_id);
|
|
223
229
|
/**
|
|
224
230
|
* @public
|
|
@@ -435,6 +441,8 @@ let CartService = class CartService {
|
|
|
435
441
|
this.getCartToken = () => this.cart_token;
|
|
436
442
|
this.getLocale = () => this.locale;
|
|
437
443
|
this.getTotalAmount = () => this.cart.pipe(map((cart) => { var _a, _b; return (_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.total; }));
|
|
444
|
+
this.getPaymentMethodAdjustment = () => this.cart.pipe(map((cart) => { var _a, _b, _c; return _c = (_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.paymentMethodAdjustment, (_c !== null && _c !== void 0 ? _c : null); }));
|
|
445
|
+
this.getPaymentMethodAdjustmentLabel = () => this.cart.pipe(map((cart) => { var _a, _b, _c; return _c = (_b = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals) === null || _b === void 0 ? void 0 : _b.paymentMethodAdjustmentLabel, (_c !== null && _c !== void 0 ? _c : null); }));
|
|
438
446
|
/** Total para carrito/sidebar, sin envío persistido ni recargos de checkout. */
|
|
439
447
|
this.getCartTotalAmount = () => this.cart.pipe(map((cart) => this.orderUtils.getCartTotalAmount(cart)));
|
|
440
448
|
this.getCountCartItems = () => this.cartItems.pipe(map((cartItems) => { var _a; return (_a = cartItems) === null || _a === void 0 ? void 0 : _a.length; }));
|
|
@@ -906,4 +914,4 @@ CartService = __decorate([
|
|
|
906
914
|
})
|
|
907
915
|
], CartService);
|
|
908
916
|
export { CartService };
|
|
909
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcxQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHekMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLDRCQUE0QixFQUFFLHdCQUF3QixFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7O0FBS3hJLElBQWEsV0FBVyxHQUF4QixNQUFhLFdBQVc7SUFrRHBCLFlBQW9CLFVBQTZCLEVBQVUsYUFBMkIsRUFBVSxNQUFpQixFQUNyRyxXQUF3QixFQUFVLFVBQStCLEVBQVUsZ0JBQWtDLEVBQzdHLG9CQUEwQyxFQUMxQyxNQUFjLEVBQ2Qsd0JBQWtEO1FBSjFDLGVB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LENBQUM7SUFDbEQsQ0FBQztDQUVKLENBQUE7O1lBcGdDbUMsaUJBQWlCO1lBQXlCLFlBQVk7WUFBa0IsU0FBUztZQUN4RixXQUFXO1lBQXNCLG1CQUFtQjtZQUE0QixnQkFBZ0I7WUFDdkYsb0JBQW9CO1lBQ2xDLE1BQU07WUFDWSx3QkFBd0I7OztBQXREckQsV0FBVztJQUh2QixVQUFVLENBQUM7UUFDUixVQUFVLEVBQUUsTUFBTTtLQUNyQixDQUFDO0dBQ1csV0FBVyxDQXNqQ3ZCO1NBdGpDWSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQcm9kdWN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wcm9kdWN0JztcbmltcG9ydCB7IENhcnRJdGVtLCBDYXJ0SXRlbVByaWNpbmcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NhcnQtaXRlbSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2Nvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi9jb3JlLmNvbnN0cyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uL3V0aWxzL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ291cG9uSSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY291cG9uJztcbmltcG9ydCB7IE9yZGVyVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9vcmRlci11dGlsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hlY2tvdXREYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVja291dC1kYXRhJztcbmltcG9ydCB7IENhcnRBZmZvcmRhYmxlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXJ0L2NhcnQtYWZmb3JkYWJsZSc7XG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ2hhbm5lbCB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hhbm5lbCc7XG5pbXBvcnQgeyBDYXJ0VG90YWxQcmljaW5nVmFsdWUsIENhcnRUb3RhbHNQcmljaW5nIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXJ0LXRvdGFscyc7XG5pbXBvcnQgeyBDYXJ0SXRlbVByaWNlUHJlc2VudGF0aW9uLCBDYXJ0U3VtbWFyeVByaWNlUHJlc2VudGF0aW9uLCBQcmljZVByZXNlbnRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9wcmljZS1wcmVzZW50YXRpb24uc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2FydFNlcnZpY2Uge1xuICAgIHByaXZhdGUgY2FydEl0ZW1zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PENhcnRJdGVtW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gICAgcHJpdmF0ZSBjb3Vwb25TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gICAgcHJpdmF0ZSBjYXJ0U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICAgIHByaXZhdGUgcmVxdWVzdEluUHJvY2VzcyA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICAgIHByaXZhdGUgcHJvbW90aW9uc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxDaGVja291dERhdGFbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcblxuICAgIHByaXZhdGUgYmFsYW5jZUN1c3RvbWVyU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PHtcbiAgICAgICAgYWxsb3dBbnlQYXltZW50TWV0aG9kPzogYm9vbGVhbjtcbiAgICAgICAgYWxsb3dFeGNlZWRCYWxhbmNlPzogYm9vbGVhbjtcbiAgICAgICAgY3JlZGl0QW1vdW50PzogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgc2hvd01heD86IGJvb2xlYW47XG4gICAgICAgIHNob3dQcmljZT86IGJvb2xlYW47XG4gICAgICAgIHJlbWFpbmluZ0NyZWRpdHM/OiBudW1iZXI7XG4gICAgICAgIGFwcGx5TWF4T3JkZXJzPzogYm9vbGVhbjtcbiAgICAgICAgbWF4T3JkZXJzPzogbnVtYmVyO1xuICAgIH0gfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG5cbiAgICBwcml2YXRlIGl0ZW1zID0gW107XG5cbiAgICBwcml2YXRlIGNvdW50OiBudW1iZXIgPSAwO1xuICAgIHByaXZhdGUgbG9jYWxlID0gXCJcIjtcbiAgICBwcml2YXRlIGxvZ2dlZF9pbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgaGF2ZV90b191cGRhdGUgPSB0cnVlO1xuICAgIHB1YmxpYyBjaGFubmVsQ29uZmlnOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIGNhcnRfYmFzZVVybCA9ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9jYXJ0cyc7XG5cbiAgICBwdWJsaWMgY2FydEl0ZW1zQXBpID0gKCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XG4gICAgcHVibGljIGFkZEl0ZW1BcGkgPSAoKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvaXRlbXMnICsgJz9sb2NhbGU9JyArIHRoaXMuY29uc3RzLmdldExvY2FsZSgpO1xuICAgIHB1YmxpYyBhZGRBbGxJdGVtc0FwaSA9ICgpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9tdWx0aXBsZS1pdGVtcycgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XG4gICAgcHVibGljIHVwZGF0ZUl0ZW1RdWFudGl0eUFwaSA9IChpdGVtX2lkKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvaXRlbXMvJyArIGl0ZW1faWQgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XG4gICAgcHVibGljIGRlbGV0ZUl0ZW1BcGkgPSAoaXRlbV9pZCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRfdG9rZW4gKyAnL2l0ZW1zLycgKyBpdGVtX2lkICsgJz9sb2NhbGU9JyArIHRoaXMuY29uc3RzLmdldExvY2FsZSgpO1xuICAgIHB1YmxpYyBjb3Vwb25BcGkgPSAoKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvY291cG9uJztcbiAgICBwdWJsaWMgYWRkcmVzc0Jvb2tBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvYWRkcmVzcy1ib29rJztcbiAgICBwdWJsaWMgdGF4ZXNBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2FydHMvdGF4JztcblxuICAgIHB1YmxpYyBjYXJ0X3Rva2VuO1xuICAgIHB1YmxpYyBjYXJ0SXRlbXMgPSB0aGlzLmNhcnRJdGVtc1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShtYXAoaXRlbXMgPT4gdGhpcy5zd2l0Y2hQcmljZUluQ2FydEl0ZW0oaXRlbXMpKSlcbiAgICBwdWJsaWMgY291cG9uID0gdGhpcy5jb3Vwb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBsb2FkaW5nID0gdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBjYXJ0ID0gdGhpcy5jYXJ0U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgcHJvbW90aW9ucyA9IHRoaXMucHJvbW90aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGRlbGV0aW5nOiBCb29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGJhbGFuY2VDdXN0b21lciQgPSB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGFsbG93QW55UGF5bWVudE1ldGhvZCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0FueVBheW1lbnRNZXRob2QgPz8gbnVsbCkpO1xuICAgIHB1YmxpYyBhbGxvd0V4Y2VlZEJhbGFuY2UkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uYWxsb3dFeGNlZWRCYWxhbmNlID8/IG51bGwpKTtcbiAgICBwdWJsaWMgY3JlZGl0QW1vdW50JCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LmNyZWRpdEFtb3VudCA/PyBudWxsKSk7XG4gICAgcHVibGljIHNob3dNYXgkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uc2hvd01heCA/PyBudWxsKSk7XG4gICAgcHVibGljIHNob3dQcmljZSQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5zaG93UHJpY2UgPz8gbnVsbCkpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSwgcHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsIHByaXZhdGUgY29uc3RzOiBDb25zdGFudHMsXG4gICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIG9yZGVyVXRpbHM6IE9yZGVyVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgcHJpY2VQcmVzZW50YXRpb25TZXJ2aWNlOiBQcmljZVByZXNlbnRhdGlvblNlcnZpY2UpIHtcblxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5pdGVtcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhcnQnKSkgfHwgW107XG4gICAgICAgIHRoaXMuY2FydF90b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYXJ0X3Rva2VuJykgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5sb2dnZWRJbi5zdWJzY3JpYmUocmVzID0+IHRoaXMuZ2V0Q2FydCgpKTtcbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUocmVzID0+IHRoaXMuY2hhbm5lbENvbmZpZyA9IHJlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENhcnQyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXJ0SXRlbXNTdWJqZWN0LnZhbHVlO1xuICAgIH1cblxuICAgIGdldEFkZHJlc3NCb29rID0gYXN5bmMgKCkgPT5cbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLmFkZHJlc3NCb29rQXBpKCkpLnBpcGUobWFwKHJlcyA9PiByZXM/Lmxlbmd0aCAmJiByZXMubWFwKGFkZHJlcyA9PiB7IHJldHVybiBhZGRyZXMgJiYgeyAuLi5hZGRyZXMsIHNlbGVjdGVkOiBhZGRyZXMuZGVmYXVsdCB9IH0pIHx8IG51bGwpKS50b1Byb21pc2UoKTtcblxuICAgIHB1YmxpYyBnZXRUYXhlcyA9IGFzeW5jICgpID0+XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMudGF4ZXNBcGkoKSwgeyB0b2tlbjogdGhpcy5jYXJ0X3Rva2VuIH0pLnN1YnNjcmliZShyZXMgPT4gcmVzKVxuXG4gICAgcHJpdmF0ZSBnZXRDYXJ0ID0gYXN5bmMgKCkgPT5cbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5jYXJ0SXRlbXNBcGkoKSwgKCh0aGlzLmNhcnRfdG9rZW4gJiYgdGhpcy5pdGVtcy5sZW5ndGggPj0gMSkgJiYgeyB0b2tlbjogdGhpcy5jYXJ0X3Rva2VuIH0pKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXG4gICAgICAgIClcblxuICAgIHByaXZhdGUgZ2V0Q2FydEJ5VG9rZW4gPSBhc3luYyAoKSA9PlxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmNhcnRJdGVtc0FwaSgpLCAoKHRoaXMuY2FydF90b2tlbikgJiYgeyB0b2tlbjogdGhpcy5jYXJ0X3Rva2VuIH0pKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXG4gICAgICAgIClcblxuICAgIHByaXZhdGUgZ2V0Q2FydEJ5Q3VzdG9tZXIgPSBhc3luYyAoKSA9PlxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmNhcnRJdGVtc0FwaSgpKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXG4gICAgICAgIClcblxuICAgIC8qKlxuICAgICAqICBAcHJpdmF0ZVxuICAgICAqICBDQVJUIENSVUQgU0VSVkVSJ1MgU1lOQ1JPTklaRURcbiAgICAgKi9cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUNhcnQgPSAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5jYXJ0X3Rva2VuID0gcmVzcG9uc2UudG9rZW5WYWx1ZTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhcnRfdG9rZW4nLCB0aGlzLmNhcnRfdG9rZW4pO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IHJlc3BvbnNlLmxvY2FsZTtcbiAgICAgICAgLyogbGV0IGxvY2FsZUZyb21TdG9yYWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0xPQ0FMRScpXG4gICAgICAgIGNvbnNvbGUubG9nKGxvY2FsZUZyb21TdG9yYWdlKVxuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZUZyb21TdG9yYWdlID8gbG9jYWxlRnJvbVN0b3JhZ2UgOiByZXNwb25zZS5sb2NhbGU7XG4gICAgICAgIHJlc3BvbnNlLmxvY2FsZSA9IHRoaXMubG9jYWxlICovXG4gICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihyZXNwb25zZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKHJlc3BvbnNlLml0ZW1zKSk7XG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhc2lnbmEgYHByb2R1Y3QucHJpY2VgIGFsIHByZWNpbyBiYXNlIGxlZ2FjeSBxdWUgZXNwZXJhIGVsIHRlbXBsYXRlIGhpc3TDs3JpY28gZGVsIGNhcnJpdG8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbXMgw410ZW1zIG5vcm1hbGl6YWRvcyBkZWwgY2Fycml0by5cbiAgICAgKiBAcmV0dXJucyBMb3MgbWlzbW9zIMOtdGVtcyBjb24gYHByb2R1Y3QucHJpY2VgIGFsaW5lYWRvIGFsIHByZWNpbyBiYXNlIG1vc3RyYWRvIGVuIGxhIHRhYmxhLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBFc3RlIG3DqXRvZG8gbm8gbW9kaWZpY2EgYHByaWNpbmcuZmluYWxQcmljZWAuIFNvbG8gcHJlc2VydmEgY29tcGF0aWJpbGlkYWQgY29uIHRlbXBsYXRlc1xuICAgICAqIHZpZWpvcyBxdWUgdG9kYXbDrWEgbGVlbiBgaXRlbS5wcm9kdWN0LnByaWNlYCBkaXJlY3RhbWVudGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzd2l0Y2hQcmljZUluQ2FydEl0ZW0gPSAoaXRlbXM6IENhcnRJdGVtW10pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcChcbiAgICAgICAgICAgIGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnByb2R1Y3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpY2luZyA9IHRoaXMuZ2V0SXRlbVByaWNpbmcoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhbnQgPSBpdGVtLnByb2R1Y3QudmFyaWFudHM/LlswXTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wcm9kdWN0LnByaWNlID0gcHJpY2luZz8uYmFzZVByaWNlIHx8IHZhcmlhbnQ/LnNhbGVwcmljZSB8fCB2YXJpYW50Py5wcmljZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RlcENhcnQgPSAocmVzKSA9PiB7XG4gICAgICAgIHJlcy5pdGVtcy5sZW5ndGggPiAwICYmIHJlcy5pdGVtcy5mb3JFYWNoKFxuICAgICAgICAgICAgaXRlbSA9PiAhdGhpcy5pc0l0ZW1JbkxvY2FsKGl0ZW0uaWQpICYmIHRoaXMuZGVsZXRlQ2FydEl0ZW0oaXRlbSwgZmFsc2UpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYWRkQWxsVG9DYXJ0KFxuICAgICAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgaXRlbSA9PiAhcmVzLml0ZW1zLnNvbWUoZXh0ZXJuYWxfaXRlbSA9PiBleHRlcm5hbF9pdGVtLmlkID09IGl0ZW0uaXRlbV9pZClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgdXBkYXRlQ2FydEl0ZW1zID0gKGl0ZW1zKSA9PiB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcbiAgICAgICAgdGhpcy5jb3VudCA9IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XG4gICAgICAgIHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaW5jcm9uaXphIGBjYXJ0SXRlbXNTdWJqZWN0YCBjb24gbGEgw7psdGltYSByZXNwdWVzdGEgZGVsIGJhY2tlbmQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2FydCBSZXNwdWVzdGEgZGUgY2Fycml0byByZWNpYmlkYSBkZXNkZSBjdWFscXVpZXIgZW5kcG9pbnQgcXVlIGRldnVlbHZhIGBpdGVtc2AuXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFNlIHJldXRpbGl6YSBkZXNwdcOpcyBkZSBhY3R1YWxpemFyIGNhbnRpZGFkZXMsIGFwbGljYXIgY3Vww7NuIG8gcmVtb3ZlciBwcm9kdWN0b3MgcGFyYSBldml0YXJcbiAgICAgKiBxdWUgbGEgdGFibGEgcXVlZGUgY29uIHN1YnRvdGFsZXMgbyBwcm9tb2Npb25lcyBkZXNhY3R1YWxpemFkYXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzeW5jQ2FydEl0ZW1zRnJvbVJlc3BvbnNlID0gKGNhcnQpID0+IHtcbiAgICAgICAgaWYgKCFjYXJ0Py5pdGVtcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJldmlvdXNJdGVtcyA9IHRoaXMuaXRlbXMgfHwgW107XG4gICAgICAgIGNvbnN0IG5leHRJdGVtcyA9IHRoaXMudHJhbnNmb3JtSXRlbXMoY2FydC5pdGVtcykubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzSXRlbTogYW55ID0gcHJldmlvdXNJdGVtcy5maW5kKHByZXYgPT4gcHJldi5pdGVtX2lkID09IGl0ZW0uaXRlbV9pZCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnByZXZpb3VzSXRlbSxcbiAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgIGZhaWxlZDogcHJldmlvdXNJdGVtPy5mYWlsZWQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IHByZXZpb3VzSXRlbT8uZXJyb3JcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQ2FydEl0ZW1zKG5leHRJdGVtcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDYXJ0SXRlbVF1YW50aXR5ID0gKHZhcmlhbnRfaWQsIHF1YW50aXR5LCBjb21tZW50cz86IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZENvbW1lbnRzID0gY29tbWVudHMgIT09IHVuZGVmaW5lZCA/IChjb21tZW50cyA/PyAnJykudHJpbSgpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gdGhpcy5pdGVtcy5tYXAoaXQgPT4ge1xuICAgICAgICAgICAgaWYgKGl0LnZhcmlhbnRfaWQgIT09IHZhcmlhbnRfaWQpIHJldHVybiBpdDtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWQ6IGFueSA9IHsgLi4uaXQsIHF1YW50aXR5OiBOdW1iZXIocXVhbnRpdHkpIH07XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZENvbW1lbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVkLmNvbW1lbnRzID0gbm9ybWFsaXplZENvbW1lbnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaXRlbXMgPSBuZXdJdGVtcztcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy51cGRhdGVMb2NhbENhcnQoKTtcbiAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtdXBkYXRlZCcsIHsgcXVhbnRpdHkgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBlbmRUb0NhcnQgPSAoY2FydCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCk7XG4gICAgICAgIHRoaXMuc3luY0NhcnRJdGVtc0Zyb21SZXNwb25zZShjYXJ0KTtcbiAgICAgICAgLy8gICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtYWRkZWQnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUNhcnRJdGVtID0gKGNhcnQsIHByb2R1Y3QsIHRvYXN0ID0gdHJ1ZSkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCwgZmFsc2UpO1xuICAgICAgICB0aGlzLnN5bmNDYXJ0SXRlbXNGcm9tUmVzcG9uc2UoY2FydCk7XG4gICAgICAgIHRvYXN0ICYmIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcbiAgICAgICAgdG9hc3QgJiYgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtcmVtb3ZlZCcpO1xuICAgICAgICAvLyB0aGlzLmdvb2dsZUFuYWx5dGljcy5yZW1vdmVGcm9tQ2FydChwcm9kdWN0KTtcbiAgICAgICAgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgncmVtb3ZlX2Zyb21fY2FydCcsIHsgLi4ucHJvZHVjdCwgY3VycmVuY3k6IHRoaXMuY29uc3RzLmN1cnJlbmN5LmNvZGUgfSlcblxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkSWZBbGxyZWFkeUV4aXN0cyA9IChwcm9kdWN0LCB2YXJpYW50X2lkLCBxdWFudGl0eUFkZCA9IDEsIGNvbW1lbnRzPzogc3RyaW5nIHwgbnVsbCkgPT5cbiAgICAgICAgdGhpcy5pdGVtcy5maW5kKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0LmlkICYmIGl0ZW0udmFyaWFudF9pZCA9PSB2YXJpYW50X2lkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtUXVhbnRpdHkoaXRlbSwgdGhpcy5maW5kSXRlbShwcm9kdWN0LmlkKS5xdWFudGl0eSArIHF1YW50aXR5QWRkLCBjb21tZW50cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgcHJpdmF0ZSB1cGRhdGVMb2NhbENhcnQgPSAoKSA9PiB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0JywgSlNPTi5zdHJpbmdpZnkodGhpcy5pdGVtcykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRDYXJ0ID0gKG5leHQ/KSA9PiB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy5jYXJ0U3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLnVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKG51bGwpO1xuICAgICAgICB0aGlzLmNhcnRfdG9rZW4gPSBudWxsO1xuICAgICAgICB0aGlzLmNhcnRJdGVtc1N1YmplY3QubmV4dChbXSk7XG4gICAgICAgIHRoaXMuY291bnQgPSAwO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2FydCcsIFwiW11cIik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdjYXJ0X3Rva2VuJyk7XG4gICAgICAgIG5leHQgJiYgbmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2FydE9iaiA9IChjYXJ0LCBlbWl0RXZlbnQgPSB0cnVlKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHRoaXMuY2FydFN1YmplY3QubmV4dChjYXJ0KTtcbiAgICAgICAgdGhpcy51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhjYXJ0Py5iYWxhbmNlQ3VzdG9tZXIsIGNhcnQ/LnRvdGFscz8udG90YWwpO1xuICAgICAgICBlbWl0RXZlbnQgJiYgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnYWRkX3RvX2NhcnQnLCBjYXJ0KTtcbiAgICAgICAgdGhpcy5wcm9tb3Rpb25zU3ViamVjdC5uZXh0KHRoaXMub3JkZXJVdGlscy5nZXRQcm9tb3Rpb25zKGNhcnQsIHRydWUpKTtcblxuICAgICAgICBjYXJ0LmNvdXBvbkNvZGVcbiAgICAgICAgICAgID8gdGhpcy5mb3JtYXRDb3Vwb24oY2FydClcbiAgICAgICAgICAgIDogdGhpcy5jb3Vwb25TdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNJdGVtSW5Mb2NhbCA9IChpdGVtX2lkKSA9PiB0aGlzLml0ZW1zLnNvbWUoaXRlbSA9PiBpdGVtLml0ZW1faWQgPT0gaXRlbV9pZCk7XG5cbiAgICAvKipcbiAgICAgKiAgQHB1YmxpY1xuICAgICAqICBDQVJUIENSVURcbiAgICAgKi9cblxuICAgIGFkZFRvQ2FydCA9IChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkLCBjb21tZW50cz86IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiYWxhbmNlID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xuICAgICAgICBjb25zdCBhcHBseU1heE9yZGVycyA9IGJhbGFuY2U/LmFwcGx5TWF4T3JkZXJzID8/IGZhbHNlO1xuICAgICAgICBjb25zdCBtYXhPcmRlcnMgPSBiYWxhbmNlPy5tYXhPcmRlcnMgPz8gSW5maW5pdHk7XG5cbiAgICAgICAgaWYgKGFwcGx5TWF4T3JkZXJzICYmIChtYXhPcmRlcnMgPD0gMCB8fCBtYXhPcmRlcnMgPT09IG51bGwpKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbWF4LW9yZGVycy1yZWFjaGVkJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XG4gICAgICAgIGxldCBhZGRlZCA9IHRoaXMuYWRkSWZBbGxyZWFkeUV4aXN0cyhwcm9kdWN0LCB2YXJpYW50X2lkLCBxdWFudGl0eSwgY29tbWVudHMpO1xuICAgICAgICBpZiAoIWFkZGVkKSB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IHByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IHF1YW50aXR5LFxuICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGNvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5jb21tZW50cyA9IGNvbW1lbnRzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFuZWphciBsYSByZXNwdWVzdGEgSFRUUCBleGl0b3NhIChjw7NkaWdvIDIwMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kVG9DYXJ0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdC1hZGRlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFuZWphciBlbCBlcnJvciBkZSBsYSBsbGFtYWRhIEhUVFAgKGPDs2RpZ28gNTAwIHUgb3RybyBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIuc3RhdHVzID09PSA1MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDw7NkaWdvIGRlIGVycm9yIDUwMCAodGltZW91dClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ0hhIG9jdXJyaWRvIHVuIGVycm9yIGFsIGFncmVnYXIgYWwgY2Fycml0by4gVnVlbHZhIGEgaW50ZW50YXJsby4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RybyBjw7NkaWdvIGRlIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdFcnJvciBpbmVzcGVyYWRvLiBWdWVsdmEgYSBpbnRlbnRhcmxvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIGFkZFRvTG90ID0gKHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRfaWQsIGlkPywgb3JkZXJfaXRlbV9pZD8sIGxvdF9xdWFudGl0eT8sIHVuaXRfcHJpY2U/LCB1bml0X3RvdGFsPywgYWp1c3RlbWVudF90b3RhbD8sIHRvdGFsX2xvdD8sIGxvdF9zdGF0dXM/LCBkYXRlX3JlcXVlc3Q/LCBub3Rlcz8sIHNoaXBwaW5nX2FkZHJlc3NfaWQ/LCBzaGlwcGluZ19hZGRyZXNzX25hbWU/LCBhY3Rpb24/KSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYWRkZWQgPSAnJztcbiAgICAgICAgIWFkZGVkICYmIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkLCBpZDogaWQgfHwgJycsIG9yZGVyX2l0ZW1faWQ6IG9yZGVyX2l0ZW1faWQgfHwgJycsIGxvdF9xdWFudGl0eTogbG90X3F1YW50aXR5IHx8ICcnLCB1bml0X3ByaWNlOiB1bml0X3ByaWNlIHx8ICcnLCB1bml0X3RvdGFsOiB1bml0X3RvdGFsIHx8ICcnLCBhanVzdGVtZW50X3RvdGFsOiBhanVzdGVtZW50X3RvdGFsIHx8ICcnLCB0b3RhbF9sb3Q6IHRvdGFsX2xvdCB8fCAnJywgbG90X3N0YXR1czogbG90X3N0YXR1cyB8fCAnJywgZGF0ZV9yZXF1ZXN0OiBkYXRlX3JlcXVlc3QgfHwgJycsIG5vdGVzOiBub3RlcyB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19pZDogc2hpcHBpbmdfYWRkcmVzc19pZCB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19uYW1lOiBzaGlwcGluZ19hZGRyZXNzX25hbWUgfHwgJycsIGFjdGlvbjogYWN0aW9uIHx8ICduZXdsb3QnIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIHJlcyA9PiB0aGlzLmFwcGVuZFRvQ2FydChyZXMpLFxuICAgICAgICAgICAgICAgIGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVycilcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgYWRkVG9DYXJ0UHJvbWlzZSA9IGFzeW5jIChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkLCBjb21tZW50cz86IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xuICAgICAgICBsZXQgYWRkZWQgPSB0aGlzLmFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdCwgdmFyaWFudF9pZCwgcXVhbnRpdHksIGNvbW1lbnRzKTtcbiAgICAgICAgaWYgKCFhZGRlZCkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0ICh0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCwgcXVhbnRpdHk6IHF1YW50aXR5LCB2YXJpYW50Q29kZTogdmFyaWFudF9pZCB9KS50b1Byb21pc2UoKSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQuZXJyb3IpIHRoaXMuaGFuZGxlRXJyb3IocmVzdWx0LmVycm9yKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kVG9DYXJ0KHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSB9XG4gICAgfVxuXG5cbiAgICBhZGRBbGxUb0NhcnQgPSAoaXRlbXM6IGFueVtdKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IGl0ZW1zOiB0aGlzLm1lcmdlSXRlbXNBZGRBbGxUb0NhcnQoaXRlbXMpIH07XG5cbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRBbGxJdGVtc0FwaSgpLCBwYXJhbXMpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzLmNhcnQpICYmIHRoaXMudXBkYXRlQ2FydEl0ZW1zKHRoaXMudHJhbnNmb3JtSXRlbXMocmVzLmNhcnQuaXRlbXMpKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLmNhcnRfcmVzcG9uc2Uuc3RhdHVzID09ICdzdWNjZXNzJyAmJiB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdHMtYWRkZWQnKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkUmVwZWF0T3JkZXJUb0NhcnQoaXRlbXM6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNhcnRJdGVtc1N1YmplY3QudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ2NhcnQtbm90LWVtcHR5Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXRlbXNUb0FkZCA9IGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxuICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXG4gICAgICAgICAgICB2YXJpYW50Q29kZTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLmNvZGVcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGlmIChpdGVtc1RvQWRkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vLXByb2R1Y3RzLXRvLWFkZCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgaXRlbXM6IGl0ZW1zVG9BZGRcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcblxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEFsbEl0ZW1zQXBpKCksIHBhcmFtcylcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcblxuICAgICAgICAgICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHJlcy5lcnJvcj8udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJykgfHwgJ3Vua25vd25fZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdyhlcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXNSZXNwb25zZSA9IHJlcz8uaXRlbXNfcmVzcG9uc2UgfHwgW107XG4gICAgICAgICAgICAgICAgY29uc3QgY2FydEl0ZW1zID0gcmVzPy5jYXJ0Py5pdGVtcyB8fCBbXTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG91dE9mU3RvY2tJdGVtcyA9IGl0ZW1zUmVzcG9uc2UuZmlsdGVyKGl0ZW0gPT5cbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zdGF0dXMgPT09ICdmYWlsdXJlJyAmJlxuICAgICAgICAgICAgICAgICAgICBpdGVtLmVycm9ycy5zb21lKGVycm9yID0+IGVycm9yLmNvZGUgPT09ICdvdXRfb2Zfc3RvY2snKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2FydEl0ZW1zLmxlbmd0aCA9PT0gMCAmJiBvdXRPZlN0b2NrSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnYWxsLXByb2R1Y3RzLW91dC1vZi1zdG9jaycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG91dE9mU3RvY2tJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdzb21lLXByb2R1Y3RzLW91dC1vZi1zdG9jaycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjYXJ0SXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzLmNhcnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKGNhcnRJdGVtcykpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdHMtYWRkZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY2FydCddKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyZ2VJdGVtc0FkZEFsbFRvQ2FydCA9IChpdGVtczogYW55W10pID0+IHtcbiAgICAgICAgbGV0IHBhcmFtc01lcmdlID0gW11cbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgbGV0IGl0ZW1JbnRlcm5vID0gaXRlbXMuZmluZChpdGVtUGFyYW0gPT4gaXRlbVBhcmFtLnZhcmlhbnRDb2RlID09IGl0ZW0udmFyaWFudF9pZClcbiAgICAgICAgICAgIHBhcmFtc01lcmdlLnB1c2goXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogaXRlbS52YXJpYW50X2lkLFxuICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbUludGVybm8gJiYgaXRlbUludGVybm8ucXVhbnRpdHkgfHwgaXRlbS5xdWFudGl0eVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgfSlcblxuICAgICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcihpdGVtUGFyYW0gPT4gIXRoaXMuaXRlbXMuZmluZChpdGVtID0+IGl0ZW1QYXJhbS52YXJpYW50Q29kZSA9PSBpdGVtLnZhcmlhbnRfaWQpKVxuXG4gICAgICAgIHJldHVybiBbLi4uaXRlbXMsIC4uLnBhcmFtc01lcmdlXVxuICAgIH1cblxuICAgIHVwZGF0ZUl0ZW1RdWFudGl0eSA9IChpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHksIGNvbW1lbnRzPzogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZVF1YW50aXR5KGl0ZW0sIHF1YW50aXR5KSAmJiAodGhpcy52YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyhpdGVtLCBxdWFudGl0eSkpKSB7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcblxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZDogYW55ID0geyBxdWFudGl0eTogTnVtYmVyKHF1YW50aXR5KSB9O1xuICAgICAgICAgICAgaWYgKGNvbW1lbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGVhbmVkID0gKGNvbW1lbnRzID8/ICcnKS50cmltKCk7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5jb21tZW50cyA9IGNsZWFuZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIC5wdXQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbVF1YW50aXR5QXBpKHRoaXMuZmluZEl0ZW1CeUlkVmFyaWFudChpdGVtLnZhcmlhbnRfaWQpKSxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNDYXJ0SXRlbXNGcm9tUmVzcG9uc2UocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0LXVwZGF0ZWQnLCB7IHF1YW50aXR5IH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YWxpZGF0ZVF1YW50aXR5ID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSkgPT4ge1xuICAgICAgICBpZiAoKHRoaXMuZ2V0Q291bnRGcm9tSXRlbUluQ2FydChpdGVtLnByb2R1Y3RDb2RlKSArIHF1YW50aXR5KSA+IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tYXhpbXVtSXRlbXNRdWFudGl0eSkge1xuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ21heGltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWF4aW11bUl0ZW1zUXVhbnRpdHkgfSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmICgodGhpcy5nZXRDb3VudEZyb21JdGVtSW5DYXJ0KGl0ZW0ucHJvZHVjdENvZGUpICsgcXVhbnRpdHkpIDwgaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1pbmltdW1JdGVtc1F1YW50aXR5KSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbWluaW11bS1pdGVtcy1xdWFudGl0eScsIHsgcXVhbnRpdHk6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSB9KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5ICYmIGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5ID4gMCkge1xuICAgICAgICAgICAgaWYgKCh0aGlzLmdldENvdW50RnJvbUl0ZW1JbkNhcnQoaXRlbS5wcm9kdWN0Q29kZSkgKyBxdWFudGl0eSkgJSBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LWJlLW11bHRpcGxlJywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm11bHRpcGxlUXVhbnRpdHkgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyA9IChpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHk6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuICAgICAgICBjb25zdCBiYWxhbmNlID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xuXG4gICAgICAgIGlmICghYmFsYW5jZSB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gbnVsbCB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiYWxhbmNlLmFsbG93QW55UGF5bWVudE1ldGhvZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXRQcmljZSA9IGl0ZW0udG90YWwgLyBpdGVtLnF1YW50aXR5O1xuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUXVhbnRpdHkgPSBxdWFudGl0eSAtIGl0ZW0ucXVhbnRpdHk7XG5cbiAgICAgICAgaWYgKGFkZGl0aW9uYWxRdWFudGl0eSA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxDb3N0ID0gdW5pdFByaWNlICogYWRkaXRpb25hbFF1YW50aXR5O1xuXG4gICAgICAgIGlmIChhZGRpdGlvbmFsQ29zdCA+IGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cykge1xuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIHB1YmxpYyBoYXNTdWZmaWNpZW50Q3JlZGl0c0ZvckNhcnRUb3RhbCA9ICgpOiBib29sZWFuID0+IHtcbiAgICAgICAgY29uc3QgYmFsYW5jZSA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcblxuICAgICAgICBpZiAoIWJhbGFuY2UgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IG51bGwgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbCA9IHRoaXMuY2FydFN1YmplY3QudmFsdWU/LnRvdGFscz8udG90YWwgfHwgMDtcblxuICAgICAgICAvLyBTaSBOTyBwdWVkZSBleGNlZGVyIHNhbGRvIHkgZWwgdG90YWwgc3VwZXJhIGVsIGNyZWRpdG8sIGJsb3F1ZWFyXG4gICAgICAgIGlmICghYmFsYW5jZS5hbGxvd0V4Y2VlZEJhbGFuY2UgJiYgdG90YWwgPiBiYWxhbmNlLmNyZWRpdEFtb3VudCkge1xuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIGNhbGN1bGF0ZVN0b2NrQ291bnRzID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5wcm9kdWN0LnN0b2NrIDwgaXRlbS5xdWFudGl0eSArIHF1YW50aXR5KSB7XG4gICAgICAgICAgICAvLyB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGRlbGV0ZUNhcnRJdGVtID0gKGl0ZW0sIHRvYXN0ID0gdHJ1ZSkgPT4ge1xuICAgICAgICBsZXQgaWRfYnVzY2FkbyA9IHRoaXMuZmluZEl0ZW1CeUlkVmFyaWFudChpdGVtLnZhcmlhbnRfaWQpXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xuICAgICAgICAvLyAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLCBxdWFudGl0eTogMCwgdmFyaWFudENvZGU6IGl0ZW0udmFyaWFudF9pZCwgaWQ6ICcnLCBvcmRlcl9pdGVtX2lkOiBpdGVtLml0ZW1faWQsIGxvdF9xdWFudGl0eTogJycsIHVuaXRfcHJpY2U6ICcnLCB1bml0X3RvdGFsOiAnJywgYWp1c3RlbWVudF90b3RhbDogJycsIHRvdGFsX2xvdDogJycsIGxvdF9zdGF0dXM6ICcnLCBkYXRlX3JlcXVlc3Q6ICcnLCBub3RlczogICcnLCBzaGlwcGluZ19hZGRyZXNzX2lkOiAnJywgc2hpcHBpbmdfYWRkcmVzc19uYW1lOiAnJywgYWN0aW9uOiAgJ2RlbGV0ZW9yZGVyaXRlbSd9KVxuICAgICAgICAvLyAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgLy8gICAgICAgICAgICByZXMgPT4gdGhpcy5yZW1vdmVDYXJ0SXRlbShyZXMsIGl0ZW0sIHRvYXN0KSxcbiAgICAgICAgLy8gICAgICAgICAgICBlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXG4gICAgICAgIC8vICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZGVsZXRlKHRoaXMuZGVsZXRlSXRlbUFwaShpZF9idXNjYWRvKSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgcmVzID0+IHsgdGhpcy5yZW1vdmVDYXJ0SXRlbShyZXMsIGl0ZW0sIHRvYXN0KTsgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpOyB9LFxuICAgICAgICAgICAgZXJyID0+IHsgdGhpcy5oYW5kbGVFcnJvcihlcnIpOyB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7IH0sXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBjbGVhckNhcnQoKSB7XG4gICAgICAgIC8vc29sdWNpb24gcHJvdmlzYW9yaWFcbiAgICAgICAgbGV0IGl0ZW1zID0gWy4uLnRoaXMuaXRlbXNdXG4gICAgICAgIHdoaWxlIChpdGVtcyAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUNhcnRJdGVtKGl0ZW1zLnBvcCgpLCBmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICAvL3RoaXMucmVzZXRDYXJ0KHRoaXMuZ2V0Q2FydCk7XG4gICAgfVxuXG4gICAgY2xlYXJBbmRSZXNldENhcnQoKSB7XG4gICAgICAgIHRoaXMucmVzZXRDYXJ0KHRoaXMuZ2V0Q2FydCk7XG4gICAgfVxuXG4gICAgY2xlYXJBbmRSZXNldEN1c3RvbWVyQ2FydCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDbGVhcmluZyBhbmQgcmVzZXRpbmcuLi5cIilcbiAgICAgICAgdGhpcy5yZXNldENhcnQodGhpcy5nZXRDYXJ0QnlDdXN0b21lcilcbiAgICB9XG5cbiAgICBoYW5kbGVFcnJvciA9IChlcnJvcjogeyBlcnJvcjogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvci1wYXJhbScpO1xuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgZ2V0Q291bnRGcm9tSXRlbUluQ2FydCA9IChjb2RlVmFyaWFudCk6IG51bWJlciA9PiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gY29kZVZhcmlhbnQpPy5xdWFudGl0eSB8fCAwO1xuXG4gICAgZmluZEl0ZW1CeUlkVmFyaWFudCA9ICh2YXJpYW50X2lkKSA9PiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudF9pZCkuaXRlbV9pZFxuXG4gICAgZmluZEl0ZW0gPSAocHJvZHVjdF9pZCkgPT4gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5wcm9kdWN0LmlkID09IHByb2R1Y3RfaWQpO1xuXG4gICAgLyoqIERBVEEgRk9SIE9USEVSIFNFUlZJQ0VTICovXG4gICAgZ2V0Q2FydFRva2VuID0gKCkgPT4gdGhpcy5jYXJ0X3Rva2VuO1xuXG4gICAgZ2V0TG9jYWxlID0gKCkgPT4gdGhpcy5sb2NhbGU7XG5cbiAgICBnZXRUb3RhbEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRvdGFsKSk7XG5cbiAgICAvKiogVG90YWwgcGFyYSBjYXJyaXRvL3NpZGViYXIsIHNpbiBlbnbDrW8gcGVyc2lzdGlkbyBuaSByZWNhcmdvcyBkZSBjaGVja291dC4gKi9cbiAgICBnZXRDYXJ0VG90YWxBbW91bnQgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gdGhpcy5vcmRlclV0aWxzLmdldENhcnRUb3RhbEFtb3VudChjYXJ0KSkpO1xuXG4gICAgZ2V0Q291bnRDYXJ0SXRlbXMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XG4gICAgICAgIHRoaXMuY2FydEl0ZW1zLnBpcGUobWFwKChjYXJ0SXRlbXMpID0+IGNhcnRJdGVtcz8ubGVuZ3RoKSk7XG5cbiAgICBnZXRUYXhlc0Ftb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRheGVzID4gMCA/IGNhcnQ/LnRvdGFscz8udGF4ZXMgOiAwKSk7XG5cbiAgICBnZXRTdWJUb3RhbEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiB0aGlzLm9yZGVyVXRpbHMuZ2V0U3VtbWFyeVN1YnRvdGFsQW1vdW50KGNhcnQpKSk7XG5cbiAgICBnZXRDYXJ0VGF4ZXNBbW91bnQgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gdGhpcy5vcmRlclV0aWxzLmdldENhcnRUYXhlc0Ftb3VudChjYXJ0KSkpO1xuXG4gICAgZ2V0Q2FydENsaWVudFRheGVzQW1vdW50ID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PlxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IHRoaXMub3JkZXJVdGlscy5nZXRDYXJ0Q2xpZW50VGF4ZXNBbW91bnQoY2FydCkpKTtcblxuICAgIC8qKlxuICAgICAqIERldnVlbHZlIGVsIGRlc2N1ZW50byBxdWUgZGViZSBtb3N0cmFyc2UgZW4gZWwgcmVzdW1lbiBkZSBjb21wcmEuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIGNvbiBlbCBtb250byBkZSBwcm9tb2Npb25lcyBkZSBvcmRlbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiB0aGlzLnN1bW1hcnlQcm9tb3Rpb25BbW91bnQkID0gdGhpcy5jYXJ0U2VydmljZS5nZXRTdW1tYXJ5UHJvbW90aW9uQW1vdW50KCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFNpIGVsIGJhY2tlbmQgbnVldm8gaW5mb3JtYSBgdG90YWxzLm9yZGVyRGlzY291bnRgLCBzZSB1c2EgZXNlIHZhbG9yLlxuICAgICAqIEVuIHN1IGF1c2VuY2lhLCBwcmlvcml6YSBgdG90YWxzLnByb21vdGlvbkJyZWFrZG93bi5vcmRlclByb21vdGlvbnNgIHlcbiAgICAgKiBsdWVnbyBoYWNlIGZhbGxiYWNrIGEgYHRvdGFscy5wcm9tb3Rpb25gIHBhcmEgbWFudGVuZXIgY29tcGF0aWJpbGlkYWQuXG4gICAgICovXG4gICAgZ2V0U3VtbWFyeVByb21vdGlvbkFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiB0aGlzLmdldENhcnRTdW1tYXJ5UHJpY2VQcmVzZW50YXRpb24oY2FydCkub3JkZXJEaXNjb3VudCkpO1xuXG4gICAgLyoqIERlc2N1ZW50byBlc3BlY8OtZmljbyBkZWwgY3Vww7NuLCBzaSBlbCBiYWNrZW5kIGxvIGluZm9ybWEgcG9yIHNlcGFyYWRvLiAqL1xuICAgIGdldENvdXBvblByb21vdGlvbkFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+ID0+XG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gdGhpcy5nZXRDYXJ0U3VtbWFyeVByaWNlUHJlc2VudGF0aW9uKGNhcnQpLmNvdXBvbkRpc2NvdW50KSk7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2Egc2kgZXhpc3RlIHVuIGN1cMOzbiBhcGxpY2FkbyBlbiBlbCBjYXJyaXRvIGFjdHVhbC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgYm9vbGVhbm8gcGFyYSBjb250cm9sYXIgbGEgdmlzaWJpbGlkYWQgZGUgYFF1aXRhciBjdXDDs25gLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBObyBkZWJlIGF0YXJzZSBhIGBnZXRTdW1tYXJ5UHJvbW90aW9uQW1vdW50KClgLCBwb3JxdWUgdW4gY3Vww7NuIHB1ZWRlIGFmZWN0YXJcbiAgICAgKiBzb2xvIHByb21vY2lvbmVzIHVuaXRhcmlhcyB5IGRlamFyIGVsIGRlc2N1ZW50byBkZSBvcmRlbiBlbiBgMGAuXG4gICAgICovXG4gICAgaGFzQXBwbGllZENvdXBvbiA9ICgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0+XG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gdGhpcy5vcmRlclV0aWxzLmhhc0FwcGxpZWRDb3Vwb24oY2FydCkpKTtcblxuICAgIHRvRGVjaW1hbCA9ICh0b3RhbCkgPT4gKHRvdGFsIC0gTWF0aC5mbG9vcih0b3RhbCkgPT0gMCkgPyB0b3RhbCAvIDEwMCA6IHRvdGFsXG5cbiAgICBnZXREaXNjb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXJ0SXRlbXMucGlwZShtYXAoKHByb2R1Y3QpID0+IHtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IHRoaXMuaXRlbXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgKyBjdXJyLnByb2R1Y3Quc2FsZXByaWNlICogY3Vyci5xdWFudGl0eTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgbGV0IHN1YnRvdGFsID0gdGhpcy5pdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldiArIGN1cnIucHJvZHVjdC5wcmljZSAqIGN1cnIucXVhbnRpdHk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIHJldHVybiBzdWJ0b3RhbCAtIHRvdGFsO1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT2J0aWVuZSBlbCBwcmVjaW8gbm9ybWFsaXphZG8gZGUgdW4gw610ZW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDDjXRlbSBkZSBjYXJyaXRvIG5vcm1hbGl6YWRvLlxuICAgICAqIEByZXR1cm5zIE9iamV0byBgQ2FydEl0ZW1QcmljaW5nYCBsaXN0byBwYXJhIHJlbmRlcml6YXIgcHJlY2lvIGJhc2UsIHRhY2hhZG8geSBmaW5hbC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCBwcmljaW5nID0gdGhpcy5jYXJ0U2VydmljZS5nZXRJdGVtUHJpY2luZyhpdGVtKTtcbiAgICAgKiBjb25zdCBzaG93VG9vbHRpcCA9IHByaWNpbmcuaGFzVW5pdFByb21vdGlvbnM7XG4gICAgICogY29uc3QgZmluYWxQcmljZSA9IHByaWNpbmcuZmluYWxQcmljZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBnZXRJdGVtUHJpY2luZyA9IChpdGVtOiBDYXJ0SXRlbSk6IENhcnRJdGVtUHJpY2luZyA9PiBpdGVtPy5wcmljaW5nIHx8IHRoaXMuYnVpbGRDYXJ0SXRlbVByaWNpbmcoaXRlbSk7XG5cbiAgICAvKiogUmVzdWVsdmUgbGEgcHJlc2VudGFjacOzbiBudWV2YSBkZSB1bmEgbMOtbmVhIHkgY29uc2VydmEgZWwgZmFsbGJhY2sgbGVnYWN5LiAqL1xuICAgIGdldENhcnRJdGVtUHJpY2VQcmVzZW50YXRpb24gPSAoaXRlbTogQ2FydEl0ZW0sIGNoYW5uZWw/OiBDaGFubmVsKTogQ2FydEl0ZW1QcmljZVByZXNlbnRhdGlvbiA9PlxuICAgICAgICB0aGlzLnByaWNlUHJlc2VudGF0aW9uU2VydmljZS5nZXRDYXJ0SXRlbVByaWNlUHJlc2VudGF0aW9uKFxuICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgIGNoYW5uZWwgfHwgdGhpcy5jaGFubmVsQ29uZmlnLFxuICAgICAgICAgICAgaXRlbT8ubGluZVByaWNpbmcgPyB1bmRlZmluZWQgOiB0aGlzLmdldEl0ZW1QcmljaW5nKGl0ZW0pXG4gICAgICAgICk7XG5cbiAgICAvKiogUmVzdWVsdmUgZWwgcmVzdW1lbiB2aXNpYmxlIHVzYW5kbyBsaW5lUHJpY2luZyBzaW4gY29udmVydGlyIGltcG9ydGVzIGZpc2NhbGVzLiAqL1xuICAgIGdldENhcnRTdW1tYXJ5UHJpY2VQcmVzZW50YXRpb24gPSAoXG4gICAgICAgIGNhcnQ6IGFueSA9IHRoaXMuY2FydFN1YmplY3QudmFsdWUsXG4gICAgICAgIGNoYW5uZWw/OiBDaGFubmVsLFxuICAgICAgICBpbmNsdWRlU2hpcHBpbmc6IGJvb2xlYW4gPSBmYWxzZVxuICAgICk6IENhcnRTdW1tYXJ5UHJpY2VQcmVzZW50YXRpb24gPT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZUl0ZW1zID0gQXJyYXkuaXNBcnJheShjYXJ0Py5pdGVtcykgJiYgY2FydC5pdGVtcy5sZW5ndGggPyBjYXJ0Lml0ZW1zIDogbnVsbDtcbiAgICAgICAgY29uc3QgaXRlbXM6IENhcnRJdGVtW10gPSAocmVzcG9uc2VJdGVtcyB8fCAodGhpcy5jYXJ0SXRlbXNTdWJqZWN0LnZhbHVlIHx8IFtdKSlcbiAgICAgICAgICAgIC5tYXAoaXRlbSA9PiB0aGlzLm5vcm1hbGl6ZUNhcnRJdGVtUHJpY2luZyhpdGVtKSk7XG4gICAgICAgIGNvbnN0IGhhc0xpbmVQcmljaW5nID0gaXRlbXMubGVuZ3RoID4gMCAmJiBpdGVtcy5ldmVyeShpdGVtID0+ICEhaXRlbT8ubGluZVByaWNpbmcpO1xuICAgICAgICBjb25zdCBzaG93R3Jvc3MgPSAoY2hhbm5lbCB8fCB0aGlzLmNoYW5uZWxDb25maWcpPy5zaG93UHJpY2VXaXRoVGF4ZXNXaGlsZUJyb3dzaW5nID09PSB0cnVlO1xuICAgICAgICBjb25zdCBwcmljaW5nS2V5ID0gc2hvd0dyb3NzID8gJ2dyb3NzJyA6ICduZXQnO1xuICAgICAgICBjb25zdCB0YXhlcyA9IHRoaXMub3JkZXJVdGlscy5nZXRDYXJ0VGF4ZXNBbW91bnQoY2FydCk7XG4gICAgICAgIGNvbnN0IGNsaWVudFRheGVzID0gdGhpcy5vcmRlclV0aWxzLmdldENhcnRDbGllbnRUYXhlc0Ftb3VudChjYXJ0KTtcbiAgICAgICAgY29uc3QgbGVnYWN5U2hpcHBpbmcgPSBpbmNsdWRlU2hpcHBpbmcgPyB0aGlzLm9yZGVyVXRpbHMuZ2V0U3VtbWFyeVNoaXBtZW50QW1vdW50KGNhcnQpIDogbnVsbDtcbiAgICAgICAgY29uc3Qgc2hpcHBpbmdQcmljaW5nID0gdGhpcy5nZXRUb3RhbHNQcmljaW5nKGNhcnQsICdzaGlwcGluZ19wcmljaW5nJywgJ3NoaXBwaW5nUHJpY2luZycpO1xuICAgICAgICBjb25zdCBzaGlwcGluZyA9IGluY2x1ZGVTaGlwcGluZ1xuICAgICAgICAgICAgPyAoc2hpcHBpbmdQcmljaW5nID8gc2hpcHBpbmdQcmljaW5nW3ByaWNpbmdLZXldIDogbGVnYWN5U2hpcHBpbmcpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gaW5jbHVkZVNoaXBwaW5nXG4gICAgICAgICAgICA/IE51bWJlcihjYXJ0Py50b3RhbHM/LnRvdGFsIHx8IDApXG4gICAgICAgICAgICA6IHRoaXMub3JkZXJVdGlscy5nZXRDYXJ0VG90YWxBbW91bnQoY2FydCk7XG4gICAgICAgIGNvbnN0IG9yZGVyRGlzY291bnRQcmljaW5nID0gdGhpcy5nZXRUb3RhbHNQcmljaW5nKGNhcnQsICdvcmRlcl9kaXNjb3VudF9wcmljaW5nJywgJ29yZGVyRGlzY291bnRQcmljaW5nJyk7XG4gICAgICAgIGNvbnN0IGNvdXBvbkRpc2NvdW50UHJpY2luZyA9IHRoaXMuZ2V0VG90YWxzUHJpY2luZyhjYXJ0LCAnY291cG9uX2Rpc2NvdW50X3ByaWNpbmcnLCAnY291cG9uRGlzY291bnRQcmljaW5nJyk7XG4gICAgICAgIGNvbnN0IGNvdXBvbkRpc2NvdW50ID0gY291cG9uRGlzY291bnRQcmljaW5nXG4gICAgICAgICAgICA/IGNvdXBvbkRpc2NvdW50UHJpY2luZ1twcmljaW5nS2V5XVxuICAgICAgICAgICAgOiB0aGlzLm9yZGVyVXRpbHMuZ2V0Q291cG9uUHJvbW90aW9uQW1vdW50KGNhcnQpO1xuICAgICAgICBjb25zdCBvcmRlckRpc2NvdW50ID0gb3JkZXJEaXNjb3VudFByaWNpbmdcbiAgICAgICAgICAgID8gb3JkZXJEaXNjb3VudFByaWNpbmdbcHJpY2luZ0tleV1cbiAgICAgICAgICAgIDogdGhpcy5vcmRlclV0aWxzLmdldE9yZGVyUHJvbW90aW9uQW1vdW50XG4gICAgICAgICAgICAgICAgPyB0aGlzLm9yZGVyVXRpbHMuZ2V0T3JkZXJQcm9tb3Rpb25BbW91bnQoY2FydClcbiAgICAgICAgICAgICAgICA6IHRoaXMub3JkZXJVdGlscy5nZXRTdW1tYXJ5UHJvbW90aW9uQW1vdW50KGNhcnQpO1xuXG4gICAgICAgIGlmIChoYXNMaW5lUHJpY2luZykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9kdWN0c0JlZm9yZURpc2NvdW50czogaXRlbXMucmVkdWNlKCh0b3RhbCwgaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArIE51bWJlcihpdGVtLmxpbmVQcmljaW5nLnVuaXRbcHJpY2luZ0tleV0gfHwgMCkgKiBOdW1iZXIoaXRlbS5xdWFudGl0eSB8fCAwKSwgMCksXG4gICAgICAgICAgICAgICAgbGluZURpc2NvdW50czogaXRlbXMucmVkdWNlKCh0b3RhbCwgaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArIE51bWJlcihpdGVtLmxpbmVQcmljaW5nLmRpc2NvdW50W3ByaWNpbmdLZXldIHx8IDApLCAwKSxcbiAgICAgICAgICAgICAgICBzdWJ0b3RhbDogaXRlbXMucmVkdWNlKCh0b3RhbCwgaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArIE51bWJlcihpdGVtLmxpbmVQcmljaW5nLnN1YnRvdGFsW3ByaWNpbmdLZXldIHx8IDApLCAwKSxcbiAgICAgICAgICAgICAgICBvcmRlckRpc2NvdW50LFxuICAgICAgICAgICAgICAgIGNvdXBvbkRpc2NvdW50LFxuICAgICAgICAgICAgICAgIHRheGVzLFxuICAgICAgICAgICAgICAgIGNsaWVudFRheGVzLFxuICAgICAgICAgICAgICAgIHNoaXBwaW5nLFxuICAgICAgICAgICAgICAgIHRvdGFsLFxuICAgICAgICAgICAgICAgIHRheGVzSW5jbHVkZWRJblRvdGFsOiBzaG93R3Jvc3MgJiYgdGF4ZXMgIT09IDAsXG4gICAgICAgICAgICAgICAgc291cmNlOiAnbGluZVByaWNpbmcnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByb2R1Y3RzQmVmb3JlRGlzY291bnRzOiAwLFxuICAgICAgICAgICAgbGluZURpc2NvdW50czogMCxcbiAgICAgICAgICAgIHN1YnRvdGFsOiB0aGlzLm9yZGVyVXRpbHMuZ2V0U3VtbWFyeVN1YnRvdGFsQW1vdW50KGNhcnQpLFxuICAgICAgICAgICAgb3JkZXJEaXNjb3VudCxcbiAgICAgICAgICAgIGNvdXBvbkRpc2NvdW50LFxuICAgICAgICAgICAgdGF4ZXMsXG4gICAgICAgICAgICBjbGllbnRUYXhlcyxcbiAgICAgICAgICAgIHNoaXBwaW5nLFxuICAgICAgICAgICAgdG90YWwsXG4gICAgICAgICAgICB0YXhlc0luY2x1ZGVkSW5Ub3RhbDogZmFsc2UsXG4gICAgICAgICAgICBzb3VyY2U6ICdsZWdhY3knXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIC8qKiBOb3JtYWxpemEgc8OzbG8gZWwgYWxpYXMgc2VyaWFsaXphZG8gZGVsIGNvbnRyYXRvIGRlIGzDrW5lYS4gKi9cbiAgICBwcml2YXRlIG5vcm1hbGl6ZUNhcnRJdGVtUHJpY2luZyA9IChpdGVtOiBhbnkpOiBDYXJ0SXRlbSA9PiAoe1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBsaW5lUHJpY2luZzogaXRlbT8ubGluZVByaWNpbmcgfHwgaXRlbT8ubGluZV9wcmljaW5nXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBMZWUgZWwgY29udHJhdG8gbnVldm8gc2luIGNvbmZ1bmRpciB1biBvYmpldG8gdsOhbGlkbyBjb24gZmFsbGJhY2sgbGVnYWN5LFxuICAgICAqIGluY2x1c28gY3VhbmRvIHRvZG9zIHN1cyBpbXBvcnRlcyBzb24gY2Vyby5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFRvdGFsc1ByaWNpbmcgPSAoXG4gICAgICAgIGNhcnQ6IGFueSxcbiAgICAgICAgc25ha2VDYXNlS2V5OiBrZXlvZiBDYXJ0VG90YWxzUHJpY2luZyxcbiAgICAgICAgY2FtZWxDYXNlS2V5OiBrZXlvZiBDYXJ0VG90YWxzUHJpY2luZ1xuICAgICk6IENhcnRUb3RhbFByaWNpbmdWYWx1ZSB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbHMgPSBjYXJ0Py50b3RhbHMgfHwge307XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdG90YWxzW3NuYWtlQ2FzZUtleV0gPz8gdG90YWxzW2NhbWVsQ2FzZUtleV07XG4gICAgICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICghW3ZhbHVlLm5ldCwgdmFsdWUudGF4LCB2YWx1ZS5ncm9zc10uZXZlcnkoYW1vdW50ID0+IE51bWJlci5pc0Zpbml0ZShOdW1iZXIoYW1vdW50KSkpKSByZXR1cm4gbnVsbDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV0OiBOdW1iZXIodmFsdWUubmV0KSxcbiAgICAgICAgICAgIHRheDogTnVtYmVyKHZhbHVlLnRheCksXG4gICAgICAgICAgICBncm9zczogTnVtYmVyKHZhbHVlLmdyb3NzKVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhZGRDb3Vwb24gPSBhc3luYyAoY29kZSk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25uZWN0aW9uLnB1dCh0aGlzLmNvdXBvbkFwaSgpLCB7IGNvdXBvbjogY29kZSB9KS50b1Byb21pc2UoKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3IgfHwgcmVzdWx0LmVycm9ycykgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICdpbnZhbGlkLWNvdXBvbicgfTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihyZXN1bHQsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuc3luY0NhcnRJdGVtc0Zyb21SZXNwb25zZShyZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCBtZXNzYWdlOiAnb2snIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiB0cnVlLCBtZXNzYWdlOiAnaW52YWxpZC1jb3Vwb24nIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVDb3Vwb24gPSBhc3luYyAoKSA9PiB0aGlzLmNvbm5lY3Rpb24uZGVsZXRlKHRoaXMuY291cG9uQXBpKCkpLnBpcGUobWFwKHJlcyA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihyZXMsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5zeW5jQ2FydEl0ZW1zRnJvbVJlc3BvbnNlKHJlcyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pKS50b1Byb21pc2UoKTtcblxuICAgIGZvcm1hdENvdXBvbiA9IChjYXJ0KSA9PiB7XG4gICAgICAgIGxldCBjdXJyZW50X2NvdXBvbiA9IHRoaXMuY291cG9uU3ViamVjdC52YWx1ZTtcbiAgICAgICAgbGV0IGNvdXBvbjogQ291cG9uSSA9IHsgY29kZTogY2FydC5jb3Vwb25Db2RlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhjYXJ0LmNhcnREaXNjb3VudHMpWzBdO1xuICAgICAgICAgICAgY291cG9uID0ge1xuICAgICAgICAgICAgICAgIC4uLmNvdXBvbixcbiAgICAgICAgICAgICAgICBhbW91bnQ6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0uYW1vdW50LmN1cnJlbnQpIHx8IDAsXG4gICAgICAgICAgICAgICAgbmFtZTogKGNhcnQuY2FydERpc2NvdW50cyAmJiBjYXJ0LmNhcnREaXNjb3VudHNba2V5XS5uYW1lKSB8fCAnbm8tbmFtZSdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxuICAgICAgICAoY291cG9uICE9IGN1cnJlbnRfY291cG9uKSAmJiB0aGlzLmNvdXBvblN1YmplY3QubmV4dChjb3Vwb24pO1xuICAgIH1cblxuICAgIGNoYW5nZUhhdmVUb1VwZGF0ZSA9ICh2YWx1ZSkgPT4gdGhpcy5oYXZlX3RvX3VwZGF0ZSA9IHZhbHVlO1xuXG4gICAgcmVhZHlGb3JDaGVja291dCA9IChzdWNjZXNzQ2FsbGJhY2s/OiBGdW5jdGlvbiwgZXJyb3JDYWxsYmFjaz86IEZ1bmN0aW9uKTogQ2FydEFmZm9yZGFibGUgPT4ge1xuICAgICAgICBsZXQgY2FydCA9IHRoaXMuY2FydFN1YmplY3QudmFsdWU7XG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuY2FydEl0ZW1zU3ViamVjdC52YWx1ZTtcbiAgICAgICAgbGV0IHJlc3VsdDogQ2FydEFmZm9yZGFibGUgPSB7IG9rOiB0cnVlIH07XG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPCB0aGlzLmNoYW5uZWxDb25maWcubWluaW11bVF1YW50aXR5UHVyY2hhc2VJdGVtcykge1xuICAgICAgICAgICAgcmVzdWx0Lm9rID0gZmFsc2U7IHJlc3VsdC5yZWFzb25zLnB1c2goeyBtZXNzYWdlOiAnbm90LWVub3VnaHQtaXRlbXMnIH0pXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhcnQudG90YWxzLnRvdGFsIDwgdGhpcy5jaGFubmVsQ29uZmlnLm1pbmltdW1QdXJjaGFzZUFtb3VudCkge1xuICAgICAgICAgICAgcmVzdWx0Lm9rID0gZmFsc2U7IHJlc3VsdC5yZWFzb25zLnB1c2goeyBtZXNzYWdlOiAnbm90LWVub3VnaHQtYW1vdW50JyB9KVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2sgfHwgZXJyb3JDYWxsYmFjaykge1xuICAgICAgICAgICAgcmVzdWx0Lm9rXG4gICAgICAgICAgICAgICAgPyBzdWNjZXNzQ2FsbGJhY2sgJiYgc3VjY2Vzc0NhbGxiYWNrKClcbiAgICAgICAgICAgICAgICA6IGVycm9yQ2FsbGJhY2sgJiYgZXJyb3JDYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdXBkYXRlSXRlbXNPbkVycm9yID0gKGl0ZW1zV2l0aEVycm9yOiBhbnlbXSwgY29kZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW1zV2l0aEVycm9yKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5pdGVtcyk7XG4gICAgICAgIGxldCBpdGVtc1VwZGF0ZWQgPSB0aGlzLml0ZW1zLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGxldCBpdGVtV2l0aEVycm9yID0gaXRlbXNXaXRoRXJyb3IuZmluZChmYWlsZWRJdGVtID0+IGl0ZW0uaXRlbV9pZCA9PSBmYWlsZWRJdGVtLmlkKTtcbiAgICAgICAgICAgIGlmIChpdGVtV2l0aEVycm9yKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5mYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBjb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH0pXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW1zVXBkYXRlZCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FydEl0ZW1zKGl0ZW1zVXBkYXRlZCk7XG4gICAgfVxuXG4gICAgbG9hZENhcnRCeVRva2VuID0gYXN5bmMgKHRva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5jYXJ0X3Rva2VuID0gdG9rZW5cbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0Q2FydEJ5VG9rZW4oKVxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIFVUSUxTXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm1hIGxvcyDDrXRlbXMgY3J1ZG9zIGRlbCBiYWNrZW5kIGFsIGNvbnRyYXRvIGludGVybm8gYENhcnRJdGVtYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZXJ2ZXJfaXRlbSBSZXNwdWVzdGEgYGl0ZW1zYCBkZWwgZW5kcG9pbnQgZGUgY2Fycml0by5cbiAgICAgKiBAcmV0dXJucyBBcnJlZ2xvIGRlIMOtdGVtcyBub3JtYWxpemFkb3MsIGNhZGEgdW5vIGNvbiBgcHJpY2luZ2AgcHJlY29tcHV0YWRvLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBFc3RlIGVzIGVsIHB1bnRvIGRvbmRlIGVsIGNvcmU6XG4gICAgICogLSBwcmVzZXJ2YSBgdW5pdFByb21vdGlvbnNgXG4gICAgICogLSBhcm1hIGBwcmljaW5nYFxuICAgICAqIC0gbWFudGllbmUgbGEgZm9ybWEgaGlzdMOzcmljYSBkZWwgaXRlbSBjb25zdW1pZG8gcG9yIGxvcyB0ZW1wbGF0ZXNcbiAgICAgKi9cbiAgICB0cmFuc2Zvcm1JdGVtcyA9IChzZXJ2ZXJfaXRlbSkgPT4gc2VydmVyX2l0ZW0ubWFwKFxuICAgICAgICBpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgcHJvZHVjdDogaXRlbS5wcm9kdWN0LFxuICAgICAgICAgICAgICAgIHZhcmlhbnRfaWQ6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5jb2RlLFxuICAgICAgICAgICAgICAgIGxvdDogaXRlbS5vcmRlckl0ZW1Mb3QsXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXG4gICAgICAgICAgICAgICAgY29tbWVudHM6IGl0ZW0uY29tbWVudHMgfHwgJycsXG4gICAgICAgICAgICAgICAgaXRlbV9pZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgICB0b3RhbDogaXRlbS50b3RhbCxcbiAgICAgICAgICAgICAgICB1bml0UHJpY2U6IGl0ZW0udW5pdFByaWNlID8/IGl0ZW0udW5pdF9wcmljZSxcbiAgICAgICAgICAgICAgICBkaXNjb3VudDogaXRlbS5kaXNjb3VudCxcbiAgICAgICAgICAgICAgICBzdWJ0b3RhbDogaXRlbS5zdWJ0b3RhbCxcbiAgICAgICAgICAgICAgICB0YXhUb3RhbDogaXRlbS50YXhUb3RhbCA/PyBpdGVtLnRheF90b3RhbCxcbiAgICAgICAgICAgICAgICB1bml0UHJvbW90aW9uczogQXJyYXkuaXNBcnJheShpdGVtLnVuaXRQcm9tb3Rpb25zKVxuICAgICAgICAgICAgICAgICAgICA/IGl0ZW0udW5pdFByb21vdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgOiAoQXJyYXkuaXNBcnJheShpdGVtLnVuaXRfcHJvbW90aW9ucykgPyBpdGVtLnVuaXRfcHJvbW90aW9ucyA6IFtdKSxcbiAgICAgICAgICAgICAgICBsaW5lUHJpY2luZzogaXRlbS5saW5lUHJpY2luZyB8fCBpdGVtLmxpbmVfcHJpY2luZyxcbiAgICAgICAgICAgICAgICBsaW5lX3ByaWNpbmc6IGl0ZW0ubGluZV9wcmljaW5nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtLnByaWNpbmcgPSB0aGlzLmJ1aWxkQ2FydEl0ZW1QcmljaW5nKGl0ZW0pO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnByaWNlKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgPiAwID8gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNlbGVwcmljZSA6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5wcmljZSk7XG4gICAgICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vICAgICBpdGVtLnByb2R1Y3QucHJpY2UgPSBpdGVtLnRvdGFsIC8gaXRlbS5xdWFudGl0eS8vID8gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNlbGVwcmljZSA6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5wcmljZTtcbiAgICAgICAgICAgIC8vIH0sIDEwMCk7XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfVxuICAgIClcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnV5ZSBsYSBub3JtYWxpemFjacOzbiBkZSBwcmVjaW9zIHBhcmEgdW4gw610ZW0gZGVsIGNhcnJpdG8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDDjXRlbSBub3JtYWxpemFkbyBkZWwgY2Fycml0by5cbiAgICAgKiBAcmV0dXJucyBFc3RydWN0dXJhIGBDYXJ0SXRlbVByaWNpbmdgIGNvbiBwcmVjaW8gYmFzZSwgdGFjaGFkbywgZmluYWwgeSBmbGFncyBkZSBVSS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCBwcmljaW5nID0gdGhpcy5idWlsZENhcnRJdGVtUHJpY2luZyhpdGVtKTtcbiAgICAgKiAvLyBwcmljaW5nLmJhc2VQcmljZSA9PiB1bml0UHJpY2UgZGVsIGJhY2tlbmQgbnVldm8gbyBmYWxsYmFjayBsZWdhY3lcbiAgICAgKiAvLyBwcmljaW5nLmZpbmFsUHJpY2UgPT4gdW5pdFByaWNlIGRlbCBiYWNrZW5kIG51ZXZvIG8gY8OhbGN1bG8gbGVnYWN5XG4gICAgICogLy8gcHJpY2luZy5lZmZlY3RpdmVEaXNjb3VudFBlcmNlbnQgPT4gJSB0b3RhbCBjb250cmEgZWwgcHJlY2lvIGRlIHJlZmVyZW5jaWFcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwcml2YXRlIGJ1aWxkQ2FydEl0ZW1QcmljaW5nID0gKGl0ZW06IENhcnRJdGVtKTogQ2FydEl0ZW1QcmljaW5nID0+IHtcbiAgICAgICAgY29uc3QgdmFyaWFudCA9IGl0ZW0/LnByb2R1Y3Q/LnZhcmlhbnRzPy5bMF07XG4gICAgICAgIGNvbnN0IGNhcnRBbmRTaWRlYmFyUHJpY2VzID0gdmFyaWFudD8uY2FydEFuZFNpZGViYXJQcmljZXM7XG4gICAgICAgIC8vIFNpIGVsIGJhY2tlbmQgbnVldm8gaW5mb3JtYSBgY2FydEFuZFNpZGViYXJQcmljZXNgLCBlc2UgZXMgZWwgcHJlY2lvIGNvcnJlY3RvXG4gICAgICAgIC8vIHBhcmEgY2Fycml0by9zaWRlYmFyIHBvcnF1ZSBleGNsdXllIGltcHVlc3RvcyBkZSBvcmRlbiBxdWUgbm8gc2UgbGlzdGFuIHBvciDDrXRlbS5cbiAgICAgICAgLy8gU2kgbm8gZXhpc3RlLCBzZSBtYW50aWVuZSBlbCBmYWxsYmFjayBoaXN0w7NyaWNvLlxuICAgICAgICBjb25zdCBleHBsaWNpdFVuaXRQcmljZSA9IHRoaXMucGFyc2VQcmljZVZhbHVlKGl0ZW0/LnVuaXRQcmljZSk7XG4gICAgICAgIGNvbnN0IGhhc0V4cGxpY2l0VW5pdFByaWNlID0gTnVtYmVyLmlzRmluaXRlKGV4cGxpY2l0VW5pdFByaWNlKTtcbiAgICAgICAgY29uc3QgYmFzZVByaWNlID0gaGFzRXhwbGljaXRVbml0UHJpY2VcbiAgICAgICAgICAgID8gZXhwbGljaXRVbml0UHJpY2VcbiAgICAgICAgICAgIDogdGhpcy5wYXJzZVByaWNlVmFsdWUoXG4gICAgICAgICAgICAgICAgY2FydEFuZFNpZGViYXJQcmljZXM/LnNhbGVwcmljZVxuICAgICAgICAgICAgICAgID8/IGNhcnRBbmRTaWRlYmFyUHJpY2VzPy5wcmljZVxuICAgICAgICAgICAgICAgID8/IHZhcmlhbnQ/LnNhbGVwcmljZVxuICAgICAgICAgICAgICAgID8/IHZhcmlhbnQ/LnByaWNlXG4gICAgICAgICAgICAgICAgPz8gaXRlbT8ucHJvZHVjdD8uc2FsZXByaWNlXG4gICAgICAgICAgICAgICAgPz8gaXRlbT8ucHJvZHVjdD8ucHJpY2VcbiAgICAgICAgICAgICAgICA/PyAwXG4gICAgICAgICAgICApO1xuICAgICAgICBjb25zdCBzdHJpa2VQcmljZUNhbmRpZGF0ZSA9IHRoaXMucGFyc2VQcmljZVZhbHVlKFxuICAgICAgICAgICAgY2FydEFuZFNpZGViYXJQcmljZXM/LnByaWNlXG4gICAgICAgICAgICA/PyB2YXJpYW50Py5wcmljZVxuICAgICAgICAgICAgPz8gaXRlbT8ucHJvZHVjdD8ucHJpY2VcbiAgICAgICAgICAgID8/IDBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEJhc2VQcmljZSA9IGlzTmFOKGJhc2VQcmljZSkgPyAwIDogYmFzZVByaWNlO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkU3RyaWtlUHJpY2UgPSBpc05hTihzdHJpa2VQcmljZUNhbmRpZGF0ZSkgPyAwIDogc3RyaWtlUHJpY2VDYW5kaWRhdGU7XG4gICAgICAgIGNvbnN0IHVuaXRQcm9tb3Rpb25Ub3RhbCA9IEFycmF5LmlzQXJyYXkoaXRlbT8udW5pdFByb21vdGlvbnMpXG4gICAgICAgICAgICA/IGl0ZW0udW5pdFByb21vdGlvbnMucmVkdWNlKCh0b3RhbCwgcHJvbW90aW9uKSA9PiB0b3RhbCArIE51bWJlcihwcm9tb3Rpb24/LmFtb3VudCB8fCAwKSwgMClcbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc3QgaGFzU3RyaWtlUHJpY2UgPSBub3JtYWxpemVkU3RyaWtlUHJpY2UgPiBub3JtYWxpemVkQmFzZVByaWNlICYmIG5vcm1hbGl6ZWRCYXNlUHJpY2UgPiAwO1xuICAgICAgICBjb25zdCBoYXNVbml0UHJvbW90aW9ucyA9IEFycmF5LmlzQXJyYXkoaXRlbT8udW5pdFByb21vdGlvbnMpICYmIGl0ZW0udW5pdFByb21vdGlvbnMubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBOdW1iZXIoaXRlbT8ucXVhbnRpdHkgfHwgMCk7XG4gICAgICAgIGNvbnN0IGZpbmFsUHJpY2UgPSBoYXNFeHBsaWNpdFVuaXRQcmljZVxuICAgICAgICAgICAgPyBub3JtYWxpemVkQmFzZVByaWNlXG4gICAgICAgICAgICA6IGhhc1VuaXRQcm9tb3Rpb25zID8gbm9ybWFsaXplZEJhc2VQcmljZSArIHVuaXRQcm9tb3Rpb25Ub3RhbCA6IG5vcm1hbGl6ZWRCYXNlUHJpY2U7XG4gICAgICAgIGNvbnN0IHByb2R1Y3REaXNjb3VudCA9IHRoaXMucGFyc2VQcmljZVZhbHVlKGl0ZW0/LmRpc2NvdW50KTtcbiAgICAgICAgY29uc3QgbGVnYWN5UHJvZHVjdERpc2NvdW50ID0gTnVtYmVyKGl0ZW0/LnByb2R1Y3Q/LmRpc2NvdW50IHx8IDApO1xuICAgICAgICBjb25zdCBkaXNjb3VudFBlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUocHJvZHVjdERpc2NvdW50KSAmJiBwcm9kdWN0RGlzY291bnQgPCAwICYmIG5vcm1hbGl6ZWRCYXNlUHJpY2UgPiAwICYmIHF1YW50aXR5ID4gMFxuICAgICAgICAgICAgPyBNYXRoLnJvdW5kKChNYXRoLmFicyhwcm9kdWN0RGlzY291bnQpIC8gKG5vcm1hbGl6ZWRCYXNlUHJpY2UgKiBxdWFudGl0eSkpICogMTAwKVxuICAgICAgICAgICAgOiAhaXNOYU4obGVnYWN5UHJvZHVjdERpc2NvdW50KSAmJiBsZWdhY3lQcm9kdWN0RGlzY291bnQgPiAwXG4gICAgICAgICAgICAgICAgPyBNYXRoLnJvdW5kKGxlZ2FjeVByb2R1Y3REaXNjb3VudClcbiAgICAgICAgICAgICAgICA6IGhhc1N0cmlrZVByaWNlXG4gICAgICAgICAgICAgICAgICAgID8gTWF0aC5yb3VuZCgoKG5vcm1hbGl6ZWRTdHJpa2VQcmljZSAtIG5vcm1hbGl6ZWRCYXNlUHJpY2UpIC8gbm9ybWFsaXplZFN0cmlrZVByaWNlKSAqIDEwMClcbiAgICAgICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICBjb25zdCBlZmZlY3RpdmVSZWZlcmVuY2VQcmljZSA9IGhhc1N0cmlrZVByaWNlID8gbm9ybWFsaXplZFN0cmlrZVByaWNlIDogbm9ybWFsaXplZEJhc2VQcmljZTtcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlRGlzY291bnRQZXJjZW50ID0gZWZmZWN0aXZlUmVmZXJlbmNlUHJpY2UgPiAwICYmIGZpbmFsUHJpY2UgPiAwICYmIGVmZmVjdGl2ZVJlZmVyZW5jZVByaWNlID4gZmluYWxQcmljZVxuICAgICAgICAgICAgPyBNYXRoLnJvdW5kKCgoZWZmZWN0aXZlUmVmZXJlbmNlUHJpY2UgLSBmaW5hbFByaWNlKSAvIGVmZmVjdGl2ZVJlZmVyZW5jZVByaWNlKSAqIDEwMClcbiAgICAgICAgICAgIDogZGlzY291bnRQZXJjZW50O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBiYXNlUHJpY2U6IG5vcm1hbGl6ZWRCYXNlUHJpY2UsXG4gICAgICAgICAgICBzdHJpa2VQcmljZTogaGFzU3RyaWtlUHJpY2UgPyBub3JtYWxpemVkU3RyaWtlUHJpY2UgOiBudWxsLFxuICAgICAgICAgICAgZmluYWxQcmljZSxcbiAgICAgICAgICAgIHVuaXRQcm9tb3Rpb25Ub3RhbCxcbiAgICAgICAgICAgIGhhc1N0cmlrZVByaWNlLFxuICAgICAgICAgICAgaGFzVW5pdFByb21vdGlvbnMsXG4gICAgICAgICAgICBkaXNjb3VudFBlcmNlbnQsXG4gICAgICAgICAgICBlZmZlY3RpdmVEaXNjb3VudFBlcmNlbnRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemEgdmFsb3JlcyBkZSBwcmVjaW8gcHJvdmVuaWVudGVzIGRlbCBiYWNrZW5kIGEgYG51bWJlcmAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgVmFsb3IgbnVtw6lyaWNvIG8gc3RyaW5nIGNvbiBmb3JtYXRvIGxvY2FsIChgMTIwLjAwMGAsIGAxMjAwMDBgLCBgMTIwMDAwLTFgLCBldGMuKS5cbiAgICAgKiBAcmV0dXJucyBOw7ptZXJvIHBhcnNlYWRvIG8gYE5hTmAgc2kgZWwgdmFsb3Igbm8gZXMgdXRpbGl6YWJsZS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogU2UgdXNhIHBhcmEgc29wb3J0YXIgcmVzcHVlc3RhcyBjb24gc2VwYXJhZG9yZXMgZGUgbWlsZXMsIGNvbWEgZGVjaW1hbCBvIHJhbmdvcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnNlUHJpY2VWYWx1ZSA9ICh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IG51bWJlciA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJhdyA9IHZhbHVlLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgICAgICBpZiAoIXJhdykge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0VmFsdWUgPSByYXcuaW5jbHVkZXMoJy0nKSA/IHJhdy5zcGxpdCgnLScpWzBdLnRyaW0oKSA6IHJhdztcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZpcnN0VmFsdWVcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMvZywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwuKD89XFxkezN9KFxcRHwkKSkvZywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgnLCcsICcuJyk7XG5cbiAgICAgICAgcmV0dXJuIE51bWJlcihub3JtYWxpemVkKTtcbiAgICB9XG5cblxuICAgIGdldENyZWRpdEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+ID0+XG4gICAgICAgIHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5waXBlKFxuICAgICAgICAgICAgbWFwKChiYWxhbmNlQ3VzdG9tZXIpID0+IGJhbGFuY2VDdXN0b21lcj8uY3JlZGl0QW1vdW50ID8/IG51bGwpXG4gICAgICAgICk7XG5cbiAgICBnZXRDbGllbnRUYXhlcyA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRheGVzID4gMCA/IGNhcnQ/LnRvdGFscz8uY2xpZW50VGF4ZXMgOiAwKSk7XG5cbiAgICBnZXRSZW1haW5pbmdDcmVkaXRzID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PlxuICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QucGlwZShtYXAoKGJhbGFuY2VDdXN0b21lcikgPT4gYmFsYW5jZUN1c3RvbWVyPy5yZW1haW5pbmdDcmVkaXRzKSk7XG5cbiAgICBwdWJsaWMgdXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMoYmFsYW5jZTogYW55LCB0b3RhbDogbnVtYmVyIHwgbnVsbCA9IG51bGwpIHtcbiAgICAgICAgaWYgKCFiYWxhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRvdGFsQW1vdW50ID0gdG90YWwgPz8gMDtcblxuICAgICAgICBjb25zdCBiYWxhbmNlRGF0YSA9IHtcbiAgICAgICAgICAgIGFsbG93QW55UGF5bWVudE1ldGhvZDogYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QsXG4gICAgICAgICAgICBhbGxvd0V4Y2VlZEJhbGFuY2U6IGJhbGFuY2UuYWxsb3dFeGNlZWRCYWxhbmNlLFxuICAgICAgICAgICAgY3JlZGl0QW1vdW50OiBiYWxhbmNlLmNyZWRpdEFtb3VudCxcbiAgICAgICAgICAgIHNob3dNYXg6IGJhbGFuY2Uuc2hvd01heCxcbiAgICAgICAgICAgIHNob3dQcmljZTogYmFsYW5jZS5zaG93UHJpY2UsXG4gICAgICAgICAgICByZW1haW5pbmdDcmVkaXRzOlxuICAgICAgICAgICAgICAgIGJhbGFuY2UuY3JlZGl0QW1vdW50ICE9IG51bGwgJiYgdG90YWxBbW91bnQgIT0gbnVsbCAmJiBiYWxhbmNlLmNyZWRpdEFtb3VudCA+PSB0b3RhbEFtb3VudFxuICAgICAgICAgICAgICAgICAgICA/IGJhbGFuY2UuY3JlZGl0QW1vdW50IC0gdG90YWxBbW91bnRcbiAgICAgICAgICAgICAgICAgICAgOiAwLFxuICAgICAgICAgICAgYXBwbHlNYXhPcmRlcnM6IGJhbGFuY2UuYXBwbHlNYXhPcmRlcnMsXG4gICAgICAgICAgICBtYXhPcmRlcnM6IGJhbGFuY2UubWF4T3JkZXJzXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0Lm5leHQoYmFsYW5jZURhdGEpO1xuICAgIH1cblxufVxuIl19
|
|
917
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcxQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHekMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLDRCQUE0QixFQUFFLHdCQUF3QixFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7O0FBS3hJLElBQWEsV0FBVyxHQUF4QixNQUFhLFdBQVc7SUFrRHBCLFlBQW9CLFVBQTZCLEVBQVUsYUFBMkIsRUFBVSxNQUFpQixFQUNyRyxXQUF3QixFQUFVLFVBQStCLEVBQVUsZ0JBQWtDLEVBQzdHLG9CQUEwQyxFQUMxQyxNQUFjLEVBQ2Qsd0JBQWtEO1FBSjFDLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ3JHLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFBVSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQzdHLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFyRHRELHFCQUFnQixHQUFnQyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxrQkFBYSxHQUF5QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRSxnQkFBVyxHQUF5QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxzQkFBaUIsR0FBb0MsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFN0UsMkJBQXNCLEdBU2xCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlCLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCxVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFDWixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLGlCQUFZLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsUUFBUSxDQUFDO1FBRWxFLGlCQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM5RSxlQUFVLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDL0csbUJBQWMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLGlCQUFpQixHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzVILDBCQUFxQixHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxPQUFPLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUksa0JBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLEdBQUcsT0FBTyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BJLGNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUN4RSxtQkFBYyxHQUFHLEdBQUcsRUFBRSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxHQUFHLGVBQWUsQ0FBQztRQUNoRixhQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsWUFBWSxDQUFDO1FBR3ZFLGNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdEcsV0FBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0MsWUFBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvQyxTQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2QyxlQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25ELGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIscUJBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzlELDJCQUFzQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLGlDQUFDLElBQUksMENBQUUscUJBQXFCLHVDQUFJLElBQUksSUFBQSxDQUFDLENBQUMsQ0FBQztRQUN0Ryx3QkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQ0FBQyxJQUFJLDBDQUFFLGtCQUFrQix1Q0FBSSxJQUFJLElBQUEsQ0FBQyxDQUFDLENBQUM7UUFDaEcsa0JBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQ0FBQyxJQUFJLDBDQUFFLFlBQVksdUNBQUksSUFBSSxJQUFBLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLGFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQ0FBQyxJQUFJLDBDQUFFLE9BQU8sdUNBQUksSUFBSSxJQUFBLENBQUMsQ0FBQyxDQUFDO1FBQzFFLGVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQ0FBQyxJQUFJLDBDQUFFLFNBQVMsdUNBQUksSUFBSSxJQUFBLENBQUMsQ0FBQyxDQUFDO1FBbUJyRixtQkFBYyxHQUFHLEdBQVMsRUFBRSxnREFDeEIsT0FBQSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQUMsT0FBQSxPQUFBLEdBQUcsMENBQUUsTUFBTSxLQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxPQUFPLE1BQU0sb0NBQVMsTUFBTSxLQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxHQUFFLENBQUEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUEsRUFBQSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQSxHQUFBLENBQUM7UUFFN0ssYUFBUSxHQUFHLEdBQVMsRUFBRSxnREFDekIsT0FBQSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUEsR0FBQSxDQUFBO1FBRW5GLFlBQU8sR0FBRyxHQUFTLEVBQUU7WUFDekIsT0FBQSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQzVILEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FDbEMsQ0FBQTtVQUFBLENBQUE7UUFFRyxtQkFBYyxHQUFHLEdBQVMsRUFBRTtZQUNoQyxPQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUNsRyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQ2xDLENBQUE7VUFBQSxDQUFBO1FBRUcsc0JBQWlCLEdBQUcsR0FBUyxFQUFFO1lBQ25DLE9BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsU0FBUyxDQUMvQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQ2xDLENBQUE7VUFBQSxDQUFBO1FBRUw7OztXQUdHO1FBRUssbUJBQWMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUN0QyxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQzlCOzs7NENBR2dDO1lBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQTtRQUVEOzs7Ozs7Ozs7V0FTRztRQUNLLDBCQUFxQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO1lBQ2xELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FDWixJQUFJLENBQUMsRUFBRTs7Z0JBQ0gsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzFDLE1BQU0sT0FBTyxTQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSwwQ0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBQSxPQUFPLDBDQUFFLFNBQVMsWUFBSSxPQUFPLDBDQUFFLFNBQVMsQ0FBQSxXQUFJLE9BQU8sMENBQUUsS0FBSyxDQUFBLENBQUM7aUJBQ25GO2dCQUNELE9BQU8sSUFBSSxDQUFBO1lBQ2YsQ0FBQyxDQUNKLENBQUE7UUFDTCxDQUFDLENBQUE7UUFFTyxhQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN2QixHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ3JDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FDM0UsQ0FBQztZQUNGLElBQUksQ0FBQyxZQUFZLENBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ2IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQzdFLENBQ0osQ0FBQztRQUNOLENBQUMsQ0FBQTtRQUdPLG9CQUFlLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFBO1FBRUQ7Ozs7Ozs7OztXQVNHO1FBQ0ssOEJBQXlCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTs7WUFDekMsSUFBSSxRQUFDLElBQUksMENBQUUsS0FBSyxDQUFBLEVBQUU7Z0JBQ2QsT0FBTzthQUNWO1lBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7O2dCQUNoRSxNQUFNLFlBQVksR0FBUSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25GLHFEQUNPLFlBQVksR0FDWixJQUFJLEtBQ1AsTUFBTSxRQUFFLFlBQVksMENBQUUsTUFBTSxFQUM1QixLQUFLLFFBQUUsWUFBWSwwQ0FBRSxLQUFLLElBQzVCO1lBQ04sQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQTtRQUVPLDJCQUFzQixHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUF3QixFQUFFLEVBQUU7WUFDaEYsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFDLFFBQVEsYUFBUixRQUFRLGNBQVIsUUFBUSxHQUFJLEVBQUUsRUFBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFFeEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ2pDLElBQUksRUFBRSxDQUFDLFVBQVUsS0FBSyxVQUFVO29CQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUM1QyxNQUFNLE9BQU8sbUNBQWEsRUFBRSxLQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUUsQ0FBQztnQkFDM0QsSUFBSSxrQkFBa0IsS0FBSyxTQUFTLEVBQUU7b0JBQ2xDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUM7aUJBQ3pDO2dCQUNELE9BQU8sT0FBTyxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQTtRQUVPLGlCQUFZLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQywrQ0FBK0M7UUFDbkQsQ0FBQyxDQUFBO1FBRU8sbUJBQWMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxLQUFLLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNwRCxnREFBZ0Q7WUFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxrQkFBa0Isa0NBQU8sT0FBTyxLQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUcsQ0FBQTtRQUU1RyxDQUFDLENBQUE7UUFFTyx3QkFBbUIsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxHQUFHLENBQUMsRUFBRSxRQUF3QixFQUFFLEVBQUUsQ0FDN0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxFQUFFO2dCQUNoRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzFGLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUVDLG9CQUFlLEdBQUcsR0FBRyxFQUFFO1lBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFBO1FBRU8sY0FBUyxHQUFHLENBQUMsSUFBSyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZixZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuQyxZQUFZLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3RDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUE7UUFFTyxrQkFBYSxHQUFHLENBQUMsSUFBSSxFQUFFLFNBQVMsR0FBRyxJQUFJLEVBQVcsRUFBRTs7WUFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLHVCQUF1QixPQUFDLElBQUksMENBQUUsZUFBZSxjQUFFLElBQUksMENBQUUsTUFBTSwwQ0FBRSxLQUFLLENBQUMsQ0FBQztZQUN6RSxTQUFTLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUV2RSxJQUFJLENBQUMsVUFBVTtnQkFDWCxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLENBQUE7UUFFRCxtQ0FBOEIsR0FBRyxDQUFDLElBQVMsRUFBVyxFQUFFOztZQUNwRCxJQUFJLFFBQUMsSUFBSSwwQ0FBRSxNQUFNLENBQUE7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUE7UUFFTyxrQkFBYSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUM7UUFFdEY7OztXQUdHO1FBRUgsY0FBUyxHQUFHLENBQUMsT0FBZ0IsRUFBRSxRQUFnQixFQUFFLFVBQVUsRUFBRSxRQUFpQixFQUFFLEVBQUU7O1lBQzlFLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNsQyxPQUFPO2FBQ1Y7WUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDO1lBQ2xELE1BQU0sY0FBYyxlQUFHLE9BQU8sMENBQUUsY0FBYyx1Q0FBSSxLQUFLLEVBQUEsQ0FBQztZQUN4RCxNQUFNLFNBQVMsZUFBRyxPQUFPLDBDQUFFLFNBQVMsdUNBQUksUUFBUSxFQUFBLENBQUM7WUFFakQsSUFBSSxjQUFjLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLFNBQVMsS0FBSyxJQUFJLENBQUMsRUFBRTtnQkFDMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDOUMsT0FBTzthQUNWO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUE7Z0JBQy9DLE9BQU07YUFDVDtZQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1IsTUFBTSxPQUFPLEdBQVE7b0JBQ2pCLFdBQVcsRUFBRSxPQUFPLENBQUMsRUFBRTtvQkFDdkIsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLFdBQVcsRUFBRSxVQUFVO2lCQUMxQixDQUFDO2dCQUVGLElBQUksUUFBUSxFQUFFO29CQUNWLE9BQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO2lCQUMvQjtnQkFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxDQUFDO3FCQUMzQyxJQUFJLENBQ0QsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDcEQ7cUJBQ0EsU0FBUyxDQUNOLEdBQUcsQ0FBQyxFQUFFO29CQUNGLGlEQUFpRDtvQkFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQzdDLENBQUMsRUFDRCxHQUFHLENBQUMsRUFBRTtvQkFDRixnRUFBZ0U7b0JBQ2hFLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7d0JBQ3BCLGdDQUFnQzt3QkFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0VBQWtFLENBQUMsQ0FBQztxQkFDL0Y7eUJBQU07d0JBQ0gsdUJBQXVCO3dCQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUN0QixvRUFBb0U7cUJBQ3ZFO2dCQUNMLENBQUMsQ0FDSixDQUFDO2FBQ1Q7UUFHTCxDQUFDLENBQUE7UUFFRCxhQUFRLEdBQUcsQ0FBQyxPQUFnQixFQUFFLFFBQWdCLEVBQUUsVUFBVSxFQUFFLEVBQUcsRUFBRSxhQUFjLEVBQUUsWUFBYSxFQUFFLFVBQVcsRUFBRSxVQUFXLEVBQUUsZ0JBQWlCLEVBQUUsU0FBVSxFQUFFLFVBQVcsRUFBRSxZQUFhLEVBQUUsS0FBTSxFQUFFLG1CQUFvQixFQUFFLHFCQUFzQixFQUFFLE1BQU8sRUFBRSxFQUFFO1lBQ2xQLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO2dCQUMvQyxPQUFNO2FBQ1Q7WUFFRCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDZixDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLFlBQVksSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsSUFBSSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLElBQUksRUFBRSxFQUFFLFlBQVksRUFBRSxZQUFZLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixJQUFJLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQztpQkFDaGlCLFNBQVMsQ0FDTixHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FDL0IsQ0FBQztRQUNWLENBQUMsQ0FBQTtRQUVELHFCQUFnQixHQUFHLENBQU8sT0FBZ0IsRUFBRSxRQUFnQixFQUFFLFVBQVUsRUFBRSxRQUF3QixFQUFFLEVBQUU7WUFDbEcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUE7Z0JBQy9DLE9BQU07YUFDVDtZQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1IsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFDbkosSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSztvQkFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDdkQ7b0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDMUIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQTtpQkFDMUI7YUFDSjtZQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUE7UUFDMUIsQ0FBQyxDQUFBLENBQUE7UUFHRCxpQkFBWSxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUE7Z0JBQy9DLE9BQU07YUFDVDtZQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFakMsTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFFN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sQ0FBQztpQkFDOUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUNiLEdBQUcsQ0FBQyxFQUFFO2dCQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQzFGLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3ZGLENBQUMsRUFDRCxHQUFHLENBQUMsRUFBRTtnQkFDRixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLENBQUMsQ0FDSixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDVixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFBO1FBd0VELDJCQUFzQixHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFBO1lBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0QixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7Z0JBQ25GLFdBQVcsQ0FBQyxJQUFJLENBQ1o7b0JBQ0ksV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDNUIsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVO29CQUM1QixRQUFRLEVBQUUsV0FBVyxJQUFJLFdBQVcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVE7aUJBQ2pFLENBQ0osQ0FBQTtZQUNMLENBQUMsQ0FBQyxDQUFBO1lBRUYsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtZQUVyRyxPQUFPLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQTtRQUNyQyxDQUFDLENBQUE7UUFFRCx1QkFBa0IsR0FBRyxDQUFDLElBQWMsRUFBRSxRQUFRLEVBQUUsUUFBd0IsRUFBRSxFQUFFO1lBQ3hFLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtnQkFDekYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFakMsTUFBTSxPQUFPLEdBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtvQkFDeEIsTUFBTSxPQUFPLEdBQUcsRUFBQyxRQUFRLGFBQVIsUUFBUSxjQUFSLFFBQVEsR0FBSSxFQUFFLEVBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDeEMsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7aUJBQzlCO2dCQUVELElBQUksQ0FBQyxVQUFVO3FCQUNWLEdBQUcsQ0FDQSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUNyRSxPQUFPLENBQ1Y7cUJBQ0EsSUFBSSxDQUNELFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3BEO3FCQUNBLFNBQVMsQ0FDTixHQUFHLENBQUMsRUFBRTtvQkFDRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDN0QsQ0FBQyxFQUNELEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FDL0IsQ0FBQTthQUNSO1FBQ0wsQ0FBQyxDQUFBO1FBR0QscUJBQWdCLEdBQUcsQ0FBQyxJQUFjLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzVHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQTtnQkFDOUcsT0FBTyxLQUFLLENBQUE7YUFDZjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixFQUFFO2dCQUM1RyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUE7Z0JBQzlHLE9BQU8sS0FBSyxDQUFBO2FBQ2Y7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLENBQUMsRUFBRTtnQkFDNUYsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFO29CQUM5RyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7b0JBQ3JHLE9BQU8sS0FBSyxDQUFDO2lCQUNoQjthQUNKO1lBQ0QsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDLENBQUE7UUFFTyw0QkFBdUIsR0FBRyxDQUFDLElBQWMsRUFBRSxRQUFnQixFQUFXLEVBQUU7WUFDNUUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQztZQUVsRCxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO2dCQUNqRixPQUFPLElBQUksQ0FBQzthQUNmO1lBRUQsSUFBSSxPQUFPLENBQUMscUJBQXFCLEVBQUU7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7Z0JBQ3hDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzdDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFFcEQsSUFBSSxrQkFBa0IsSUFBSSxDQUFDLEVBQUU7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxNQUFNLGNBQWMsR0FBRyxTQUFTLEdBQUcsa0JBQWtCLENBQUM7WUFFdEQsSUFBSSxjQUFjLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFO2dCQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUM5QyxPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUVLLHFDQUFnQyxHQUFHLEdBQVksRUFBRTs7WUFDcEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQztZQUVsRCxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO2dCQUNqRixPQUFPLElBQUksQ0FBQzthQUNmO1lBRUQsSUFBSSxPQUFPLENBQUMscUJBQXFCLEVBQUU7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7Z0JBQ3hDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsTUFBTSxLQUFLLEdBQUcsYUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssMENBQUUsTUFBTSwwQ0FBRSxLQUFLLEtBQUksQ0FBQyxDQUFDO1lBRXpELG1FQUFtRTtZQUNuRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFO2dCQUM3RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUM5QyxPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUVGLHlCQUFvQixHQUFHLENBQUMsSUFBYyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ2hELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLEVBQUU7Z0JBQy9DLDJDQUEyQztnQkFDM0MsT0FBTyxLQUFLLENBQUE7YUFDZjtZQUNELE9BQU8sSUFBSSxDQUFBO1FBQ2YsQ0FBQyxDQUFBO1FBRUQsbUJBQWMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUU7WUFDcEMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUMxRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLG1YQUFtWDtZQUNuWCxxQkFBcUI7WUFDckIsMkRBQTJEO1lBQzNELDBDQUEwQztZQUMxQyxZQUFZO1lBQ1osSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDNUQsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNwRixHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN2RSxDQUFBO1FBQ0wsQ0FBQyxDQUFBO1FBb0JELGdCQUFXLEdBQUcsQ0FBQyxLQUF3QixFQUFFLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQTtRQUVELDJCQUFzQixHQUFHLENBQUMsV0FBVyxFQUFVLEVBQUUsV0FBQyxPQUFBLE9BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLFdBQVcsQ0FBQywwQ0FBRSxRQUFRLEtBQUksQ0FBQyxDQUFBLEVBQUEsQ0FBQztRQUV6SCx3QkFBbUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtRQUVwRyxhQUFRLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksVUFBVSxDQUFDLENBQUM7UUFFbEYsOEJBQThCO1FBQzlCLGlCQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUVyQyxjQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUU5QixtQkFBYyxHQUFHLEdBQXVCLEVBQUUsQ0FDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsa0NBQUMsSUFBSSwwQ0FBRSxNQUFNLDBDQUFFLEtBQUssR0FBQSxDQUFDLENBQUMsQ0FBQztRQUV2RCwrQkFBMEIsR0FBRyxHQUE4QixFQUFFLENBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLDJDQUFDLElBQUksMENBQUUsTUFBTSwwQ0FBRSx1QkFBdUIsdUNBQUksSUFBSSxJQUFBLENBQUMsQ0FBQyxDQUFDO1FBRWpGLG9DQUErQixHQUFHLEdBQThCLEVBQUUsQ0FDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsMkNBQUMsSUFBSSwwQ0FBRSxNQUFNLDBDQUFFLDRCQUE0Qix1Q0FBSSxJQUFJLElBQUEsQ0FBQyxDQUFDLENBQUM7UUFFdEYsZ0ZBQWdGO1FBQ2hGLHVCQUFrQixHQUFHLEdBQXVCLEVBQUUsQ0FDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RSxzQkFBaUIsR0FBRyxHQUF1QixFQUFFLENBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLHdCQUFDLFNBQVMsMENBQUUsTUFBTSxHQUFBLENBQUMsQ0FBQyxDQUFDO1FBRS9ELG1CQUFjLEdBQUcsR0FBdUIsRUFBRSxDQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSx1QkFBQyxPQUFBLGFBQUEsSUFBSSwwQ0FBRSxNQUFNLDBDQUFFLEtBQUssSUFBRyxDQUFDLENBQUMsQ0FBQyxhQUFDLElBQUksMENBQUUsTUFBTSwwQ0FBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxFQUFBLENBQUMsQ0FBQyxDQUFDO1FBRXJGLHNCQUFpQixHQUFHLEdBQXVCLEVBQUUsQ0FDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRix1QkFBa0IsR0FBRyxHQUF1QixFQUFFLENBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUUsNkJBQXdCLEdBQUcsR0FBdUIsRUFBRSxDQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWxGOzs7Ozs7Ozs7Ozs7OztXQWNHO1FBQ0gsOEJBQXlCLEdBQUcsR0FBdUIsRUFBRSxDQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBRTVGLDZFQUE2RTtRQUM3RSw2QkFBd0IsR0FBRyxHQUE4QixFQUFFLENBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFN0Y7Ozs7Ozs7O1dBUUc7UUFDSCxxQkFBZ0IsR0FBRyxHQUF3QixFQUFFLENBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUUsY0FBUyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7UUFjN0U7Ozs7Ozs7Ozs7OztXQVlHO1FBQ0gsbUJBQWMsR0FBRyxDQUFDLElBQWMsRUFBbUIsRUFBRSxXQUFDLE9BQUEsT0FBQSxJQUFJLDBDQUFFLE9BQU8sS0FBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUEsRUFBQSxDQUFDO1FBRXZHLGlGQUFpRjtRQUNqRixpQ0FBNEIsR0FBRyxDQUFDLElBQWMsRUFBRSxPQUFpQixFQUE2QixFQUFFOztZQUM1RixPQUFBLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBNEIsQ0FDdEQsSUFBSSxFQUNKLE9BQU8sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUM3QixPQUFBLElBQUksMENBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQzVELENBQUE7U0FBQSxDQUFDO1FBRU4sc0ZBQXNGO1FBQ3RGLG9DQUErQixHQUFHLENBQzlCLE9BQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQ2xDLE9BQWlCLEVBQ2pCLGtCQUEyQixLQUFLLEVBQ0osRUFBRTs7WUFDOUIsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sT0FBQyxJQUFJLDBDQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDMUYsTUFBTSxLQUFLLEdBQWUsQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUMzRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN0RCxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQUMsT0FBQSxDQUFDLFFBQUMsSUFBSSwwQ0FBRSxXQUFXLENBQUEsQ0FBQSxFQUFBLENBQUMsQ0FBQztZQUNwRixNQUFNLFNBQVMsR0FBRyxPQUFBLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsMENBQUUsK0JBQStCLE1BQUssSUFBSSxDQUFDO1lBQzVGLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDL0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25FLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQy9GLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUMzRixNQUFNLFFBQVEsR0FBRyxlQUFlO2dCQUM1QixDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO2dCQUNsRSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ1gsTUFBTSxLQUFLLEdBQUcsZUFBZTtnQkFDekIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFBLElBQUksMENBQUUsTUFBTSwwQ0FBRSxLQUFLLEtBQUksQ0FBQyxDQUFDO2dCQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUMzRyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztZQUM5RyxNQUFNLGNBQWMsR0FBRyxxQkFBcUI7Z0JBQ3hDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JELE1BQU0sYUFBYSxHQUFHLG9CQUFvQjtnQkFDdEMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCO29CQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUM7b0JBQy9DLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTFELElBQUksY0FBYyxFQUFFO2dCQUNoQixPQUFPO29CQUNILHVCQUF1QixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBUyxFQUFFLEVBQUUsQ0FDdkQsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzNGLGFBQWEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQVMsRUFBRSxFQUFFLENBQzdDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNsRSxRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFTLEVBQUUsRUFBRSxDQUN4QyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDbEUsYUFBYTtvQkFDYixjQUFjO29CQUNkLEtBQUs7b0JBQ0wsV0FBVztvQkFDWCxRQUFRO29CQUNSLEtBQUs7b0JBQ0wsb0JBQW9CLEVBQUUsU0FBUyxJQUFJLEtBQUssS0FBSyxDQUFDO29CQUM5QyxNQUFNLEVBQUUsYUFBYTtpQkFDeEIsQ0FBQzthQUNMO1lBRUQsT0FBTztnQkFDSCx1QkFBdUIsRUFBRSxDQUFDO2dCQUMxQixhQUFhLEVBQUUsQ0FBQztnQkFDaEIsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDO2dCQUN4RCxhQUFhO2dCQUNiLGNBQWM7Z0JBQ2QsS0FBSztnQkFDTCxXQUFXO2dCQUNYLFFBQVE7Z0JBQ1IsS0FBSztnQkFDTCxvQkFBb0IsRUFBRSxLQUFLO2dCQUMzQixNQUFNLEVBQUUsUUFBUTthQUNuQixDQUFDO1FBQ04sQ0FBQyxDQUFDO1FBRUYsaUVBQWlFO1FBQ3pELDZCQUF3QixHQUFHLENBQUMsSUFBUyxFQUFZLEVBQUU7O1lBQUMsT0FBQSxpQ0FDckQsSUFBSSxLQUNQLFdBQVcsRUFBRSxPQUFBLElBQUksMENBQUUsV0FBVyxZQUFJLElBQUksMENBQUUsWUFBWSxDQUFBLElBQ3RELENBQUE7U0FBQSxDQUFDO1FBRUg7OztXQUdHO1FBQ0sscUJBQWdCLEdBQUcsQ0FDdkIsSUFBUyxFQUNULFlBQXFDLEVBQ3JDLFlBQXFDLEVBQ1QsRUFBRTs7WUFDOUIsTUFBTSxNQUFNLEdBQUcsT0FBQSxJQUFJLDBDQUFFLE1BQU0sS0FBSSxFQUFFLENBQUM7WUFDbEMsTUFBTSxLQUFLLFNBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyx1Q0FBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUEsQ0FBQztZQUMzRCxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDckQsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBRXZHLE9BQU87Z0JBQ0gsR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUN0QixHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7Z0JBQ3RCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzthQUM3QixDQUFDO1FBQ04sQ0FBQyxDQUFDO1FBRUYsY0FBUyxHQUFHLENBQU8sSUFBSSxFQUFnQixFQUFFO1lBQ3JDLElBQUk7Z0JBQ0EsSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDdkYsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNO29CQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNyRixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDMUM7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQzthQUNyRDtRQUNMLENBQUMsQ0FBQSxDQUFBO1FBRUQsaUJBQVksR0FBRyxHQUFTLEVBQUU7WUFBQyxPQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQy9FLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BDLE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUE7VUFBQSxDQUFDO1FBRWhCLGlCQUFZLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNwQixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztZQUM5QyxJQUFJLE1BQU0sR0FBWSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEQsSUFBSTtnQkFDQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxtQ0FDQyxNQUFNLEtBQ1QsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQzNFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLEdBQzFFLENBQUM7YUFDTDtZQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUc7WUFDZixDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUE7UUFFRCx1QkFBa0IsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFFNUQscUJBQWdCLEdBQUcsQ0FBQyxlQUEwQixFQUFFLGFBQXdCLEVBQWtCLEVBQUU7WUFDeEYsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDbEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztZQUN4QyxJQUFJLE1BQU0sR0FBbUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDMUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsNEJBQTRCLEVBQUU7Z0JBQ2hFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQTthQUMzRTtZQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRTtnQkFDOUQsTUFBTSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUM7Z0JBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFBO2FBQzVFO1lBQ0QsSUFBSSxlQUFlLElBQUksYUFBYSxFQUFFO2dCQUNsQyxNQUFNLENBQUMsRUFBRTtvQkFDTCxDQUFDLENBQUMsZUFBZSxJQUFJLGVBQWUsRUFBRTtvQkFDdEMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUUsQ0FBQzthQUMxQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQTtRQUVELHVCQUFrQixHQUFHLENBQUMsY0FBcUIsRUFBRSxJQUFZLEVBQUUsRUFBRTtZQUN6RCwrQkFBK0I7WUFDL0IsMkJBQTJCO1lBQzNCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLGFBQWEsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JGLElBQUksYUFBYSxFQUFFO29CQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztpQkFDckI7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUE7WUFDRiw2QkFBNkI7WUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUE7UUFFRCxvQkFBZSxHQUFHLENBQU8sS0FBYSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7WUFDdkIsSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7WUFDeEMsT0FBTyxNQUFNLENBQUE7UUFDakIsQ0FBQyxDQUFBLENBQUE7UUFFRDs7V0FFRztRQUVIOzs7Ozs7Ozs7OztXQVdHO1FBQ0gsbUJBQWMsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FDN0MsSUFBSSxDQUFDLEVBQUU7O1lBQ0gsSUFBSSxHQUFHO2dCQUNILE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ3pDLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDdEIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFO2dCQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ2hCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsU0FBUyxRQUFFLElBQUksQ0FBQyxTQUFTLHVDQUFJLElBQUksQ0FBQyxVQUFVLEVBQUE7Z0JBQzVDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixRQUFRLFFBQUUsSUFBSSxDQUFDLFFBQVEsdUNBQUksSUFBSSxDQUFDLFNBQVMsRUFBQTtnQkFDekMsY0FBYyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztvQkFDOUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjO29CQUNyQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN2RSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWTtnQkFDbEQsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO2FBQ2xDLENBQUE7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyx5Q0FBeUM7WUFDekMsbURBQW1EO1lBQ25ELCtDQUErQztZQUMvQyw2SEFBNkg7WUFDN0gscUJBQXFCO1lBQ3JCLCtIQUErSDtZQUMvSCxXQUFXO1lBQ1gsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUNKLENBQUE7UUFFRDs7Ozs7Ozs7Ozs7OztXQWFHO1FBQ0sseUJBQW9CLEdBQUcsQ0FBQyxJQUFjLEVBQW1CLEVBQUU7O1lBQy9ELE1BQU0sT0FBTyxxQkFBRyxJQUFJLDBDQUFFLE9BQU8sMENBQUUsUUFBUSwwQ0FBRyxDQUFDLENBQUMsQ0FBQztZQUM3QyxNQUFNLG9CQUFvQixTQUFHLE9BQU8sMENBQUUsb0JBQW9CLENBQUM7WUFDM0QsZ0ZBQWdGO1lBQ2hGLG9GQUFvRjtZQUNwRixtREFBbUQ7WUFDbkQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxPQUFDLElBQUksMENBQUUsU0FBUyxDQUFDLENBQUM7WUFDaEUsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDaEUsTUFBTSxTQUFTLEdBQUcsb0JBQW9CO2dCQUNsQyxDQUFDLENBQUMsaUJBQWlCO2dCQUNuQixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsMkNBQ2xCLG9CQUFvQiwwQ0FBRSxTQUFTLDZDQUM1QixvQkFBb0IsMENBQUUsS0FBSywrQ0FDM0IsT0FBTywwQ0FBRSxTQUFTLCtDQUNsQixPQUFPLDBDQUFFLEtBQUsscURBQ2QsSUFBSSwwQ0FBRSxPQUFPLDBDQUFFLFNBQVMscURBQ3hCLElBQUksMENBQUUsT0FBTywwQ0FBRSxLQUFLLHlDQUNwQixDQUFDLEdBQ1AsQ0FBQztZQUNOLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGVBQWUseUJBQzdDLG9CQUFvQiwwQ0FBRSxLQUFLLDZDQUN4QixPQUFPLDBDQUFFLEtBQUsscURBQ2QsSUFBSSwwQ0FBRSxPQUFPLDBDQUFFLEtBQUsseUNBQ3BCLENBQUMsR0FDUCxDQUFDO1lBQ0YsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzdELE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUM7WUFDckYsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsT0FBTyxPQUFDLElBQUksMENBQUUsY0FBYyxDQUFDO2dCQUMxRCxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsV0FBQyxPQUFBLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBQSxTQUFTLDBDQUFFLE1BQU0sS0FBSSxDQUFDLENBQUMsQ0FBQSxFQUFBLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1IsTUFBTSxjQUFjLEdBQUcscUJBQXFCLEdBQUcsbUJBQW1CLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO1lBQzlGLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLE9BQU8sT0FBQyxJQUFJLDBDQUFFLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNoRyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBQSxJQUFJLDBDQUFFLFFBQVEsS0FBSSxDQUFDLENBQUMsQ0FBQztZQUM3QyxNQUFNLFVBQVUsR0FBRyxvQkFBb0I7Z0JBQ25DLENBQUMsQ0FBQyxtQkFBbUI7Z0JBQ3JCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDO1lBQ3pGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLE9BQUMsSUFBSSwwQ0FBRSxRQUFRLENBQUMsQ0FBQztZQUM3RCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxhQUFBLElBQUksMENBQUUsT0FBTywwQ0FBRSxRQUFRLEtBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkUsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxlQUFlLEdBQUcsQ0FBQyxJQUFJLG1CQUFtQixHQUFHLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQztnQkFDdEgsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ2xGLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLHFCQUFxQixHQUFHLENBQUM7b0JBQ3hELENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDO29CQUNuQyxDQUFDLENBQUMsY0FBYzt3QkFDWixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMscUJBQXFCLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLEdBQUcsQ0FBQzt3QkFDM0YsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQixNQUFNLHVCQUF1QixHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDO1lBQzdGLE1BQU0sd0JBQXdCLEdBQUcsdUJBQXVCLEdBQUcsQ0FBQyxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksdUJBQXVCLEdBQUcsVUFBVTtnQkFDbEgsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxHQUFHLHVCQUF1QixDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUN0RixDQUFDLENBQUMsZUFBZSxDQUFDO1lBRXRCLE9BQU87Z0JBQ0gsU0FBUyxFQUFFLG1CQUFtQjtnQkFDOUIsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQzFELFVBQVU7Z0JBQ1Ysa0JBQWtCO2dCQUNsQixjQUFjO2dCQUNkLGlCQUFpQjtnQkFDakIsZUFBZTtnQkFDZix3QkFBd0I7YUFDM0IsQ0FBQztRQUNOLENBQUMsQ0FBQTtRQUVEOzs7Ozs7OztXQVFHO1FBQ0ssb0JBQWUsR0FBRyxDQUFDLEtBQXlDLEVBQVUsRUFBRTtZQUM1RSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxFQUFFO2dCQUNoRCxPQUFPLEdBQUcsQ0FBQzthQUNkO1lBRUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQzNCLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ04sT0FBTyxHQUFHLENBQUM7YUFDZDtZQUVELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUN0RSxNQUFNLFVBQVUsR0FBRyxVQUFVO2lCQUN4QixPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztpQkFDbEIsT0FBTyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztpQkFDakMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUV2QixPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUE7UUFHRCxvQkFBZSxHQUFHLEdBQThCLEVBQUUsQ0FDOUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FDNUIsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUUsaUNBQUMsZUFBZSwwQ0FBRSxZQUFZLHVDQUFJLElBQUksSUFBQSxDQUFDLENBQ2xFLENBQUM7UUFFTixtQkFBYyxHQUFHLEdBQXVCLEVBQUUsQ0FDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsdUJBQUMsT0FBQSxhQUFBLElBQUksMENBQUUsTUFBTSwwQ0FBRSxLQUFLLElBQUcsQ0FBQyxDQUFDLENBQUMsYUFBQyxJQUFJLDBDQUFFLE1BQU0sMENBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsRUFBQSxDQUFDLENBQUMsQ0FBQztRQUUzRix3QkFBbUIsR0FBRyxHQUF1QixFQUFFLENBQzNDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUUsd0JBQUMsZUFBZSwwQ0FBRSxnQkFBZ0IsR0FBQSxDQUFDLENBQUMsQ0FBQztRQTkrQjlGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQztRQUM3RCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVNLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7SUFDdkMsQ0FBQztJQTJURCxvQkFBb0IsQ0FBQyxLQUFZO1FBQzdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDMUMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtZQUMvQyxPQUFNO1NBQ1Q7UUFFRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzVCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUM3QyxDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUM5QyxPQUFPO1NBQ1Y7UUFFRCxNQUFNLE1BQU0sR0FBRztZQUNYLEtBQUssRUFBRSxVQUFVO1NBQ3BCLENBQUM7UUFFRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLENBQUM7YUFDOUMsU0FBUyxFQUFFO2FBQ1gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFOztZQUVSLElBQUksT0FBQSxHQUFHLDBDQUFFLE1BQU0sTUFBSyxTQUFTLEVBQUU7Z0JBQzNCLE1BQU0sWUFBWSxHQUFHLE9BQUEsR0FBRyxDQUFDLEtBQUssMENBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFLLGVBQWUsQ0FBQztnQkFDdEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3RDLE9BQU87YUFDVjtZQUVELE1BQU0sYUFBYSxHQUFHLE9BQUEsR0FBRywwQ0FBRSxjQUFjLEtBQUksRUFBRSxDQUFDO1lBQ2hELE1BQU0sU0FBUyxHQUFHLGFBQUEsR0FBRywwQ0FBRSxJQUFJLDBDQUFFLEtBQUssS0FBSSxFQUFFLENBQUM7WUFFekMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNoRCxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVM7Z0JBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsQ0FDM0QsQ0FBQztZQUVGLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7Z0JBQ3JELE9BQU87YUFDVjtZQUVELElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7YUFDekQ7WUFFRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUNuQztRQUNMLENBQUMsRUFDRyxHQUFHLENBQUMsRUFBRTtZQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDO2FBQ0wsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFvSkQsU0FBUztRQUNMLHNCQUFzQjtRQUN0QixJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzNCLE9BQU8sS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO1NBQzFDO1FBQ0QsK0JBQStCO0lBQ25DLENBQUM7SUFFRCxpQkFBaUI7UUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQseUJBQXlCO1FBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0lBQzFDLENBQUM7SUFrRkQsV0FBVztRQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ3pDLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDekQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ04sSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQzVDLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDckQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ04sT0FBTyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBd1dNLHVCQUF1QixDQUFDLE9BQVksRUFBRSxRQUF1QixJQUFJO1FBQ3BFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLE9BQU87U0FDVjtRQUVELE1BQU0sV0FBVyxJQUFHLEtBQUssYUFBTCxLQUFLLGNBQUwsS0FBSyxHQUFJLENBQUMsQ0FBQSxDQUFDO1FBRS9CLE1BQU0sV0FBVyxHQUFHO1lBQ2hCLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxxQkFBcUI7WUFDcEQsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLGtCQUFrQjtZQUM5QyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7WUFDbEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixnQkFBZ0IsRUFDWixPQUFPLENBQUMsWUFBWSxJQUFJLElBQUksSUFBSSxXQUFXLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksV0FBVztnQkFDdEYsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsV0FBVztnQkFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDWCxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7WUFDdEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1NBQy9CLENBQUM7UUFFRixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FFSixDQUFBOztZQS9nQ21DLGlCQUFpQjtZQUF5QixZQUFZO1lBQWtCLFNBQVM7WUFDeEYsV0FBVztZQUFzQixtQkFBbUI7WUFBNEIsZ0JBQWdCO1lBQ3ZGLG9CQUFvQjtZQUNsQyxNQUFNO1lBQ1ksd0JBQXdCOzs7QUF0RHJELFdBQVc7SUFIdkIsVUFBVSxDQUFDO1FBQ1IsVUFBVSxFQUFFLE1BQU07S0FDckIsQ0FBQztHQUNXLFdBQVcsQ0Fpa0N2QjtTQWprQ1ksV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUHJvZHVjdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcHJvZHVjdCc7XG5pbXBvcnQgeyBDYXJ0SXRlbSwgQ2FydEl0ZW1QcmljaW5nIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXJ0LWl0ZW0nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaS9jb25uZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29yZS5jb25zdHMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi91dGlscy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENvdXBvbkkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvdXBvbic7XG5pbXBvcnQgeyBPcmRlclV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvb3JkZXItdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IENoZWNrb3V0RGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlY2tvdXQtZGF0YSc7XG5pbXBvcnQgeyBDYXJ0QWZmb3JkYWJsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FydC9jYXJ0LWFmZm9yZGFibGUnO1xuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uLy4uL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENoYW5uZWwgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoYW5uZWwnO1xuaW1wb3J0IHsgQ2FydFRvdGFsUHJpY2luZ1ZhbHVlLCBDYXJ0VG90YWxzUHJpY2luZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FydC10b3RhbHMnO1xuaW1wb3J0IHsgQ2FydEl0ZW1QcmljZVByZXNlbnRhdGlvbiwgQ2FydFN1bW1hcnlQcmljZVByZXNlbnRhdGlvbiwgUHJpY2VQcmVzZW50YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvcHJpY2UtcHJlc2VudGF0aW9uLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENhcnRTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGNhcnRJdGVtc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxDYXJ0SXRlbVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuICAgIHByaXZhdGUgY291cG9uU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICAgIHByaXZhdGUgY2FydFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgICBwcml2YXRlIHJlcXVlc3RJblByb2Nlc3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgICBwcml2YXRlIHByb21vdGlvbnNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Q2hlY2tvdXREYXRhW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG5cbiAgICBwcml2YXRlIGJhbGFuY2VDdXN0b21lclN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDx7XG4gICAgICAgIGFsbG93QW55UGF5bWVudE1ldGhvZD86IGJvb2xlYW47XG4gICAgICAgIGFsbG93RXhjZWVkQmFsYW5jZT86IGJvb2xlYW47XG4gICAgICAgIGNyZWRpdEFtb3VudD86IG51bWJlciB8IG51bGw7XG4gICAgICAgIHNob3dNYXg/OiBib29sZWFuO1xuICAgICAgICBzaG93UHJpY2U/OiBib29sZWFuO1xuICAgICAgICByZW1haW5pbmdDcmVkaXRzPzogbnVtYmVyO1xuICAgICAgICBhcHBseU1heE9yZGVycz86IGJvb2xlYW47XG4gICAgICAgIG1heE9yZGVycz86IG51bWJlcjtcbiAgICB9IHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuXG4gICAgcHJpdmF0ZSBpdGVtcyA9IFtdO1xuXG4gICAgcHJpdmF0ZSBjb3VudDogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIGxvY2FsZSA9IFwiXCI7XG4gICAgcHJpdmF0ZSBsb2dnZWRfaW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIGhhdmVfdG9fdXBkYXRlID0gdHJ1ZTtcbiAgICBwdWJsaWMgY2hhbm5lbENvbmZpZzogYW55ID0ge307XG4gICAgcHJpdmF0ZSBjYXJ0X2Jhc2VVcmwgPSAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2FydHMnO1xuXG4gICAgcHVibGljIGNhcnRJdGVtc0FwaSA9ICgpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJz9sb2NhbGU9JyArIHRoaXMuY29uc3RzLmdldExvY2FsZSgpO1xuICAgIHB1YmxpYyBhZGRJdGVtQXBpID0gKCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRfdG9rZW4gKyAnL2l0ZW1zJyArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcbiAgICBwdWJsaWMgYWRkQWxsSXRlbXNBcGkgPSAoKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvbXVsdGlwbGUtaXRlbXMnICsgJz9sb2NhbGU9JyArIHRoaXMuY29uc3RzLmdldExvY2FsZSgpO1xuICAgIHB1YmxpYyB1cGRhdGVJdGVtUXVhbnRpdHlBcGkgPSAoaXRlbV9pZCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRfdG9rZW4gKyAnL2l0ZW1zLycgKyBpdGVtX2lkICsgJz9sb2NhbGU9JyArIHRoaXMuY29uc3RzLmdldExvY2FsZSgpO1xuICAgIHB1YmxpYyBkZWxldGVJdGVtQXBpID0gKGl0ZW1faWQpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9pdGVtcy8nICsgaXRlbV9pZCArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcbiAgICBwdWJsaWMgY291cG9uQXBpID0gKCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRfdG9rZW4gKyAnL2NvdXBvbic7XG4gICAgcHVibGljIGFkZHJlc3NCb29rQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2FkZHJlc3MtYm9vayc7XG4gICAgcHVibGljIHRheGVzQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NhcnRzL3RheCc7XG5cbiAgICBwdWJsaWMgY2FydF90b2tlbjtcbiAgICBwdWJsaWMgY2FydEl0ZW1zID0gdGhpcy5jYXJ0SXRlbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKGl0ZW1zID0+IHRoaXMuc3dpdGNoUHJpY2VJbkNhcnRJdGVtKGl0ZW1zKSkpXG4gICAgcHVibGljIGNvdXBvbiA9IHRoaXMuY291cG9uU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgbG9hZGluZyA9IHRoaXMucmVxdWVzdEluUHJvY2Vzcy5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgY2FydCA9IHRoaXMuY2FydFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIHByb21vdGlvbnMgPSB0aGlzLnByb21vdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBkZWxldGluZzogQm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBiYWxhbmNlQ3VzdG9tZXIkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBhbGxvd0FueVBheW1lbnRNZXRob2QkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uYWxsb3dBbnlQYXltZW50TWV0aG9kID8/IG51bGwpKTtcbiAgICBwdWJsaWMgYWxsb3dFeGNlZWRCYWxhbmNlJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LmFsbG93RXhjZWVkQmFsYW5jZSA/PyBudWxsKSk7XG4gICAgcHVibGljIGNyZWRpdEFtb3VudCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5jcmVkaXRBbW91bnQgPz8gbnVsbCkpO1xuICAgIHB1YmxpYyBzaG93TWF4JCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LnNob3dNYXggPz8gbnVsbCkpO1xuICAgIHB1YmxpYyBzaG93UHJpY2UkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uc2hvd1ByaWNlID8/IG51bGwpKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UsIHByaXZhdGUgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLCBwcml2YXRlIGNvbnN0czogQ29uc3RhbnRzLFxuICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSBvcmRlclV0aWxzOiBPcmRlclV0aWxpdHlTZXJ2aWNlLCBwcml2YXRlIGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2hhbm5lbENvbmZpZ1NlcnZpY2U6IENoYW5uZWxDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHByaWNlUHJlc2VudGF0aW9uU2VydmljZTogUHJpY2VQcmVzZW50YXRpb25TZXJ2aWNlKSB7XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYXJ0JykpIHx8IFtdO1xuICAgICAgICB0aGlzLmNhcnRfdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2FydF90b2tlbicpIHx8IG51bGw7XG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UubG9nZ2VkSW4uc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmdldENhcnQoKSk7XG4gICAgICAgIHRoaXMuY2hhbm5lbENvbmZpZ1NlcnZpY2UuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmNoYW5uZWxDb25maWcgPSByZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDYXJ0MigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FydEl0ZW1zU3ViamVjdC52YWx1ZTtcbiAgICB9XG5cbiAgICBnZXRBZGRyZXNzQm9vayA9IGFzeW5jICgpID0+XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5hZGRyZXNzQm9va0FwaSgpKS5waXBlKG1hcChyZXMgPT4gcmVzPy5sZW5ndGggJiYgcmVzLm1hcChhZGRyZXMgPT4geyByZXR1cm4gYWRkcmVzICYmIHsgLi4uYWRkcmVzLCBzZWxlY3RlZDogYWRkcmVzLmRlZmF1bHQgfSB9KSB8fCBudWxsKSkudG9Qcm9taXNlKCk7XG5cbiAgICBwdWJsaWMgZ2V0VGF4ZXMgPSBhc3luYyAoKSA9PlxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLnRheGVzQXBpKCksIHsgdG9rZW46IHRoaXMuY2FydF90b2tlbiB9KS5zdWJzY3JpYmUocmVzID0+IHJlcylcblxuICAgIHByaXZhdGUgZ2V0Q2FydCA9IGFzeW5jICgpID0+XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCksICgodGhpcy5jYXJ0X3Rva2VuICYmIHRoaXMuaXRlbXMubGVuZ3RoID49IDEpICYmIHsgdG9rZW46IHRoaXMuY2FydF90b2tlbiB9KSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgcmVzID0+IHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKVxuICAgICAgICApXG5cbiAgICBwcml2YXRlIGdldENhcnRCeVRva2VuID0gYXN5bmMgKCkgPT5cbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5jYXJ0SXRlbXNBcGkoKSwgKCh0aGlzLmNhcnRfdG9rZW4pICYmIHsgdG9rZW46IHRoaXMuY2FydF90b2tlbiB9KSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgcmVzID0+IHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKVxuICAgICAgICApXG5cbiAgICBwcml2YXRlIGdldENhcnRCeUN1c3RvbWVyID0gYXN5bmMgKCkgPT5cbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5jYXJ0SXRlbXNBcGkoKSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgcmVzID0+IHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKVxuICAgICAgICApXG5cbiAgICAvKipcbiAgICAgKiAgQHByaXZhdGVcbiAgICAgKiAgQ0FSVCBDUlVEIFNFUlZFUidTIFNZTkNST05JWkVEXG4gICAgICovXG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVDYXJ0ID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuY2FydF90b2tlbiA9IHJlc3BvbnNlLnRva2VuVmFsdWU7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0X3Rva2VuJywgdGhpcy5jYXJ0X3Rva2VuKTtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSByZXNwb25zZS5sb2NhbGU7XG4gICAgICAgIC8qIGxldCBsb2NhbGVGcm9tU3RvcmFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdMT0NBTEUnKVxuICAgICAgICBjb25zb2xlLmxvZyhsb2NhbGVGcm9tU3RvcmFnZSlcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGVGcm9tU3RvcmFnZSA/IGxvY2FsZUZyb21TdG9yYWdlIDogcmVzcG9uc2UubG9jYWxlO1xuICAgICAgICByZXNwb25zZS5sb2NhbGUgPSB0aGlzLmxvY2FsZSAqL1xuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzcG9uc2UsIGZhbHNlKTtcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0SXRlbXModGhpcy50cmFuc2Zvcm1JdGVtcyhyZXNwb25zZS5pdGVtcykpO1xuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlYXNpZ25hIGBwcm9kdWN0LnByaWNlYCBhbCBwcmVjaW8gYmFzZSBsZWdhY3kgcXVlIGVzcGVyYSBlbCB0ZW1wbGF0ZSBoaXN0w7NyaWNvIGRlbCBjYXJyaXRvLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW1zIMONdGVtcyBub3JtYWxpemFkb3MgZGVsIGNhcnJpdG8uXG4gICAgICogQHJldHVybnMgTG9zIG1pc21vcyDDrXRlbXMgY29uIGBwcm9kdWN0LnByaWNlYCBhbGluZWFkbyBhbCBwcmVjaW8gYmFzZSBtb3N0cmFkbyBlbiBsYSB0YWJsYS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogRXN0ZSBtw6l0b2RvIG5vIG1vZGlmaWNhIGBwcmljaW5nLmZpbmFsUHJpY2VgLiBTb2xvIHByZXNlcnZhIGNvbXBhdGliaWxpZGFkIGNvbiB0ZW1wbGF0ZXNcbiAgICAgKiB2aWVqb3MgcXVlIHRvZGF2w61hIGxlZW4gYGl0ZW0ucHJvZHVjdC5wcmljZWAgZGlyZWN0YW1lbnRlLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3dpdGNoUHJpY2VJbkNhcnRJdGVtID0gKGl0ZW1zOiBDYXJ0SXRlbVtdKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtcy5tYXAoXG4gICAgICAgICAgICBpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5wcm9kdWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByaWNpbmcgPSB0aGlzLmdldEl0ZW1QcmljaW5nKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50ID0gaXRlbS5wcm9kdWN0LnZhcmlhbnRzPy5bMF07XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucHJvZHVjdC5wcmljZSA9IHByaWNpbmc/LmJhc2VQcmljZSB8fCB2YXJpYW50Py5zYWxlcHJpY2UgfHwgdmFyaWFudD8ucHJpY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtXG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0ZXBDYXJ0ID0gKHJlcykgPT4ge1xuICAgICAgICByZXMuaXRlbXMubGVuZ3RoID4gMCAmJiByZXMuaXRlbXMuZm9yRWFjaChcbiAgICAgICAgICAgIGl0ZW0gPT4gIXRoaXMuaXNJdGVtSW5Mb2NhbChpdGVtLmlkKSAmJiB0aGlzLmRlbGV0ZUNhcnRJdGVtKGl0ZW0sIGZhbHNlKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFkZEFsbFRvQ2FydChcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIGl0ZW0gPT4gIXJlcy5pdGVtcy5zb21lKGV4dGVybmFsX2l0ZW0gPT4gZXh0ZXJuYWxfaXRlbS5pZCA9PSBpdGVtLml0ZW1faWQpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHVwZGF0ZUNhcnRJdGVtcyA9IChpdGVtcykgPT4ge1xuICAgICAgICB0aGlzLml0ZW1zID0gaXRlbXM7XG4gICAgICAgIHRoaXMuY291bnQgPSBpdGVtcy5sZW5ndGg7XG4gICAgICAgIHRoaXMuY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuaXRlbXMpO1xuICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2luY3Jvbml6YSBgY2FydEl0ZW1zU3ViamVjdGAgY29uIGxhIMO6bHRpbWEgcmVzcHVlc3RhIGRlbCBiYWNrZW5kLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhcnQgUmVzcHVlc3RhIGRlIGNhcnJpdG8gcmVjaWJpZGEgZGVzZGUgY3VhbHF1aWVyIGVuZHBvaW50IHF1ZSBkZXZ1ZWx2YSBgaXRlbXNgLlxuICAgICAqIEByZXR1cm5zIGB2b2lkYFxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBTZSByZXV0aWxpemEgZGVzcHXDqXMgZGUgYWN0dWFsaXphciBjYW50aWRhZGVzLCBhcGxpY2FyIGN1cMOzbiBvIHJlbW92ZXIgcHJvZHVjdG9zIHBhcmEgZXZpdGFyXG4gICAgICogcXVlIGxhIHRhYmxhIHF1ZWRlIGNvbiBzdWJ0b3RhbGVzIG8gcHJvbW9jaW9uZXMgZGVzYWN0dWFsaXphZGFzLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3luY0NhcnRJdGVtc0Zyb21SZXNwb25zZSA9IChjYXJ0KSA9PiB7XG4gICAgICAgIGlmICghY2FydD8uaXRlbXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByZXZpb3VzSXRlbXMgPSB0aGlzLml0ZW1zIHx8IFtdO1xuICAgICAgICBjb25zdCBuZXh0SXRlbXMgPSB0aGlzLnRyYW5zZm9ybUl0ZW1zKGNhcnQuaXRlbXMpLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0l0ZW06IGFueSA9IHByZXZpb3VzSXRlbXMuZmluZChwcmV2ID0+IHByZXYuaXRlbV9pZCA9PSBpdGVtLml0ZW1faWQpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5wcmV2aW91c0l0ZW0sXG4gICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICBmYWlsZWQ6IHByZXZpb3VzSXRlbT8uZmFpbGVkLFxuICAgICAgICAgICAgICAgIGVycm9yOiBwcmV2aW91c0l0ZW0/LmVycm9yXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyhuZXh0SXRlbXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2FydEl0ZW1RdWFudGl0eSA9ICh2YXJpYW50X2lkLCBxdWFudGl0eSwgY29tbWVudHM/OiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRDb21tZW50cyA9IGNvbW1lbnRzICE9PSB1bmRlZmluZWQgPyAoY29tbWVudHMgPz8gJycpLnRyaW0oKSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IHRoaXMuaXRlbXMubWFwKGl0ID0+IHtcbiAgICAgICAgICAgIGlmIChpdC52YXJpYW50X2lkICE9PSB2YXJpYW50X2lkKSByZXR1cm4gaXQ7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkOiBhbnkgPSB7IC4uLml0LCBxdWFudGl0eTogTnVtYmVyKHF1YW50aXR5KSB9O1xuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRDb21tZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlZC5jb21tZW50cyA9IG5vcm1hbGl6ZWRDb21tZW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLml0ZW1zID0gbmV3SXRlbXM7XG4gICAgICAgIHRoaXMuY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuaXRlbXMpO1xuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XG4gICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0LXVwZGF0ZWQnLCB7IHF1YW50aXR5IH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwZW5kVG9DYXJ0ID0gKGNhcnQpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKGNhcnQpO1xuICAgICAgICB0aGlzLnN5bmNDYXJ0SXRlbXNGcm9tUmVzcG9uc2UoY2FydCk7XG4gICAgICAgIC8vICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0LWFkZGVkJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVDYXJ0SXRlbSA9IChjYXJ0LCBwcm9kdWN0LCB0b2FzdCA9IHRydWUpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKGNhcnQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5zeW5jQ2FydEl0ZW1zRnJvbVJlc3BvbnNlKGNhcnQpO1xuICAgICAgICB0b2FzdCAmJiB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG4gICAgICAgIHRvYXN0ICYmIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0LXJlbW92ZWQnKTtcbiAgICAgICAgLy8gdGhpcy5nb29nbGVBbmFseXRpY3MucmVtb3ZlRnJvbUNhcnQocHJvZHVjdCk7XG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3JlbW92ZV9mcm9tX2NhcnQnLCB7IC4uLnByb2R1Y3QsIGN1cnJlbmN5OiB0aGlzLmNvbnN0cy5jdXJyZW5jeS5jb2RlIH0pXG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZElmQWxscmVhZHlFeGlzdHMgPSAocHJvZHVjdCwgdmFyaWFudF9pZCwgcXVhbnRpdHlBZGQgPSAxLCBjb21tZW50cz86IHN0cmluZyB8IG51bGwpID0+XG4gICAgICAgIHRoaXMuaXRlbXMuZmluZCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLnByb2R1Y3QuaWQgPT0gcHJvZHVjdC5pZCAmJiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudF9pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIHRoaXMuZmluZEl0ZW0ocHJvZHVjdC5pZCkucXVhbnRpdHkgKyBxdWFudGl0eUFkZCwgY29tbWVudHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgIHByaXZhdGUgdXBkYXRlTG9jYWxDYXJ0ID0gKCkgPT4ge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2FydCcsIEpTT04uc3RyaW5naWZ5KHRoaXMuaXRlbXMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0Q2FydCA9IChuZXh0PykgPT4ge1xuICAgICAgICB0aGlzLml0ZW1zID0gW107XG4gICAgICAgIHRoaXMuY2FydFN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgdGhpcy51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhudWxsKTtcbiAgICAgICAgdGhpcy5jYXJ0X3Rva2VuID0gbnVsbDtcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQoW10pO1xuICAgICAgICB0aGlzLmNvdW50ID0gMDtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhcnQnLCBcIltdXCIpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2FydF90b2tlbicpO1xuICAgICAgICBuZXh0ICYmIG5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNhcnRPYmogPSAoY2FydCwgZW1pdEV2ZW50ID0gdHJ1ZSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICB0aGlzLmNhcnRTdWJqZWN0Lm5leHQoY2FydCk7XG4gICAgICAgIHRoaXMudXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMoY2FydD8uYmFsYW5jZUN1c3RvbWVyLCBjYXJ0Py50b3RhbHM/LnRvdGFsKTtcbiAgICAgICAgZW1pdEV2ZW50ICYmIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ2FkZF90b19jYXJ0JywgY2FydCk7XG4gICAgICAgIHRoaXMucHJvbW90aW9uc1N1YmplY3QubmV4dCh0aGlzLm9yZGVyVXRpbHMuZ2V0UHJvbW90aW9ucyhjYXJ0LCB0cnVlKSk7XG5cbiAgICAgICAgY2FydC5jb3Vwb25Db2RlXG4gICAgICAgICAgICA/IHRoaXMuZm9ybWF0Q291cG9uKGNhcnQpXG4gICAgICAgICAgICA6IHRoaXMuY291cG9uU3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB1cGRhdGVDYXJ0QWZ0ZXJQYXltZW50UmVzcG9uc2UgPSAoY2FydDogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGlmICghY2FydD8udG90YWxzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNJdGVtSW5Mb2NhbCA9IChpdGVtX2lkKSA9PiB0aGlzLml0ZW1zLnNvbWUoaXRlbSA9PiBpdGVtLml0ZW1faWQgPT0gaXRlbV9pZCk7XG5cbiAgICAvKipcbiAgICAgKiAgQHB1YmxpY1xuICAgICAqICBDQVJUIENSVURcbiAgICAgKi9cblxuICAgIGFkZFRvQ2FydCA9IChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkLCBjb21tZW50cz86IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiYWxhbmNlID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xuICAgICAgICBjb25zdCBhcHBseU1heE9yZGVycyA9IGJhbGFuY2U/LmFwcGx5TWF4T3JkZXJzID8/IGZhbHNlO1xuICAgICAgICBjb25zdCBtYXhPcmRlcnMgPSBiYWxhbmNlPy5tYXhPcmRlcnMgPz8gSW5maW5pdHk7XG5cbiAgICAgICAgaWYgKGFwcGx5TWF4T3JkZXJzICYmIChtYXhPcmRlcnMgPD0gMCB8fCBtYXhPcmRlcnMgPT09IG51bGwpKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbWF4LW9yZGVycy1yZWFjaGVkJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XG4gICAgICAgIGxldCBhZGRlZCA9IHRoaXMuYWRkSWZBbGxyZWFkeUV4aXN0cyhwcm9kdWN0LCB2YXJpYW50X2lkLCBxdWFudGl0eSwgY29tbWVudHMpO1xuICAgICAgICBpZiAoIWFkZGVkKSB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IHByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IHF1YW50aXR5LFxuICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGNvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5jb21tZW50cyA9IGNvbW1lbnRzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFuZWphciBsYSByZXNwdWVzdGEgSFRUUCBleGl0b3NhIChjw7NkaWdvIDIwMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kVG9DYXJ0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdC1hZGRlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFuZWphciBlbCBlcnJvciBkZSBsYSBsbGFtYWRhIEhUVFAgKGPDs2RpZ28gNTAwIHUgb3RybyBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIuc3RhdHVzID09PSA1MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDw7NkaWdvIGRlIGVycm9yIDUwMCAodGltZW91dClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ0hhIG9jdXJyaWRvIHVuIGVycm9yIGFsIGFncmVnYXIgYWwgY2Fycml0by4gVnVlbHZhIGEgaW50ZW50YXJsby4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RybyBjw7NkaWdvIGRlIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdFcnJvciBpbmVzcGVyYWRvLiBWdWVsdmEgYSBpbnRlbnRhcmxvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIGFkZFRvTG90ID0gKHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRfaWQsIGlkPywgb3JkZXJfaXRlbV9pZD8sIGxvdF9xdWFudGl0eT8sIHVuaXRfcHJpY2U/LCB1bml0X3RvdGFsPywgYWp1c3RlbWVudF90b3RhbD8sIHRvdGFsX2xvdD8sIGxvdF9zdGF0dXM/LCBkYXRlX3JlcXVlc3Q/LCBub3Rlcz8sIHNoaXBwaW5nX2FkZHJlc3NfaWQ/LCBzaGlwcGluZ19hZGRyZXNzX25hbWU/LCBhY3Rpb24/KSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYWRkZWQgPSAnJztcbiAgICAgICAgIWFkZGVkICYmIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkLCBpZDogaWQgfHwgJycsIG9yZGVyX2l0ZW1faWQ6IG9yZGVyX2l0ZW1faWQgfHwgJycsIGxvdF9xdWFudGl0eTogbG90X3F1YW50aXR5IHx8ICcnLCB1bml0X3ByaWNlOiB1bml0X3ByaWNlIHx8ICcnLCB1bml0X3RvdGFsOiB1bml0X3RvdGFsIHx8ICcnLCBhanVzdGVtZW50X3RvdGFsOiBhanVzdGVtZW50X3RvdGFsIHx8ICcnLCB0b3RhbF9sb3Q6IHRvdGFsX2xvdCB8fCAnJywgbG90X3N0YXR1czogbG90X3N0YXR1cyB8fCAnJywgZGF0ZV9yZXF1ZXN0OiBkYXRlX3JlcXVlc3QgfHwgJycsIG5vdGVzOiBub3RlcyB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19pZDogc2hpcHBpbmdfYWRkcmVzc19pZCB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19uYW1lOiBzaGlwcGluZ19hZGRyZXNzX25hbWUgfHwgJycsIGFjdGlvbjogYWN0aW9uIHx8ICduZXdsb3QnIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIHJlcyA9PiB0aGlzLmFwcGVuZFRvQ2FydChyZXMpLFxuICAgICAgICAgICAgICAgIGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVycilcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgYWRkVG9DYXJ0UHJvbWlzZSA9IGFzeW5jIChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkLCBjb21tZW50cz86IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xuICAgICAgICBsZXQgYWRkZWQgPSB0aGlzLmFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdCwgdmFyaWFudF9pZCwgcXVhbnRpdHksIGNvbW1lbnRzKTtcbiAgICAgICAgaWYgKCFhZGRlZCkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0ICh0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCwgcXVhbnRpdHk6IHF1YW50aXR5LCB2YXJpYW50Q29kZTogdmFyaWFudF9pZCB9KS50b1Byb21pc2UoKSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQuZXJyb3IpIHRoaXMuaGFuZGxlRXJyb3IocmVzdWx0LmVycm9yKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kVG9DYXJ0KHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSB9XG4gICAgfVxuXG5cbiAgICBhZGRBbGxUb0NhcnQgPSAoaXRlbXM6IGFueVtdKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IGl0ZW1zOiB0aGlzLm1lcmdlSXRlbXNBZGRBbGxUb0NhcnQoaXRlbXMpIH07XG5cbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRBbGxJdGVtc0FwaSgpLCBwYXJhbXMpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzLmNhcnQpICYmIHRoaXMudXBkYXRlQ2FydEl0ZW1zKHRoaXMudHJhbnNmb3JtSXRlbXMocmVzLmNhcnQuaXRlbXMpKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLmNhcnRfcmVzcG9uc2Uuc3RhdHVzID09ICdzdWNjZXNzJyAmJiB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdHMtYWRkZWQnKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkUmVwZWF0T3JkZXJUb0NhcnQoaXRlbXM6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNhcnRJdGVtc1N1YmplY3QudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ2NhcnQtbm90LWVtcHR5Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXRlbXNUb0FkZCA9IGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxuICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXG4gICAgICAgICAgICB2YXJpYW50Q29kZTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLmNvZGVcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGlmIChpdGVtc1RvQWRkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vLXByb2R1Y3RzLXRvLWFkZCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgaXRlbXM6IGl0ZW1zVG9BZGRcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcblxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEFsbEl0ZW1zQXBpKCksIHBhcmFtcylcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcblxuICAgICAgICAgICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHJlcy5lcnJvcj8udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJykgfHwgJ3Vua25vd25fZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdyhlcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXNSZXNwb25zZSA9IHJlcz8uaXRlbXNfcmVzcG9uc2UgfHwgW107XG4gICAgICAgICAgICAgICAgY29uc3QgY2FydEl0ZW1zID0gcmVzPy5jYXJ0Py5pdGVtcyB8fCBbXTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG91dE9mU3RvY2tJdGVtcyA9IGl0ZW1zUmVzcG9uc2UuZmlsdGVyKGl0ZW0gPT5cbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zdGF0dXMgPT09ICdmYWlsdXJlJyAmJlxuICAgICAgICAgICAgICAgICAgICBpdGVtLmVycm9ycy5zb21lKGVycm9yID0+IGVycm9yLmNvZGUgPT09ICdvdXRfb2Zfc3RvY2snKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2FydEl0ZW1zLmxlbmd0aCA9PT0gMCAmJiBvdXRPZlN0b2NrSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnYWxsLXByb2R1Y3RzLW91dC1vZi1zdG9jaycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG91dE9mU3RvY2tJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdzb21lLXByb2R1Y3RzLW91dC1vZi1zdG9jaycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjYXJ0SXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzLmNhcnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKGNhcnRJdGVtcykpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdHMtYWRkZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY2FydCddKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyZ2VJdGVtc0FkZEFsbFRvQ2FydCA9IChpdGVtczogYW55W10pID0+IHtcbiAgICAgICAgbGV0IHBhcmFtc01lcmdlID0gW11cbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgbGV0IGl0ZW1JbnRlcm5vID0gaXRlbXMuZmluZChpdGVtUGFyYW0gPT4gaXRlbVBhcmFtLnZhcmlhbnRDb2RlID09IGl0ZW0udmFyaWFudF9pZClcbiAgICAgICAgICAgIHBhcmFtc01lcmdlLnB1c2goXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogaXRlbS52YXJpYW50X2lkLFxuICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbUludGVybm8gJiYgaXRlbUludGVybm8ucXVhbnRpdHkgfHwgaXRlbS5xdWFudGl0eVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgfSlcblxuICAgICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcihpdGVtUGFyYW0gPT4gIXRoaXMuaXRlbXMuZmluZChpdGVtID0+IGl0ZW1QYXJhbS52YXJpYW50Q29kZSA9PSBpdGVtLnZhcmlhbnRfaWQpKVxuXG4gICAgICAgIHJldHVybiBbLi4uaXRlbXMsIC4uLnBhcmFtc01lcmdlXVxuICAgIH1cblxuICAgIHVwZGF0ZUl0ZW1RdWFudGl0eSA9IChpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHksIGNvbW1lbnRzPzogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZVF1YW50aXR5KGl0ZW0sIHF1YW50aXR5KSAmJiAodGhpcy52YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyhpdGVtLCBxdWFudGl0eSkpKSB7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcblxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZDogYW55ID0geyBxdWFudGl0eTogTnVtYmVyKHF1YW50aXR5KSB9O1xuICAgICAgICAgICAgaWYgKGNvbW1lbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGVhbmVkID0gKGNvbW1lbnRzID8/ICcnKS50cmltKCk7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5jb21tZW50cyA9IGNsZWFuZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIC5wdXQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbVF1YW50aXR5QXBpKHRoaXMuZmluZEl0ZW1CeUlkVmFyaWFudChpdGVtLnZhcmlhbnRfaWQpKSxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNDYXJ0SXRlbXNGcm9tUmVzcG9uc2UocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0LXVwZGF0ZWQnLCB7IHF1YW50aXR5IH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YWxpZGF0ZVF1YW50aXR5ID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSkgPT4ge1xuICAgICAgICBpZiAoKHRoaXMuZ2V0Q291bnRGcm9tSXRlbUluQ2FydChpdGVtLnByb2R1Y3RDb2RlKSArIHF1YW50aXR5KSA+IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tYXhpbXVtSXRlbXNRdWFudGl0eSkge1xuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ21heGltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWF4aW11bUl0ZW1zUXVhbnRpdHkgfSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmICgodGhpcy5nZXRDb3VudEZyb21JdGVtSW5DYXJ0KGl0ZW0ucHJvZHVjdENvZGUpICsgcXVhbnRpdHkpIDwgaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1pbmltdW1JdGVtc1F1YW50aXR5KSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbWluaW11bS1pdGVtcy1xdWFudGl0eScsIHsgcXVhbnRpdHk6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSB9KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5ICYmIGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5ID4gMCkge1xuICAgICAgICAgICAgaWYgKCh0aGlzLmdldENvdW50RnJvbUl0ZW1JbkNhcnQoaXRlbS5wcm9kdWN0Q29kZSkgKyBxdWFudGl0eSkgJSBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LWJlLW11bHRpcGxlJywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm11bHRpcGxlUXVhbnRpdHkgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyA9IChpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHk6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuICAgICAgICBjb25zdCBiYWxhbmNlID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xuXG4gICAgICAgIGlmICghYmFsYW5jZSB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gbnVsbCB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiYWxhbmNlLmFsbG93QW55UGF5bWVudE1ldGhvZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXRQcmljZSA9IGl0ZW0udG90YWwgLyBpdGVtLnF1YW50aXR5O1xuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUXVhbnRpdHkgPSBxdWFudGl0eSAtIGl0ZW0ucXVhbnRpdHk7XG5cbiAgICAgICAgaWYgKGFkZGl0aW9uYWxRdWFudGl0eSA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxDb3N0ID0gdW5pdFByaWNlICogYWRkaXRpb25hbFF1YW50aXR5O1xuXG4gICAgICAgIGlmIChhZGRpdGlvbmFsQ29zdCA+IGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cykge1xuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIHB1YmxpYyBoYXNTdWZmaWNpZW50Q3JlZGl0c0ZvckNhcnRUb3RhbCA9ICgpOiBib29sZWFuID0+IHtcbiAgICAgICAgY29uc3QgYmFsYW5jZSA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcblxuICAgICAgICBpZiAoIWJhbGFuY2UgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IG51bGwgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbCA9IHRoaXMuY2FydFN1YmplY3QudmFsdWU/LnRvdGFscz8udG90YWwgfHwgMDtcblxuICAgICAgICAvLyBTaSBOTyBwdWVkZSBleGNlZGVyIHNhbGRvIHkgZWwgdG90YWwgc3VwZXJhIGVsIGNyZWRpdG8sIGJsb3F1ZWFyXG4gICAgICAgIGlmICghYmFsYW5jZS5hbGxvd0V4Y2VlZEJhbGFuY2UgJiYgdG90YWwgPiBiYWxhbmNlLmNyZWRpdEFtb3VudCkge1xuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIGNhbGN1bGF0ZVN0b2NrQ291bnRzID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5wcm9kdWN0LnN0b2NrIDwgaXRlbS5xdWFudGl0eSArIHF1YW50aXR5KSB7XG4gICAgICAgICAgICAvLyB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGRlbGV0ZUNhcnRJdGVtID0gKGl0ZW0sIHRvYXN0ID0gdHJ1ZSkgPT4ge1xuICAgICAgICBsZXQgaWRfYnVzY2FkbyA9IHRoaXMuZmluZEl0ZW1CeUlkVmFyaWFudChpdGVtLnZhcmlhbnRfaWQpXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xuICAgICAgICAvLyAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLCBxdWFudGl0eTogMCwgdmFyaWFudENvZGU6IGl0ZW0udmFyaWFudF9pZCwgaWQ6ICcnLCBvcmRlcl9pdGVtX2lkOiBpdGVtLml0ZW1faWQsIGxvdF9xdWFudGl0eTogJycsIHVuaXRfcHJpY2U6ICcnLCB1bml0X3RvdGFsOiAnJywgYWp1c3RlbWVudF90b3RhbDogJycsIHRvdGFsX2xvdDogJycsIGxvdF9zdGF0dXM6ICcnLCBkYXRlX3JlcXVlc3Q6ICcnLCBub3RlczogICcnLCBzaGlwcGluZ19hZGRyZXNzX2lkOiAnJywgc2hpcHBpbmdfYWRkcmVzc19uYW1lOiAnJywgYWN0aW9uOiAgJ2RlbGV0ZW9yZGVyaXRlbSd9KVxuICAgICAgICAvLyAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgLy8gICAgICAgICAgICByZXMgPT4gdGhpcy5yZW1vdmVDYXJ0SXRlbShyZXMsIGl0ZW0sIHRvYXN0KSxcbiAgICAgICAgLy8gICAgICAgICAgICBlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXG4gICAgICAgIC8vICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZGVsZXRlKHRoaXMuZGVsZXRlSXRlbUFwaShpZF9idXNjYWRvKSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgcmVzID0+IHsgdGhpcy5yZW1vdmVDYXJ0SXRlbShyZXMsIGl0ZW0sIHRvYXN0KTsgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpOyB9LFxuICAgICAgICAgICAgZXJyID0+IHsgdGhpcy5oYW5kbGVFcnJvcihlcnIpOyB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7IH0sXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBjbGVhckNhcnQoKSB7XG4gICAgICAgIC8vc29sdWNpb24gcHJvdmlzYW9yaWFcbiAgICAgICAgbGV0IGl0ZW1zID0gWy4uLnRoaXMuaXRlbXNdXG4gICAgICAgIHdoaWxlIChpdGVtcyAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUNhcnRJdGVtKGl0ZW1zLnBvcCgpLCBmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICAvL3RoaXMucmVzZXRDYXJ0KHRoaXMuZ2V0Q2FydCk7XG4gICAgfVxuXG4gICAgY2xlYXJBbmRSZXNldENhcnQoKSB7XG4gICAgICAgIHRoaXMucmVzZXRDYXJ0KHRoaXMuZ2V0Q2FydCk7XG4gICAgfVxuXG4gICAgY2xlYXJBbmRSZXNldEN1c3RvbWVyQ2FydCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDbGVhcmluZyBhbmQgcmVzZXRpbmcuLi5cIilcbiAgICAgICAgdGhpcy5yZXNldENhcnQodGhpcy5nZXRDYXJ0QnlDdXN0b21lcilcbiAgICB9XG5cbiAgICBoYW5kbGVFcnJvciA9IChlcnJvcjogeyBlcnJvcjogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvci1wYXJhbScpO1xuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgZ2V0Q291bnRGcm9tSXRlbUluQ2FydCA9IChjb2RlVmFyaWFudCk6IG51bWJlciA9PiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gY29kZVZhcmlhbnQpPy5xdWFudGl0eSB8fCAwO1xuXG4gICAgZmluZEl0ZW1CeUlkVmFyaWFudCA9ICh2YXJpYW50X2lkKSA9PiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudF9pZCkuaXRlbV9pZFxuXG4gICAgZmluZEl0ZW0gPSAocHJvZHVjdF9pZCkgPT4gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5wcm9kdWN0LmlkID09IHByb2R1Y3RfaWQpO1xuXG4gICAgLyoqIERBVEEgRk9SIE9USEVSIFNFUlZJQ0VTICovXG4gICAgZ2V0Q2FydFRva2VuID0gKCkgPT4gdGhpcy5jYXJ0X3Rva2VuO1xuXG4gICAgZ2V0TG9jYWxlID0gKCkgPT4gdGhpcy5sb2NhbGU7XG5cbiAgICBnZXRUb3RhbEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRvdGFsKSk7XG5cbiAgICBnZXRQYXltZW50TWV0aG9kQWRqdXN0bWVudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+ID0+XG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy5wYXltZW50TWV0aG9kQWRqdXN0bWVudCA/PyBudWxsKSk7XG5cbiAgICBnZXRQYXltZW50TWV0aG9kQWRqdXN0bWVudExhYmVsID0gKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4gPT5cbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnBheW1lbnRNZXRob2RBZGp1c3RtZW50TGFiZWwgPz8gbnVsbCkpO1xuXG4gICAgLyoqIFRvdGFsIHBhcmEgY2Fycml0by9zaWRlYmFyLCBzaW4gZW52w61vIHBlcnNpc3RpZG8gbmkgcmVjYXJnb3MgZGUgY2hlY2tvdXQuICovXG4gICAgZ2V0Q2FydFRvdGFsQW1vdW50ID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PlxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IHRoaXMub3JkZXJVdGlscy5nZXRDYXJ0VG90YWxBbW91bnQoY2FydCkpKTtcblxuICAgIGdldENvdW50Q2FydEl0ZW1zID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PlxuICAgICAgICB0aGlzLmNhcnRJdGVtcy5waXBlKG1hcCgoY2FydEl0ZW1zKSA9PiBjYXJ0SXRlbXM/Lmxlbmd0aCkpO1xuXG4gICAgZ2V0VGF4ZXNBbW91bnQgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy50YXhlcyA+IDAgPyBjYXJ0Py50b3RhbHM/LnRheGVzIDogMCkpO1xuXG4gICAgZ2V0U3ViVG90YWxBbW91bnQgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gdGhpcy5vcmRlclV0aWxzLmdldFN1bW1hcnlTdWJ0b3RhbEFtb3VudChjYXJ0KSkpO1xuXG4gICAgZ2V0Q2FydFRheGVzQW1vdW50ID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PlxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IHRoaXMub3JkZXJVdGlscy5nZXRDYXJ0VGF4ZXNBbW91bnQoY2FydCkpKTtcblxuICAgIGdldENhcnRDbGllbnRUYXhlc0Ftb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiB0aGlzLm9yZGVyVXRpbHMuZ2V0Q2FydENsaWVudFRheGVzQW1vdW50KGNhcnQpKSk7XG5cbiAgICAvKipcbiAgICAgKiBEZXZ1ZWx2ZSBlbCBkZXNjdWVudG8gcXVlIGRlYmUgbW9zdHJhcnNlIGVuIGVsIHJlc3VtZW4gZGUgY29tcHJhLlxuICAgICAqXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBjb24gZWwgbW9udG8gZGUgcHJvbW9jaW9uZXMgZGUgb3JkZW4uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogdGhpcy5zdW1tYXJ5UHJvbW90aW9uQW1vdW50JCA9IHRoaXMuY2FydFNlcnZpY2UuZ2V0U3VtbWFyeVByb21vdGlvbkFtb3VudCgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBTaSBlbCBiYWNrZW5kIG51ZXZvIGluZm9ybWEgYHRvdGFscy5vcmRlckRpc2NvdW50YCwgc2UgdXNhIGVzZSB2YWxvci5cbiAgICAgKiBFbiBzdSBhdXNlbmNpYSwgcHJpb3JpemEgYHRvdGFscy5wcm9tb3Rpb25CcmVha2Rvd24ub3JkZXJQcm9tb3Rpb25zYCB5XG4gICAgICogbHVlZ28gaGFjZSBmYWxsYmFjayBhIGB0b3RhbHMucHJvbW90aW9uYCBwYXJhIG1hbnRlbmVyIGNvbXBhdGliaWxpZGFkLlxuICAgICAqL1xuICAgIGdldFN1bW1hcnlQcm9tb3Rpb25BbW91bnQgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gdGhpcy5nZXRDYXJ0U3VtbWFyeVByaWNlUHJlc2VudGF0aW9uKGNhcnQpLm9yZGVyRGlzY291bnQpKTtcblxuICAgIC8qKiBEZXNjdWVudG8gZXNwZWPDrWZpY28gZGVsIGN1cMOzbiwgc2kgZWwgYmFja2VuZCBsbyBpbmZvcm1hIHBvciBzZXBhcmFkby4gKi9cbiAgICBnZXRDb3Vwb25Qcm9tb3Rpb25BbW91bnQgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPiA9PlxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IHRoaXMuZ2V0Q2FydFN1bW1hcnlQcmljZVByZXNlbnRhdGlvbihjYXJ0KS5jb3Vwb25EaXNjb3VudCkpO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhIHNpIGV4aXN0ZSB1biBjdXDDs24gYXBsaWNhZG8gZW4gZWwgY2Fycml0byBhY3R1YWwuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIGJvb2xlYW5vIHBhcmEgY29udHJvbGFyIGxhIHZpc2liaWxpZGFkIGRlIGBRdWl0YXIgY3Vww7NuYC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogTm8gZGViZSBhdGFyc2UgYSBgZ2V0U3VtbWFyeVByb21vdGlvbkFtb3VudCgpYCwgcG9ycXVlIHVuIGN1cMOzbiBwdWVkZSBhZmVjdGFyXG4gICAgICogc29sbyBwcm9tb2Npb25lcyB1bml0YXJpYXMgeSBkZWphciBlbCBkZXNjdWVudG8gZGUgb3JkZW4gZW4gYDBgLlxuICAgICAqL1xuICAgIGhhc0FwcGxpZWRDb3Vwb24gPSAoKTogT2JzZXJ2YWJsZTxib29sZWFuPiA9PlxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IHRoaXMub3JkZXJVdGlscy5oYXNBcHBsaWVkQ291cG9uKGNhcnQpKSk7XG5cbiAgICB0b0RlY2ltYWwgPSAodG90YWwpID0+ICh0b3RhbCAtIE1hdGguZmxvb3IodG90YWwpID09IDApID8gdG90YWwgLyAxMDAgOiB0b3RhbFxuXG4gICAgZ2V0RGlzY291bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FydEl0ZW1zLnBpcGUobWFwKChwcm9kdWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgdG90YWwgPSB0aGlzLml0ZW1zLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICsgY3Vyci5wcm9kdWN0LnNhbGVwcmljZSAqIGN1cnIucXVhbnRpdHk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIGxldCBzdWJ0b3RhbCA9IHRoaXMuaXRlbXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgKyBjdXJyLnByb2R1Y3QucHJpY2UgKiBjdXJyLnF1YW50aXR5O1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICByZXR1cm4gc3VidG90YWwgLSB0b3RhbDtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9idGllbmUgZWwgcHJlY2lvIG5vcm1hbGl6YWRvIGRlIHVuIMOtdGVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gw410ZW0gZGUgY2Fycml0byBub3JtYWxpemFkby5cbiAgICAgKiBAcmV0dXJucyBPYmpldG8gYENhcnRJdGVtUHJpY2luZ2AgbGlzdG8gcGFyYSByZW5kZXJpemFyIHByZWNpbyBiYXNlLCB0YWNoYWRvIHkgZmluYWwuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcHJpY2luZyA9IHRoaXMuY2FydFNlcnZpY2UuZ2V0SXRlbVByaWNpbmcoaXRlbSk7XG4gICAgICogY29uc3Qgc2hvd1Rvb2x0aXAgPSBwcmljaW5nLmhhc1VuaXRQcm9tb3Rpb25zO1xuICAgICAqIGNvbnN0IGZpbmFsUHJpY2UgPSBwcmljaW5nLmZpbmFsUHJpY2U7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0SXRlbVByaWNpbmcgPSAoaXRlbTogQ2FydEl0ZW0pOiBDYXJ0SXRlbVByaWNpbmcgPT4gaXRlbT8ucHJpY2luZyB8fCB0aGlzLmJ1aWxkQ2FydEl0ZW1QcmljaW5nKGl0ZW0pO1xuXG4gICAgLyoqIFJlc3VlbHZlIGxhIHByZXNlbnRhY2nDs24gbnVldmEgZGUgdW5hIGzDrW5lYSB5IGNvbnNlcnZhIGVsIGZhbGxiYWNrIGxlZ2FjeS4gKi9cbiAgICBnZXRDYXJ0SXRlbVByaWNlUHJlc2VudGF0aW9uID0gKGl0ZW06IENhcnRJdGVtLCBjaGFubmVsPzogQ2hhbm5lbCk6IENhcnRJdGVtUHJpY2VQcmVzZW50YXRpb24gPT5cbiAgICAgICAgdGhpcy5wcmljZVByZXNlbnRhdGlvblNlcnZpY2UuZ2V0Q2FydEl0ZW1QcmljZVByZXNlbnRhdGlvbihcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICBjaGFubmVsIHx8IHRoaXMuY2hhbm5lbENvbmZpZyxcbiAgICAgICAgICAgIGl0ZW0/LmxpbmVQcmljaW5nID8gdW5kZWZpbmVkIDogdGhpcy5nZXRJdGVtUHJpY2luZyhpdGVtKVxuICAgICAgICApO1xuXG4gICAgLyoqIFJlc3VlbHZlIGVsIHJlc3VtZW4gdmlzaWJsZSB1c2FuZG8gbGluZVByaWNpbmcgc2luIGNvbnZlcnRpciBpbXBvcnRlcyBmaXNjYWxlcy4gKi9cbiAgICBnZXRDYXJ0U3VtbWFyeVByaWNlUHJlc2VudGF0aW9uID0gKFxuICAgICAgICBjYXJ0OiBhbnkgPSB0aGlzLmNhcnRTdWJqZWN0LnZhbHVlLFxuICAgICAgICBjaGFubmVsPzogQ2hhbm5lbCxcbiAgICAgICAgaW5jbHVkZVNoaXBwaW5nOiBib29sZWFuID0gZmFsc2VcbiAgICApOiBDYXJ0U3VtbWFyeVByaWNlUHJlc2VudGF0aW9uID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VJdGVtcyA9IEFycmF5LmlzQXJyYXkoY2FydD8uaXRlbXMpICYmIGNhcnQuaXRlbXMubGVuZ3RoID8gY2FydC5pdGVtcyA6IG51bGw7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBDYXJ0SXRlbVtdID0gKHJlc3BvbnNlSXRlbXMgfHwgKHRoaXMuY2FydEl0ZW1zU3ViamVjdC52YWx1ZSB8fCBbXSkpXG4gICAgICAgICAgICAubWFwKGl0ZW0gPT4gdGhpcy5ub3JtYWxpemVDYXJ0SXRlbVByaWNpbmcoaXRlbSkpO1xuICAgICAgICBjb25zdCBoYXNMaW5lUHJpY2luZyA9IGl0ZW1zLmxlbmd0aCA+IDAgJiYgaXRlbXMuZXZlcnkoaXRlbSA9PiAhIWl0ZW0/LmxpbmVQcmljaW5nKTtcbiAgICAgICAgY29uc3Qgc2hvd0dyb3NzID0gKGNoYW5uZWwgfHwgdGhpcy5jaGFubmVsQ29uZmlnKT8uc2hvd1ByaWNlV2l0aFRheGVzV2hpbGVCcm93c2luZyA9PT0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcHJpY2luZ0tleSA9IHNob3dHcm9zcyA/ICdncm9zcycgOiAnbmV0JztcbiAgICAgICAgY29uc3QgdGF4ZXMgPSB0aGlzLm9yZGVyVXRpbHMuZ2V0Q2FydFRheGVzQW1vdW50KGNhcnQpO1xuICAgICAgICBjb25zdCBjbGllbnRUYXhlcyA9IHRoaXMub3JkZXJVdGlscy5nZXRDYXJ0Q2xpZW50VGF4ZXNBbW91bnQoY2FydCk7XG4gICAgICAgIGNvbnN0IGxlZ2FjeVNoaXBwaW5nID0gaW5jbHVkZVNoaXBwaW5nID8gdGhpcy5vcmRlclV0aWxzLmdldFN1bW1hcnlTaGlwbWVudEFtb3VudChjYXJ0KSA6IG51bGw7XG4gICAgICAgIGNvbnN0IHNoaXBwaW5nUHJpY2luZyA9IHRoaXMuZ2V0VG90YWxzUHJpY2luZyhjYXJ0LCAnc2hpcHBpbmdfcHJpY2luZycsICdzaGlwcGluZ1ByaWNpbmcnKTtcbiAgICAgICAgY29uc3Qgc2hpcHBpbmcgPSBpbmNsdWRlU2hpcHBpbmdcbiAgICAgICAgICAgID8gKHNoaXBwaW5nUHJpY2luZyA/IHNoaXBwaW5nUHJpY2luZ1twcmljaW5nS2V5XSA6IGxlZ2FjeVNoaXBwaW5nKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBjb25zdCB0b3RhbCA9IGluY2x1ZGVTaGlwcGluZ1xuICAgICAgICAgICAgPyBOdW1iZXIoY2FydD8udG90YWxzPy50b3RhbCB8fCAwKVxuICAgICAgICAgICAgOiB0aGlzLm9yZGVyVXRpbHMuZ2V0Q2FydFRvdGFsQW1vdW50KGNhcnQpO1xuICAgICAgICBjb25zdCBvcmRlckRpc2NvdW50UHJpY2luZyA9IHRoaXMuZ2V0VG90YWxzUHJpY2luZyhjYXJ0LCAnb3JkZXJfZGlzY291bnRfcHJpY2luZycsICdvcmRlckRpc2NvdW50UHJpY2luZycpO1xuICAgICAgICBjb25zdCBjb3Vwb25EaXNjb3VudFByaWNpbmcgPSB0aGlzLmdldFRvdGFsc1ByaWNpbmcoY2FydCwgJ2NvdXBvbl9kaXNjb3VudF9wcmljaW5nJywgJ2NvdXBvbkRpc2NvdW50UHJpY2luZycpO1xuICAgICAgICBjb25zdCBjb3Vwb25EaXNjb3VudCA9IGNvdXBvbkRpc2NvdW50UHJpY2luZ1xuICAgICAgICAgICAgPyBjb3Vwb25EaXNjb3VudFByaWNpbmdbcHJpY2luZ0tleV1cbiAgICAgICAgICAgIDogdGhpcy5vcmRlclV0aWxzLmdldENvdXBvblByb21vdGlvbkFtb3VudChjYXJ0KTtcbiAgICAgICAgY29uc3Qgb3JkZXJEaXNjb3VudCA9IG9yZGVyRGlzY291bnRQcmljaW5nXG4gICAgICAgICAgICA/IG9yZGVyRGlzY291bnRQcmljaW5nW3ByaWNpbmdLZXldXG4gICAgICAgICAgICA6IHRoaXMub3JkZXJVdGlscy5nZXRPcmRlclByb21vdGlvbkFtb3VudFxuICAgICAgICAgICAgICAgID8gdGhpcy5vcmRlclV0aWxzLmdldE9yZGVyUHJvbW90aW9uQW1vdW50KGNhcnQpXG4gICAgICAgICAgICAgICAgOiB0aGlzLm9yZGVyVXRpbHMuZ2V0U3VtbWFyeVByb21vdGlvbkFtb3VudChjYXJ0KTtcblxuICAgICAgICBpZiAoaGFzTGluZVByaWNpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvZHVjdHNCZWZvcmVEaXNjb3VudHM6IGl0ZW1zLnJlZHVjZSgodG90YWwsIGl0ZW06IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKyBOdW1iZXIoaXRlbS5saW5lUHJpY2luZy51bml0W3ByaWNpbmdLZXldIHx8IDApICogTnVtYmVyKGl0ZW0ucXVhbnRpdHkgfHwgMCksIDApLFxuICAgICAgICAgICAgICAgIGxpbmVEaXNjb3VudHM6IGl0ZW1zLnJlZHVjZSgodG90YWwsIGl0ZW06IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKyBOdW1iZXIoaXRlbS5saW5lUHJpY2luZy5kaXNjb3VudFtwcmljaW5nS2V5XSB8fCAwKSwgMCksXG4gICAgICAgICAgICAgICAgc3VidG90YWw6IGl0ZW1zLnJlZHVjZSgodG90YWwsIGl0ZW06IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKyBOdW1iZXIoaXRlbS5saW5lUHJpY2luZy5zdWJ0b3RhbFtwcmljaW5nS2V5XSB8fCAwKSwgMCksXG4gICAgICAgICAgICAgICAgb3JkZXJEaXNjb3VudCxcbiAgICAgICAgICAgICAgICBjb3Vwb25EaXNjb3VudCxcbiAgICAgICAgICAgICAgICB0YXhlcyxcbiAgICAgICAgICAgICAgICBjbGllbnRUYXhlcyxcbiAgICAgICAgICAgICAgICBzaGlwcGluZyxcbiAgICAgICAgICAgICAgICB0b3RhbCxcbiAgICAgICAgICAgICAgICB0YXhlc0luY2x1ZGVkSW5Ub3RhbDogc2hvd0dyb3NzICYmIHRheGVzICE9PSAwLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ2xpbmVQcmljaW5nJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm9kdWN0c0JlZm9yZURpc2NvdW50czogMCxcbiAgICAgICAgICAgIGxpbmVEaXNjb3VudHM6IDAsXG4gICAgICAgICAgICBzdWJ0b3RhbDogdGhpcy5vcmRlclV0aWxzLmdldFN1bW1hcnlTdWJ0b3RhbEFtb3VudChjYXJ0KSxcbiAgICAgICAgICAgIG9yZGVyRGlzY291bnQsXG4gICAgICAgICAgICBjb3Vwb25EaXNjb3VudCxcbiAgICAgICAgICAgIHRheGVzLFxuICAgICAgICAgICAgY2xpZW50VGF4ZXMsXG4gICAgICAgICAgICBzaGlwcGluZyxcbiAgICAgICAgICAgIHRvdGFsLFxuICAgICAgICAgICAgdGF4ZXNJbmNsdWRlZEluVG90YWw6IGZhbHNlLFxuICAgICAgICAgICAgc291cmNlOiAnbGVnYWN5J1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvKiogTm9ybWFsaXphIHPDs2xvIGVsIGFsaWFzIHNlcmlhbGl6YWRvIGRlbCBjb250cmF0byBkZSBsw61uZWEuICovXG4gICAgcHJpdmF0ZSBub3JtYWxpemVDYXJ0SXRlbVByaWNpbmcgPSAoaXRlbTogYW55KTogQ2FydEl0ZW0gPT4gKHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgbGluZVByaWNpbmc6IGl0ZW0/LmxpbmVQcmljaW5nIHx8IGl0ZW0/LmxpbmVfcHJpY2luZ1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogTGVlIGVsIGNvbnRyYXRvIG51ZXZvIHNpbiBjb25mdW5kaXIgdW4gb2JqZXRvIHbDoWxpZG8gY29uIGZhbGxiYWNrIGxlZ2FjeSxcbiAgICAgKiBpbmNsdXNvIGN1YW5kbyB0b2RvcyBzdXMgaW1wb3J0ZXMgc29uIGNlcm8uXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRUb3RhbHNQcmljaW5nID0gKFxuICAgICAgICBjYXJ0OiBhbnksXG4gICAgICAgIHNuYWtlQ2FzZUtleToga2V5b2YgQ2FydFRvdGFsc1ByaWNpbmcsXG4gICAgICAgIGNhbWVsQ2FzZUtleToga2V5b2YgQ2FydFRvdGFsc1ByaWNpbmdcbiAgICApOiBDYXJ0VG90YWxQcmljaW5nVmFsdWUgfCBudWxsID0+IHtcbiAgICAgICAgY29uc3QgdG90YWxzID0gY2FydD8udG90YWxzIHx8IHt9O1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRvdGFsc1tzbmFrZUNhc2VLZXldID8/IHRvdGFsc1tjYW1lbENhc2VLZXldO1xuICAgICAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoIVt2YWx1ZS5uZXQsIHZhbHVlLnRheCwgdmFsdWUuZ3Jvc3NdLmV2ZXJ5KGFtb3VudCA9PiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKGFtb3VudCkpKSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5ldDogTnVtYmVyKHZhbHVlLm5ldCksXG4gICAgICAgICAgICB0YXg6IE51bWJlcih2YWx1ZS50YXgpLFxuICAgICAgICAgICAgZ3Jvc3M6IE51bWJlcih2YWx1ZS5ncm9zcylcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgYWRkQ291cG9uID0gYXN5bmMgKGNvZGUpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy5jb3Vwb25BcGkoKSwgeyBjb3Vwb246IGNvZGUgfSkudG9Qcm9taXNlKCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yIHx8IHJlc3VsdC5lcnJvcnMpIHJldHVybiB7IGVycm9yOiB0cnVlLCBtZXNzYWdlOiAnaW52YWxpZC1jb3Vwb24nIH07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzdWx0LCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnN5bmNDYXJ0SXRlbXNGcm9tUmVzcG9uc2UocmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSwgbWVzc2FnZTogJ29rJyB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgbWVzc2FnZTogJ2ludmFsaWQtY291cG9uJyB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlQ291cG9uID0gYXN5bmMgKCkgPT4gdGhpcy5jb25uZWN0aW9uLmRlbGV0ZSh0aGlzLmNvdXBvbkFwaSgpKS5waXBlKG1hcChyZXMgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuc3luY0NhcnRJdGVtc0Zyb21SZXNwb25zZShyZXMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KSkudG9Qcm9taXNlKCk7XG5cbiAgICBmb3JtYXRDb3Vwb24gPSAoY2FydCkgPT4ge1xuICAgICAgICBsZXQgY3VycmVudF9jb3Vwb24gPSB0aGlzLmNvdXBvblN1YmplY3QudmFsdWU7XG4gICAgICAgIGxldCBjb3Vwb246IENvdXBvbkkgPSB7IGNvZGU6IGNhcnQuY291cG9uQ29kZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoY2FydC5jYXJ0RGlzY291bnRzKVswXTtcbiAgICAgICAgICAgIGNvdXBvbiA9IHtcbiAgICAgICAgICAgICAgICAuLi5jb3Vwb24sXG4gICAgICAgICAgICAgICAgYW1vdW50OiAoY2FydC5jYXJ0RGlzY291bnRzICYmIGNhcnQuY2FydERpc2NvdW50c1trZXldLmFtb3VudC5jdXJyZW50KSB8fCAwLFxuICAgICAgICAgICAgICAgIG5hbWU6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0ubmFtZSkgfHwgJ25vLW5hbWUnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7IH1cbiAgICAgICAgKGNvdXBvbiAhPSBjdXJyZW50X2NvdXBvbikgJiYgdGhpcy5jb3Vwb25TdWJqZWN0Lm5leHQoY291cG9uKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VIYXZlVG9VcGRhdGUgPSAodmFsdWUpID0+IHRoaXMuaGF2ZV90b191cGRhdGUgPSB2YWx1ZTtcblxuICAgIHJlYWR5Rm9yQ2hlY2tvdXQgPSAoc3VjY2Vzc0NhbGxiYWNrPzogRnVuY3Rpb24sIGVycm9yQ2FsbGJhY2s/OiBGdW5jdGlvbik6IENhcnRBZmZvcmRhYmxlID0+IHtcbiAgICAgICAgbGV0IGNhcnQgPSB0aGlzLmNhcnRTdWJqZWN0LnZhbHVlO1xuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLmNhcnRJdGVtc1N1YmplY3QudmFsdWU7XG4gICAgICAgIGxldCByZXN1bHQ6IENhcnRBZmZvcmRhYmxlID0geyBvazogdHJ1ZSB9O1xuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoIDwgdGhpcy5jaGFubmVsQ29uZmlnLm1pbmltdW1RdWFudGl0eVB1cmNoYXNlSXRlbXMpIHtcbiAgICAgICAgICAgIHJlc3VsdC5vayA9IGZhbHNlOyByZXN1bHQucmVhc29ucy5wdXNoKHsgbWVzc2FnZTogJ25vdC1lbm91Z2h0LWl0ZW1zJyB9KVxuICAgICAgICB9XG4gICAgICAgIGlmIChjYXJ0LnRvdGFscy50b3RhbCA8IHRoaXMuY2hhbm5lbENvbmZpZy5taW5pbXVtUHVyY2hhc2VBbW91bnQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5vayA9IGZhbHNlOyByZXN1bHQucmVhc29ucy5wdXNoKHsgbWVzc2FnZTogJ25vdC1lbm91Z2h0LWFtb3VudCcgfSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrIHx8IGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJlc3VsdC5va1xuICAgICAgICAgICAgICAgID8gc3VjY2Vzc0NhbGxiYWNrICYmIHN1Y2Nlc3NDYWxsYmFjaygpXG4gICAgICAgICAgICAgICAgOiBlcnJvckNhbGxiYWNrICYmIGVycm9yQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHVwZGF0ZUl0ZW1zT25FcnJvciA9IChpdGVtc1dpdGhFcnJvcjogYW55W10sIGNvZGU6IHN0cmluZykgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtc1dpdGhFcnJvcik7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuaXRlbXMpO1xuICAgICAgICBsZXQgaXRlbXNVcGRhdGVkID0gdGhpcy5pdGVtcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICBsZXQgaXRlbVdpdGhFcnJvciA9IGl0ZW1zV2l0aEVycm9yLmZpbmQoZmFpbGVkSXRlbSA9PiBpdGVtLml0ZW1faWQgPT0gZmFpbGVkSXRlbS5pZCk7XG4gICAgICAgICAgICBpZiAoaXRlbVdpdGhFcnJvcikge1xuICAgICAgICAgICAgICAgIGl0ZW0uZmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpdGVtLmVycm9yID0gY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9KVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtc1VwZGF0ZWQpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyhpdGVtc1VwZGF0ZWQpO1xuICAgIH1cblxuICAgIGxvYWRDYXJ0QnlUb2tlbiA9IGFzeW5jICh0b2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuY2FydF90b2tlbiA9IHRva2VuXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldENhcnRCeVRva2VuKClcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBVVElMU1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtYSBsb3Mgw610ZW1zIGNydWRvcyBkZWwgYmFja2VuZCBhbCBjb250cmF0byBpbnRlcm5vIGBDYXJ0SXRlbWAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2VydmVyX2l0ZW0gUmVzcHVlc3RhIGBpdGVtc2AgZGVsIGVuZHBvaW50IGRlIGNhcnJpdG8uXG4gICAgICogQHJldHVybnMgQXJyZWdsbyBkZSDDrXRlbXMgbm9ybWFsaXphZG9zLCBjYWRhIHVubyBjb24gYHByaWNpbmdgIHByZWNvbXB1dGFkby5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogRXN0ZSBlcyBlbCBwdW50byBkb25kZSBlbCBjb3JlOlxuICAgICAqIC0gcHJlc2VydmEgYHVuaXRQcm9tb3Rpb25zYFxuICAgICAqIC0gYXJtYSBgcHJpY2luZ2BcbiAgICAgKiAtIG1hbnRpZW5lIGxhIGZvcm1hIGhpc3TDs3JpY2EgZGVsIGl0ZW0gY29uc3VtaWRvIHBvciBsb3MgdGVtcGxhdGVzXG4gICAgICovXG4gICAgdHJhbnNmb3JtSXRlbXMgPSAoc2VydmVyX2l0ZW0pID0+IHNlcnZlcl9pdGVtLm1hcChcbiAgICAgICAgaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtID0ge1xuICAgICAgICAgICAgICAgIHByb2R1Y3Q6IGl0ZW0ucHJvZHVjdCxcbiAgICAgICAgICAgICAgICB2YXJpYW50X2lkOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uY29kZSxcbiAgICAgICAgICAgICAgICBsb3Q6IGl0ZW0ub3JkZXJJdGVtTG90LFxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxuICAgICAgICAgICAgICAgIGNvbW1lbnRzOiBpdGVtLmNvbW1lbnRzIHx8ICcnLFxuICAgICAgICAgICAgICAgIGl0ZW1faWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgdG90YWw6IGl0ZW0udG90YWwsXG4gICAgICAgICAgICAgICAgdW5pdFByaWNlOiBpdGVtLnVuaXRQcmljZSA/PyBpdGVtLnVuaXRfcHJpY2UsXG4gICAgICAgICAgICAgICAgZGlzY291bnQ6IGl0ZW0uZGlzY291bnQsXG4gICAgICAgICAgICAgICAgc3VidG90YWw6IGl0ZW0uc3VidG90YWwsXG4gICAgICAgICAgICAgICAgdGF4VG90YWw6IGl0ZW0udGF4VG90YWwgPz8gaXRlbS50YXhfdG90YWwsXG4gICAgICAgICAgICAgICAgdW5pdFByb21vdGlvbnM6IEFycmF5LmlzQXJyYXkoaXRlbS51bml0UHJvbW90aW9ucylcbiAgICAgICAgICAgICAgICAgICAgPyBpdGVtLnVuaXRQcm9tb3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIDogKEFycmF5LmlzQXJyYXkoaXRlbS51bml0X3Byb21vdGlvbnMpID8gaXRlbS51bml0X3Byb21vdGlvbnMgOiBbXSksXG4gICAgICAgICAgICAgICAgbGluZVByaWNpbmc6IGl0ZW0ubGluZVByaWNpbmcgfHwgaXRlbS5saW5lX3ByaWNpbmcsXG4gICAgICAgICAgICAgICAgbGluZV9wcmljaW5nOiBpdGVtLmxpbmVfcHJpY2luZ1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbS5wcmljaW5nID0gdGhpcy5idWlsZENhcnRJdGVtUHJpY2luZyhpdGVtKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2FsZXByaWNlKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5wcmljZSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2FsZXByaWNlID4gMCA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zZWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2UpO1xuICAgICAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgaXRlbS5wcm9kdWN0LnByaWNlID0gaXRlbS50b3RhbCAvIGl0ZW0ucXVhbnRpdHkvLyA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zZWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2U7XG4gICAgICAgICAgICAvLyB9LCAxMDApO1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICApXG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1eWUgbGEgbm9ybWFsaXphY2nDs24gZGUgcHJlY2lvcyBwYXJhIHVuIMOtdGVtIGRlbCBjYXJyaXRvLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gw410ZW0gbm9ybWFsaXphZG8gZGVsIGNhcnJpdG8uXG4gICAgICogQHJldHVybnMgRXN0cnVjdHVyYSBgQ2FydEl0ZW1QcmljaW5nYCBjb24gcHJlY2lvIGJhc2UsIHRhY2hhZG8sIGZpbmFsIHkgZmxhZ3MgZGUgVUkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcHJpY2luZyA9IHRoaXMuYnVpbGRDYXJ0SXRlbVByaWNpbmcoaXRlbSk7XG4gICAgICogLy8gcHJpY2luZy5iYXNlUHJpY2UgPT4gdW5pdFByaWNlIGRlbCBiYWNrZW5kIG51ZXZvIG8gZmFsbGJhY2sgbGVnYWN5XG4gICAgICogLy8gcHJpY2luZy5maW5hbFByaWNlID0+IHVuaXRQcmljZSBkZWwgYmFja2VuZCBudWV2byBvIGPDoWxjdWxvIGxlZ2FjeVxuICAgICAqIC8vIHByaWNpbmcuZWZmZWN0aXZlRGlzY291bnRQZXJjZW50ID0+ICUgdG90YWwgY29udHJhIGVsIHByZWNpbyBkZSByZWZlcmVuY2lhXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHJpdmF0ZSBidWlsZENhcnRJdGVtUHJpY2luZyA9IChpdGVtOiBDYXJ0SXRlbSk6IENhcnRJdGVtUHJpY2luZyA9PiB7XG4gICAgICAgIGNvbnN0IHZhcmlhbnQgPSBpdGVtPy5wcm9kdWN0Py52YXJpYW50cz8uWzBdO1xuICAgICAgICBjb25zdCBjYXJ0QW5kU2lkZWJhclByaWNlcyA9IHZhcmlhbnQ/LmNhcnRBbmRTaWRlYmFyUHJpY2VzO1xuICAgICAgICAvLyBTaSBlbCBiYWNrZW5kIG51ZXZvIGluZm9ybWEgYGNhcnRBbmRTaWRlYmFyUHJpY2VzYCwgZXNlIGVzIGVsIHByZWNpbyBjb3JyZWN0b1xuICAgICAgICAvLyBwYXJhIGNhcnJpdG8vc2lkZWJhciBwb3JxdWUgZXhjbHV5ZSBpbXB1ZXN0b3MgZGUgb3JkZW4gcXVlIG5vIHNlIGxpc3RhbiBwb3Igw610ZW0uXG4gICAgICAgIC8vIFNpIG5vIGV4aXN0ZSwgc2UgbWFudGllbmUgZWwgZmFsbGJhY2sgaGlzdMOzcmljby5cbiAgICAgICAgY29uc3QgZXhwbGljaXRVbml0UHJpY2UgPSB0aGlzLnBhcnNlUHJpY2VWYWx1ZShpdGVtPy51bml0UHJpY2UpO1xuICAgICAgICBjb25zdCBoYXNFeHBsaWNpdFVuaXRQcmljZSA9IE51bWJlci5pc0Zpbml0ZShleHBsaWNpdFVuaXRQcmljZSk7XG4gICAgICAgIGNvbnN0IGJhc2VQcmljZSA9IGhhc0V4cGxpY2l0VW5pdFByaWNlXG4gICAgICAgICAgICA/IGV4cGxpY2l0VW5pdFByaWNlXG4gICAgICAgICAgICA6IHRoaXMucGFyc2VQcmljZVZhbHVlKFxuICAgICAgICAgICAgICAgIGNhcnRBbmRTaWRlYmFyUHJpY2VzPy5zYWxlcHJpY2VcbiAgICAgICAgICAgICAgICA/PyBjYXJ0QW5kU2lkZWJhclByaWNlcz8ucHJpY2VcbiAgICAgICAgICAgICAgICA/PyB2YXJpYW50Py5zYWxlcHJpY2VcbiAgICAgICAgICAgICAgICA/PyB2YXJpYW50Py5wcmljZVxuICAgICAgICAgICAgICAgID8/IGl0ZW0/LnByb2R1Y3Q/LnNhbGVwcmljZVxuICAgICAgICAgICAgICAgID8/IGl0ZW0/LnByb2R1Y3Q/LnByaWNlXG4gICAgICAgICAgICAgICAgPz8gMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc3RyaWtlUHJpY2VDYW5kaWRhdGUgPSB0aGlzLnBhcnNlUHJpY2VWYWx1ZShcbiAgICAgICAgICAgIGNhcnRBbmRTaWRlYmFyUHJpY2VzPy5wcmljZVxuICAgICAgICAgICAgPz8gdmFyaWFudD8ucHJpY2VcbiAgICAgICAgICAgID8/IGl0ZW0/LnByb2R1Y3Q/LnByaWNlXG4gICAgICAgICAgICA/PyAwXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRCYXNlUHJpY2UgPSBpc05hTihiYXNlUHJpY2UpID8gMCA6IGJhc2VQcmljZTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFN0cmlrZVByaWNlID0gaXNOYU4oc3RyaWtlUHJpY2VDYW5kaWRhdGUpID8gMCA6IHN0cmlrZVByaWNlQ2FuZGlkYXRlO1xuICAgICAgICBjb25zdCB1bml0UHJvbW90aW9uVG90YWwgPSBBcnJheS5pc0FycmF5KGl0ZW0/LnVuaXRQcm9tb3Rpb25zKVxuICAgICAgICAgICAgPyBpdGVtLnVuaXRQcm9tb3Rpb25zLnJlZHVjZSgodG90YWwsIHByb21vdGlvbikgPT4gdG90YWwgKyBOdW1iZXIocHJvbW90aW9uPy5hbW91bnQgfHwgMCksIDApXG4gICAgICAgICAgICA6IDA7XG4gICAgICAgIGNvbnN0IGhhc1N0cmlrZVByaWNlID0gbm9ybWFsaXplZFN0cmlrZVByaWNlID4gbm9ybWFsaXplZEJhc2VQcmljZSAmJiBub3JtYWxpemVkQmFzZVByaWNlID4gMDtcbiAgICAgICAgY29uc3QgaGFzVW5pdFByb21vdGlvbnMgPSBBcnJheS5pc0FycmF5KGl0ZW0/LnVuaXRQcm9tb3Rpb25zKSAmJiBpdGVtLnVuaXRQcm9tb3Rpb25zLmxlbmd0aCA+IDA7XG4gICAgICAgIGNvbnN0IHF1YW50aXR5ID0gTnVtYmVyKGl0ZW0/LnF1YW50aXR5IHx8IDApO1xuICAgICAgICBjb25zdCBmaW5hbFByaWNlID0gaGFzRXhwbGljaXRVbml0UHJpY2VcbiAgICAgICAgICAgID8gbm9ybWFsaXplZEJhc2VQcmljZVxuICAgICAgICAgICAgOiBoYXNVbml0UHJvbW90aW9ucyA/IG5vcm1hbGl6ZWRCYXNlUHJpY2UgKyB1bml0UHJvbW90aW9uVG90YWwgOiBub3JtYWxpemVkQmFzZVByaWNlO1xuICAgICAgICBjb25zdCBwcm9kdWN0RGlzY291bnQgPSB0aGlzLnBhcnNlUHJpY2VWYWx1ZShpdGVtPy5kaXNjb3VudCk7XG4gICAgICAgIGNvbnN0IGxlZ2FjeVByb2R1Y3REaXNjb3VudCA9IE51bWJlcihpdGVtPy5wcm9kdWN0Py5kaXNjb3VudCB8fCAwKTtcbiAgICAgICAgY29uc3QgZGlzY291bnRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHByb2R1Y3REaXNjb3VudCkgJiYgcHJvZHVjdERpc2NvdW50IDwgMCAmJiBub3JtYWxpemVkQmFzZVByaWNlID4gMCAmJiBxdWFudGl0eSA+IDBcbiAgICAgICAgICAgID8gTWF0aC5yb3VuZCgoTWF0aC5hYnMocHJvZHVjdERpc2NvdW50KSAvIChub3JtYWxpemVkQmFzZVByaWNlICogcXVhbnRpdHkpKSAqIDEwMClcbiAgICAgICAgICAgIDogIWlzTmFOKGxlZ2FjeVByb2R1Y3REaXNjb3VudCkgJiYgbGVnYWN5UHJvZHVjdERpc2NvdW50ID4gMFxuICAgICAgICAgICAgICAgID8gTWF0aC5yb3VuZChsZWdhY3lQcm9kdWN0RGlzY291bnQpXG4gICAgICAgICAgICAgICAgOiBoYXNTdHJpa2VQcmljZVxuICAgICAgICAgICAgICAgICAgICA/IE1hdGgucm91bmQoKChub3JtYWxpemVkU3RyaWtlUHJpY2UgLSBub3JtYWxpemVkQmFzZVByaWNlKSAvIG5vcm1hbGl6ZWRTdHJpa2VQcmljZSkgKiAxMDApXG4gICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlUmVmZXJlbmNlUHJpY2UgPSBoYXNTdHJpa2VQcmljZSA/IG5vcm1hbGl6ZWRTdHJpa2VQcmljZSA6IG5vcm1hbGl6ZWRCYXNlUHJpY2U7XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZURpc2NvdW50UGVyY2VudCA9IGVmZmVjdGl2ZVJlZmVyZW5jZVByaWNlID4gMCAmJiBmaW5hbFByaWNlID4gMCAmJiBlZmZlY3RpdmVSZWZlcmVuY2VQcmljZSA+IGZpbmFsUHJpY2VcbiAgICAgICAgICAgID8gTWF0aC5yb3VuZCgoKGVmZmVjdGl2ZVJlZmVyZW5jZVByaWNlIC0gZmluYWxQcmljZSkgLyBlZmZlY3RpdmVSZWZlcmVuY2VQcmljZSkgKiAxMDApXG4gICAgICAgICAgICA6IGRpc2NvdW50UGVyY2VudDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmFzZVByaWNlOiBub3JtYWxpemVkQmFzZVByaWNlLFxuICAgICAgICAgICAgc3RyaWtlUHJpY2U6IGhhc1N0cmlrZVByaWNlID8gbm9ybWFsaXplZFN0cmlrZVByaWNlIDogbnVsbCxcbiAgICAgICAgICAgIGZpbmFsUHJpY2UsXG4gICAgICAgICAgICB1bml0UHJvbW90aW9uVG90YWwsXG4gICAgICAgICAgICBoYXNTdHJpa2VQcmljZSxcbiAgICAgICAgICAgIGhhc1VuaXRQcm9tb3Rpb25zLFxuICAgICAgICAgICAgZGlzY291bnRQZXJjZW50LFxuICAgICAgICAgICAgZWZmZWN0aXZlRGlzY291bnRQZXJjZW50XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTm9ybWFsaXphIHZhbG9yZXMgZGUgcHJlY2lvIHByb3ZlbmllbnRlcyBkZWwgYmFja2VuZCBhIGBudW1iZXJgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIFZhbG9yIG51bcOpcmljbyBvIHN0cmluZyBjb24gZm9ybWF0byBsb2NhbCAoYDEyMC4wMDBgLCBgMTIwMDAwYCwgYDEyMDAwMC0xYCwgZXRjLikuXG4gICAgICogQHJldHVybnMgTsO6bWVybyBwYXJzZWFkbyBvIGBOYU5gIHNpIGVsIHZhbG9yIG5vIGVzIHV0aWxpemFibGUuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFNlIHVzYSBwYXJhIHNvcG9ydGFyIHJlc3B1ZXN0YXMgY29uIHNlcGFyYWRvcmVzIGRlIG1pbGVzLCBjb21hIGRlY2ltYWwgbyByYW5nb3MuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJzZVByaWNlVmFsdWUgPSAodmFsdWU6IG51bWJlciB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIgPT4ge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByYXcgPSB2YWx1ZS50b1N0cmluZygpLnRyaW0oKTtcbiAgICAgICAgaWYgKCFyYXcpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaXJzdFZhbHVlID0gcmF3LmluY2x1ZGVzKCctJykgPyByYXcuc3BsaXQoJy0nKVswXS50cmltKCkgOiByYXc7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmaXJzdFZhbHVlXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzL2csICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcLig/PVxcZHszfShcXER8JCkpL2csICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoJywnLCAnLicpO1xuXG4gICAgICAgIHJldHVybiBOdW1iZXIobm9ybWFsaXplZCk7XG4gICAgfVxuXG5cbiAgICBnZXRDcmVkaXRBbW91bnQgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPiA9PlxuICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QucGlwZShcbiAgICAgICAgICAgIG1hcCgoYmFsYW5jZUN1c3RvbWVyKSA9PiBiYWxhbmNlQ3VzdG9tZXI/LmNyZWRpdEFtb3VudCA/PyBudWxsKVxuICAgICAgICApO1xuXG4gICAgZ2V0Q2xpZW50VGF4ZXMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy50YXhlcyA+IDAgPyBjYXJ0Py50b3RhbHM/LmNsaWVudFRheGVzIDogMCkpO1xuXG4gICAgZ2V0UmVtYWluaW5nQ3JlZGl0cyA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cbiAgICAgICAgdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnBpcGUobWFwKChiYWxhbmNlQ3VzdG9tZXIpID0+IGJhbGFuY2VDdXN0b21lcj8ucmVtYWluaW5nQ3JlZGl0cykpO1xuXG4gICAgcHVibGljIHVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKGJhbGFuY2U6IGFueSwgdG90YWw6IG51bWJlciB8IG51bGwgPSBudWxsKSB7XG4gICAgICAgIGlmICghYmFsYW5jZSkge1xuICAgICAgICAgICAgdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbEFtb3VudCA9IHRvdGFsID8/IDA7XG5cbiAgICAgICAgY29uc3QgYmFsYW5jZURhdGEgPSB7XG4gICAgICAgICAgICBhbGxvd0FueVBheW1lbnRNZXRob2Q6IGJhbGFuY2UuYWxsb3dBbnlQYXltZW50TWV0aG9kLFxuICAgICAgICAgICAgYWxsb3dFeGNlZWRCYWxhbmNlOiBiYWxhbmNlLmFsbG93RXhjZWVkQmFsYW5jZSxcbiAgICAgICAgICAgIGNyZWRpdEFtb3VudDogYmFsYW5jZS5jcmVkaXRBbW91bnQsXG4gICAgICAgICAgICBzaG93TWF4OiBiYWxhbmNlLnNob3dNYXgsXG4gICAgICAgICAgICBzaG93UHJpY2U6IGJhbGFuY2Uuc2hvd1ByaWNlLFxuICAgICAgICAgICAgcmVtYWluaW5nQ3JlZGl0czpcbiAgICAgICAgICAgICAgICBiYWxhbmNlLmNyZWRpdEFtb3VudCAhPSBudWxsICYmIHRvdGFsQW1vdW50ICE9IG51bGwgJiYgYmFsYW5jZS5jcmVkaXRBbW91bnQgPj0gdG90YWxBbW91bnRcbiAgICAgICAgICAgICAgICAgICAgPyBiYWxhbmNlLmNyZWRpdEFtb3VudCAtIHRvdGFsQW1vdW50XG4gICAgICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgIGFwcGx5TWF4T3JkZXJzOiBiYWxhbmNlLmFwcGx5TWF4T3JkZXJzLFxuICAgICAgICAgICAgbWF4T3JkZXJzOiBiYWxhbmNlLm1heE9yZGVyc1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5uZXh0KGJhbGFuY2VEYXRhKTtcbiAgICB9XG5cbn1cbiJdfQ==
|