ng-easycommerce 0.0.637 → 0.0.639
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/bundles/ng-easycommerce.umd.js +33 -17
- 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/services/cart.service.js +6 -1
- package/esm2015/lib/services/products/product-detail.service.js +30 -18
- package/esm5/lib/services/cart.service.js +6 -1
- package/esm5/lib/services/products/product-detail.service.js +30 -18
- package/fesm2015/ng-easycommerce.js +34 -18
- package/fesm2015/ng-easycommerce.js.map +1 -1
- package/fesm5/ng-easycommerce.js +34 -18
- package/fesm5/ng-easycommerce.js.map +1 -1
- package/ng-easycommerce.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -14,6 +14,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
14
14
|
});
|
|
15
15
|
};
|
|
16
16
|
import { Injectable } from '@angular/core';
|
|
17
|
+
import { finalize } from 'rxjs/operators';
|
|
17
18
|
import { BehaviorSubject } from 'rxjs';
|
|
18
19
|
import { map } from 'rxjs/operators';
|
|
19
20
|
import { ConnectionService } from '../api/connection.service';
|
|
@@ -184,6 +185,9 @@ let CartService = class CartService {
|
|
|
184
185
|
*/
|
|
185
186
|
this.addToCart = (product, quantity, variant_id, comments) => {
|
|
186
187
|
var _a, _b, _c, _d;
|
|
188
|
+
if (this.requestInProcess.getValue()) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
187
191
|
const balance = this.balanceCustomerSubject.value;
|
|
188
192
|
const applyMaxOrders = (_b = (_a = balance) === null || _a === void 0 ? void 0 : _a.applyMaxOrders, (_b !== null && _b !== void 0 ? _b : false));
|
|
189
193
|
const maxOrders = (_d = (_c = balance) === null || _c === void 0 ? void 0 : _c.maxOrders, (_d !== null && _d !== void 0 ? _d : Infinity));
|
|
@@ -207,6 +211,7 @@ let CartService = class CartService {
|
|
|
207
211
|
payload.comments = comments;
|
|
208
212
|
}
|
|
209
213
|
this.connection.post(this.addItemApi(), payload)
|
|
214
|
+
.pipe(finalize(() => this.requestInProcess.next(false)))
|
|
210
215
|
.subscribe(res => {
|
|
211
216
|
// Manejar la respuesta HTTP exitosa (código 200)
|
|
212
217
|
this.appendToCart(res);
|
|
@@ -589,4 +594,4 @@ CartService = __decorate([
|
|
|
589
594
|
})
|
|
590
595
|
], CartService);
|
|
591
596
|
export { CartService };
|
|
592
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXRELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFLekMsSUFBYSxXQUFXLEdBQXhCLE1BQWEsV0FBVztJQWtEcEIsWUFBb0IsVUFBNkIsRUFBVSxhQUEyQixFQUFVLE1BQWlCLEVBQ3JHLFdBQXdCLEVBQVUsVUFBK0IsRUFBVSxnQkFBa0MsRUFDN0csb0JBQTBDLEVBQzFDLE1BQWM7UUFITixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNyRyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQXFCO1FB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QUksSUFBSSxXQUFXLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksV0FBVztnQkFDdEYsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsV0FBVztnQkFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDWCxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7WUFDdEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1NBQy9CLENBQUM7UUFFRixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FFSixDQUFBOztZQTdvQm1DLGlCQUFpQjtZQUF5QixZQUFZO1lBQWtCLFNBQVM7WUFDeEYsV0FBVztZQUFzQixtQkFBbUI7WUFBNEIsZ0JBQWdCO1lBQ3ZGLG9CQUFvQjtZQUNsQyxNQUFNOzs7QUFyRGpCLFdBQVc7SUFIdkIsVUFBVSxDQUFDO1FBQ1IsVUFBVSxFQUFFLE1BQU07S0FDckIsQ0FBQztHQUNXLFdBQVcsQ0ErckJ2QjtTQS9yQlksV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHJvZHVjdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcHJvZHVjdCc7XHJcbmltcG9ydCB7IENhcnRJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXJ0LWl0ZW0nO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaS9jb25uZWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi9jb3JlLmNvbnN0cyc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi91dGlscy90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ291cG9uSSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY291cG9uJztcclxuaW1wb3J0IHsgT3JkZXJVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uL3V0aWxzL29yZGVyLXV0aWwuc2VydmljZSc7XHJcbmltcG9ydCB7IENoZWNrb3V0RGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlY2tvdXQtZGF0YSc7XHJcbmltcG9ydCB7IENhcnRBZmZvcmRhYmxlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXJ0L2NhcnQtYWZmb3JkYWJsZSc7XHJcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uLy4uL3B1YmxpYy1hcGknO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXJ0U2VydmljZSB7XHJcbiAgICBwcml2YXRlIGNhcnRJdGVtc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxDYXJ0SXRlbVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xyXG4gICAgcHJpdmF0ZSBjb3Vwb25TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgICBwcml2YXRlIGNhcnRTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgICBwcml2YXRlIHJlcXVlc3RJblByb2Nlc3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuICAgIHByaXZhdGUgcHJvbW90aW9uc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxDaGVja291dERhdGFbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcclxuXHJcbiAgICBwcml2YXRlIGJhbGFuY2VDdXN0b21lclN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDx7XHJcbiAgICAgICAgYWxsb3dBbnlQYXltZW50TWV0aG9kPzogYm9vbGVhbjtcclxuICAgICAgICBhbGxvd0V4Y2VlZEJhbGFuY2U/OiBib29sZWFuO1xyXG4gICAgICAgIGNyZWRpdEFtb3VudD86IG51bWJlciB8IG51bGw7XHJcbiAgICAgICAgc2hvd01heD86IGJvb2xlYW47XHJcbiAgICAgICAgc2hvd1ByaWNlPzogYm9vbGVhbjtcclxuICAgICAgICByZW1haW5pbmdDcmVkaXRzPzogbnVtYmVyO1xyXG4gICAgICAgIGFwcGx5TWF4T3JkZXJzPzogYm9vbGVhbjtcclxuICAgICAgICBtYXhPcmRlcnM/OiBudW1iZXI7XHJcbiAgICB9IHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG5cclxuICAgIHByaXZhdGUgaXRlbXMgPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIGNvdW50OiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBsb2NhbGUgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSBsb2dnZWRfaW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaGF2ZV90b191cGRhdGUgPSB0cnVlO1xyXG4gICAgcHVibGljIGNoYW5uZWxDb25maWc6IGFueSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBjYXJ0X2Jhc2VVcmwgPSAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2FydHMnO1xyXG5cclxuICAgIHB1YmxpYyBjYXJ0SXRlbXNBcGkgPSAoKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBhZGRJdGVtQXBpID0gKCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRfdG9rZW4gKyAnL2l0ZW1zJyArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBhZGRBbGxJdGVtc0FwaSA9ICgpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9tdWx0aXBsZS1pdGVtcycgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgdXBkYXRlSXRlbVF1YW50aXR5QXBpID0gKGl0ZW1faWQpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9pdGVtcy8nICsgaXRlbV9pZCArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBkZWxldGVJdGVtQXBpID0gKGl0ZW1faWQpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9pdGVtcy8nICsgaXRlbV9pZCArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBjb3Vwb25BcGkgPSAoKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvY291cG9uJztcclxuICAgIHB1YmxpYyBhZGRyZXNzQm9va0FwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9hZGRyZXNzLWJvb2snO1xyXG4gICAgcHVibGljIHRheGVzQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NhcnRzL3RheCc7XHJcblxyXG4gICAgcHVibGljIGNhcnRfdG9rZW47XHJcbiAgICBwdWJsaWMgY2FydEl0ZW1zID0gdGhpcy5jYXJ0SXRlbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKGl0ZW1zID0+IHRoaXMuc3dpdGNoUHJpY2VJbkNhcnRJdGVtKGl0ZW1zKSkpXHJcbiAgICBwdWJsaWMgY291cG9uID0gdGhpcy5jb3Vwb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGxvYWRpbmcgPSB0aGlzLnJlcXVlc3RJblByb2Nlc3MuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgY2FydCA9IHRoaXMuY2FydFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgcHJvbW90aW9ucyA9IHRoaXMucHJvbW90aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgZGVsZXRpbmc6IEJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBiYWxhbmNlQ3VzdG9tZXIkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGFsbG93QW55UGF5bWVudE1ldGhvZCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0FueVBheW1lbnRNZXRob2QgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIGFsbG93RXhjZWVkQmFsYW5jZSQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0V4Y2VlZEJhbGFuY2UgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIGNyZWRpdEFtb3VudCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5jcmVkaXRBbW91bnQgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIHNob3dNYXgkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uc2hvd01heCA/PyBudWxsKSk7XHJcbiAgICBwdWJsaWMgc2hvd1ByaWNlJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LnNob3dQcmljZSA/PyBudWxsKSk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSwgcHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsIHByaXZhdGUgY29uc3RzOiBDb25zdGFudHMsXHJcbiAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHByaXZhdGUgb3JkZXJVdGlsczogT3JkZXJVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbm5lbENvbmZpZ1NlcnZpY2U6IENoYW5uZWxDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhcnQnKSkgfHwgW107XHJcbiAgICAgICAgdGhpcy5jYXJ0X3Rva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhcnRfdG9rZW4nKSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UubG9nZ2VkSW4uc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmdldENhcnQoKSk7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUocmVzID0+IHRoaXMuY2hhbm5lbENvbmZpZyA9IHJlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENhcnQyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcnRJdGVtc1N1YmplY3QudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWRkcmVzc0Jvb2sgPSBhc3luYyAoKSA9PlxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5hZGRyZXNzQm9va0FwaSgpKS5waXBlKG1hcChyZXMgPT4gcmVzPy5sZW5ndGggJiYgcmVzLm1hcChhZGRyZXMgPT4geyByZXR1cm4gYWRkcmVzICYmIHsgLi4uYWRkcmVzLCBzZWxlY3RlZDogYWRkcmVzLmRlZmF1bHQgfSB9KSB8fCBudWxsKSkudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgcHVibGljIGdldFRheGVzID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLnRheGVzQXBpKCksIHsgdG9rZW46IHRoaXMuY2FydF90b2tlbiB9KS5zdWJzY3JpYmUocmVzID0+IHJlcylcclxuXHJcbiAgICBwcml2YXRlIGdldENhcnQgPSBhc3luYyAoKSA9PlxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCksICgodGhpcy5jYXJ0X3Rva2VuICYmIHRoaXMuaXRlbXMubGVuZ3RoID49IDEpICYmIHsgdG9rZW46IHRoaXMuY2FydF90b2tlbiB9KSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXHJcbiAgICAgICAgKVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q2FydEJ5VG9rZW4gPSBhc3luYyAoKSA9PlxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCksICgodGhpcy5jYXJ0X3Rva2VuKSAmJiB7IHRva2VuOiB0aGlzLmNhcnRfdG9rZW4gfSkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKVxyXG4gICAgICAgIClcclxuXHJcbiAgICBwcml2YXRlIGdldENhcnRCeUN1c3RvbWVyID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmNhcnRJdGVtc0FwaSgpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHJlcyA9PiB0aGlzLmluaXRpYWxpemVDYXJ0KHJlcylcclxuICAgICAgICApXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAgQHByaXZhdGVcclxuICAgICAqICBDQVJUIENSVUQgU0VSVkVSJ1MgU1lOQ1JPTklaRURcclxuICAgICAqL1xyXG5cclxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUNhcnQgPSAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLmNhcnRfdG9rZW4gPSByZXNwb25zZS50b2tlblZhbHVlO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0X3Rva2VuJywgdGhpcy5jYXJ0X3Rva2VuKTtcclxuICAgICAgICB0aGlzLmxvY2FsZSA9IHJlc3BvbnNlLmxvY2FsZTtcclxuICAgICAgICAvKiBsZXQgbG9jYWxlRnJvbVN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTE9DQUxFJylcclxuICAgICAgICBjb25zb2xlLmxvZyhsb2NhbGVGcm9tU3RvcmFnZSlcclxuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZUZyb21TdG9yYWdlID8gbG9jYWxlRnJvbVN0b3JhZ2UgOiByZXNwb25zZS5sb2NhbGU7XHJcbiAgICAgICAgcmVzcG9uc2UubG9jYWxlID0gdGhpcy5sb2NhbGUgKi9cclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzcG9uc2UsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKHJlc3BvbnNlLml0ZW1zKSk7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3dpdGNoUHJpY2VJbkNhcnRJdGVtID0gKGl0ZW1zOiBDYXJ0SXRlbVtdKSA9PiB7XHJcbiAgICAgICAgLy9yZXR1cm4gaXRlbXM7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcChcclxuICAgICAgICAgICAgaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5wcm9kdWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wcm9kdWN0LnByaWNlID0gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RlcENhcnQgPSAocmVzKSA9PiB7XHJcbiAgICAgICAgcmVzLml0ZW1zLmxlbmd0aCA+IDAgJiYgcmVzLml0ZW1zLmZvckVhY2goXHJcbiAgICAgICAgICAgIGl0ZW0gPT4gIXRoaXMuaXNJdGVtSW5Mb2NhbChpdGVtLmlkKSAmJiB0aGlzLmRlbGV0ZUNhcnRJdGVtKGl0ZW0sIGZhbHNlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5hZGRBbGxUb0NhcnQoXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgaXRlbSA9PiAhcmVzLml0ZW1zLnNvbWUoZXh0ZXJuYWxfaXRlbSA9PiBleHRlcm5hbF9pdGVtLmlkID09IGl0ZW0uaXRlbV9pZClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ2FydEl0ZW1zID0gKGl0ZW1zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgIHRoaXMuY291bnQgPSBpdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDYXJ0SXRlbVF1YW50aXR5ID0gKHZhcmlhbnRfaWQsIHF1YW50aXR5KSA9PiB7XHJcbiAgICAgICAgbGV0IG5ld1F1YW50aXR5ID0gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRfaWQpLnF1YW50aXR5ID0gcXVhbnRpdHk7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtdXBkYXRlZCcsIHsgcXVhbnRpdHk6IG5ld1F1YW50aXR5IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXBwZW5kVG9DYXJ0ID0gKGNhcnQpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMudHJhbnNmb3JtSXRlbXMoY2FydC5pdGVtcyk7XHJcbiAgICAgICAgdGhpcy5jb3VudCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xyXG4gICAgICAgIC8vICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0LWFkZGVkJyk7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW1vdmVDYXJ0SXRlbSA9IChjYXJ0LCBwcm9kdWN0LCB0b2FzdCA9IHRydWUpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pdGVtX2lkID09IHByb2R1Y3QuaXRlbV9pZCksIDEpO1xyXG4gICAgICAgIHRoaXMuY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuaXRlbXMpO1xyXG4gICAgICAgIHRvYXN0ICYmIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0b2FzdCAmJiB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdC1yZW1vdmVkJyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuICAgICAgICAvLyB0aGlzLmdvb2dsZUFuYWx5dGljcy5yZW1vdmVGcm9tQ2FydChwcm9kdWN0KTtcclxuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdyZW1vdmVfZnJvbV9jYXJ0JywgeyAuLi5wcm9kdWN0LCBjdXJyZW5jeTogdGhpcy5jb25zdHMuY3VycmVuY3kuY29kZSB9KVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZElmQWxscmVhZHlFeGlzdHMgPSAocHJvZHVjdCwgdmFyaWFudF9pZCwgcXVhbnRpdHlBZGQgPSAxKSA9PlxyXG4gICAgICAgIHRoaXMuaXRlbXMuZmluZCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0LmlkICYmIGl0ZW0udmFyaWFudF9pZCA9PSB2YXJpYW50X2lkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtLCB0aGlzLmZpbmRJdGVtKHByb2R1Y3QuaWQpLnF1YW50aXR5ICsgcXVhbnRpdHlBZGQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlTG9jYWxDYXJ0ID0gKCkgPT4ge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0JywgSlNPTi5zdHJpbmdpZnkodGhpcy5pdGVtcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVzZXRDYXJ0ID0gKG5leHQ/KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuY2FydFN1YmplY3QubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKG51bGwpO1xyXG4gICAgICAgIHRoaXMuY2FydF90b2tlbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgICAgIHRoaXMuY291bnQgPSAwO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0JywgXCJbXVwiKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2FydF90b2tlbicpO1xyXG4gICAgICAgIG5leHQgJiYgbmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ2FydE9iaiA9IChjYXJ0LCBlbWl0RXZlbnQgPSB0cnVlKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJ0U3ViamVjdC5uZXh0KGNhcnQpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMoY2FydD8uYmFsYW5jZUN1c3RvbWVyLCBjYXJ0Py50b3RhbHM/LnRvdGFsKTtcclxuICAgICAgICBlbWl0RXZlbnQgJiYgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnYWRkX3RvX2NhcnQnLCBjYXJ0KTtcclxuICAgICAgICB0aGlzLnByb21vdGlvbnNTdWJqZWN0Lm5leHQodGhpcy5vcmRlclV0aWxzLmdldFByb21vdGlvbnMoY2FydCwgdHJ1ZSkpO1xyXG5cclxuICAgICAgICBjYXJ0LmNvdXBvbkNvZGVcclxuICAgICAgICAgICAgPyB0aGlzLmZvcm1hdENvdXBvbihjYXJ0KVxyXG4gICAgICAgICAgICA6IHRoaXMuY291cG9uU3ViamVjdC5uZXh0KG51bGwpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNJdGVtSW5Mb2NhbCA9IChpdGVtX2lkKSA9PiB0aGlzLml0ZW1zLnNvbWUoaXRlbSA9PiBpdGVtLml0ZW1faWQgPT0gaXRlbV9pZCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAgQHB1YmxpY1xyXG4gICAgICogIENBUlQgQ1JVRFxyXG4gICAgICovXHJcblxyXG4gICAgYWRkVG9DYXJ0ID0gKHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRfaWQsIGNvbW1lbnRzPzogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYmFsYW5jZSA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBjb25zdCBhcHBseU1heE9yZGVycyA9IGJhbGFuY2U/LmFwcGx5TWF4T3JkZXJzID8/IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IG1heE9yZGVycyA9IGJhbGFuY2U/Lm1heE9yZGVycyA/PyBJbmZpbml0eTtcclxuXHJcbiAgICAgICAgaWYgKGFwcGx5TWF4T3JkZXJzICYmIChtYXhPcmRlcnMgPD0gMCB8fCBtYXhPcmRlcnMgPT09IG51bGwpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtYXgtb3JkZXJzLXJlYWNoZWQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuICAgICAgICBsZXQgYWRkZWQgPSB0aGlzLmFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdCwgdmFyaWFudF9pZCwgcXVhbnRpdHkpO1xyXG4gICAgICAgIGlmICghYWRkZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IHByb2R1Y3QuaWQsXHJcbiAgICAgICAgICAgICAgICBxdWFudGl0eTogcXVhbnRpdHksXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogdmFyaWFudF9pZCxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb21tZW50cykge1xyXG4gICAgICAgICAgICAgICAgcGF5bG9hZC5jb21tZW50cyA9IGNvbW1lbnRzO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgcGF5bG9hZClcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFuZWphciBsYSByZXNwdWVzdGEgSFRUUCBleGl0b3NhIChjw7NkaWdvIDIwMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRUb0NhcnQocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtYWRkZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hbmVqYXIgZWwgZXJyb3IgZGUgbGEgbGxhbWFkYSBIVFRQIChjw7NkaWdvIDUwMCB1IG90cm8gZXJyb3IpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIuc3RhdHVzID09PSA1MDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEPDs2RpZ28gZGUgZXJyb3IgNTAwICh0aW1lb3V0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ0hhIG9jdXJyaWRvIHVuIGVycm9yIGFsIGFncmVnYXIgYWwgY2Fycml0by4gVnVlbHZhIGEgaW50ZW50YXJsby4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90cm8gY8OzZGlnbyBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ0Vycm9yIGluZXNwZXJhZG8uIFZ1ZWx2YSBhIGludGVudGFybG8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkVG9Mb3QgPSAocHJvZHVjdDogUHJvZHVjdCwgcXVhbnRpdHk6IG51bWJlciwgdmFyaWFudF9pZCwgaWQ/LCBvcmRlcl9pdGVtX2lkPywgbG90X3F1YW50aXR5PywgdW5pdF9wcmljZT8sIHVuaXRfdG90YWw/LCBhanVzdGVtZW50X3RvdGFsPywgdG90YWxfbG90PywgbG90X3N0YXR1cz8sIGRhdGVfcmVxdWVzdD8sIG5vdGVzPywgc2hpcHBpbmdfYWRkcmVzc19pZD8sIHNoaXBwaW5nX2FkZHJlc3NfbmFtZT8sIGFjdGlvbj8pID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBhZGRlZCA9ICcnO1xyXG4gICAgICAgICFhZGRlZCAmJiB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCwgcXVhbnRpdHk6IHF1YW50aXR5LCB2YXJpYW50Q29kZTogdmFyaWFudF9pZCwgaWQ6IGlkIHx8ICcnLCBvcmRlcl9pdGVtX2lkOiBvcmRlcl9pdGVtX2lkIHx8ICcnLCBsb3RfcXVhbnRpdHk6IGxvdF9xdWFudGl0eSB8fCAnJywgdW5pdF9wcmljZTogdW5pdF9wcmljZSB8fCAnJywgdW5pdF90b3RhbDogdW5pdF90b3RhbCB8fCAnJywgYWp1c3RlbWVudF90b3RhbDogYWp1c3RlbWVudF90b3RhbCB8fCAnJywgdG90YWxfbG90OiB0b3RhbF9sb3QgfHwgJycsIGxvdF9zdGF0dXM6IGxvdF9zdGF0dXMgfHwgJycsIGRhdGVfcmVxdWVzdDogZGF0ZV9yZXF1ZXN0IHx8ICcnLCBub3Rlczogbm90ZXMgfHwgJycsIHNoaXBwaW5nX2FkZHJlc3NfaWQ6IHNoaXBwaW5nX2FkZHJlc3NfaWQgfHwgJycsIHNoaXBwaW5nX2FkZHJlc3NfbmFtZTogc2hpcHBpbmdfYWRkcmVzc19uYW1lIHx8ICcnLCBhY3Rpb246IGFjdGlvbiB8fCAnbmV3bG90JyB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgcmVzID0+IHRoaXMuYXBwZW5kVG9DYXJ0KHJlcyksXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVG9DYXJ0UHJvbWlzZSA9IGFzeW5jIChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuICAgICAgICBsZXQgYWRkZWQgPSB0aGlzLmFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdCwgdmFyaWFudF9pZCwgcXVhbnRpdHkpO1xyXG4gICAgICAgIGlmICghYWRkZWQpIHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0ICh0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCwgcXVhbnRpdHk6IHF1YW50aXR5LCB2YXJpYW50Q29kZTogdmFyaWFudF9pZCB9KS50b1Byb21pc2UoKSk7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC5lcnJvcikgdGhpcy5oYW5kbGVFcnJvcihyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kVG9DYXJ0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvcjogZmFsc2UgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGVycm9yOiB0cnVlIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgYWRkQWxsVG9DYXJ0ID0gKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgaXRlbXM6IHRoaXMubWVyZ2VJdGVtc0FkZEFsbFRvQ2FydChpdGVtcykgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRBbGxJdGVtc0FwaSgpLCBwYXJhbXMpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKS50aGVuKFxyXG4gICAgICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzLmNhcnQpICYmIHRoaXMudXBkYXRlQ2FydEl0ZW1zKHRoaXMudHJhbnNmb3JtSXRlbXMocmVzLmNhcnQuaXRlbXMpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXMuY2FydF9yZXNwb25zZS5zdGF0dXMgPT0gJ3N1Y2Nlc3MnICYmIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0cy1hZGRlZCcpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFJlcGVhdE9yZGVyVG9DYXJ0KGl0ZW1zOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmNhcnRJdGVtc1N1YmplY3QudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnY2FydC1ub3QtZW1wdHknKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpdGVtc1RvQWRkID0gaXRlbXMubWFwKGl0ZW0gPT4gKHtcclxuICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcbiAgICAgICAgICAgIHZhcmlhbnRDb2RlOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uY29kZVxyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW1zVG9BZGQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCduby1wcm9kdWN0cy10by1hZGQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICAgICAgICBpdGVtczogaXRlbXNUb0FkZFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEFsbEl0ZW1zQXBpKCksIHBhcmFtcylcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSAnZmFpbHVyZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSByZXMuZXJyb3I/LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpIHx8ICd1bmtub3duX2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdyhlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtc1Jlc3BvbnNlID0gcmVzPy5pdGVtc19yZXNwb25zZSB8fCBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhcnRJdGVtcyA9IHJlcz8uY2FydD8uaXRlbXMgfHwgW107XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0T2ZTdG9ja0l0ZW1zID0gaXRlbXNSZXNwb25zZS5maWx0ZXIoaXRlbSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc3RhdHVzID09PSAnZmFpbHVyZScgJiZcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmVycm9ycy5zb21lKGVycm9yID0+IGVycm9yLmNvZGUgPT09ICdvdXRfb2Zfc3RvY2snKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2FydEl0ZW1zLmxlbmd0aCA9PT0gMCAmJiBvdXRPZlN0b2NrSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdhbGwtcHJvZHVjdHMtb3V0LW9mLXN0b2NrJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvdXRPZlN0b2NrSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdzb21lLXByb2R1Y3RzLW91dC1vZi1zdG9jaycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYXJ0SXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihyZXMuY2FydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0SXRlbXModGhpcy50cmFuc2Zvcm1JdGVtcyhjYXJ0SXRlbXMpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdHMtYWRkZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbWVyZ2VJdGVtc0FkZEFsbFRvQ2FydCA9IChpdGVtczogYW55W10pID0+IHtcclxuICAgICAgICBsZXQgcGFyYW1zTWVyZ2UgPSBbXVxyXG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgbGV0IGl0ZW1JbnRlcm5vID0gaXRlbXMuZmluZChpdGVtUGFyYW0gPT4gaXRlbVBhcmFtLnZhcmlhbnRDb2RlID09IGl0ZW0udmFyaWFudF9pZClcclxuICAgICAgICAgICAgcGFyYW1zTWVyZ2UucHVzaChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiBpdGVtLnZhcmlhbnRfaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW1JbnRlcm5vICYmIGl0ZW1JbnRlcm5vLnF1YW50aXR5IHx8IGl0ZW0ucXVhbnRpdHlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGl0ZW1zID0gaXRlbXMuZmlsdGVyKGl0ZW1QYXJhbSA9PiAhdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbVBhcmFtLnZhcmlhbnRDb2RlID09IGl0ZW0udmFyaWFudF9pZCkpXHJcblxyXG4gICAgICAgIHJldHVybiBbLi4uaXRlbXMsIC4uLnBhcmFtc01lcmdlXVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUl0ZW1RdWFudGl0eSA9IChpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZVF1YW50aXR5KGl0ZW0sIHF1YW50aXR5KSAmJiAodGhpcy52YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyhpdGVtLCBxdWFudGl0eSkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy51cGRhdGVJdGVtUXVhbnRpdHlBcGkodGhpcy5maW5kSXRlbUJ5SWRWYXJpYW50KGl0ZW0udmFyaWFudF9pZCkpLCB7ICdxdWFudGl0eSc6IE51bWJlcihxdWFudGl0eSkgfSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgcmVzID0+IHRoaXMudXBkYXRlQ2FydE9iaihyZXMpICYmIHRoaXMudXBkYXRlQ2FydEl0ZW1RdWFudGl0eShpdGVtLnZhcmlhbnRfaWQsIE51bWJlcihxdWFudGl0eSkpLFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICB2YWxpZGF0ZVF1YW50aXR5ID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSkgPT4ge1xyXG4gICAgICAgIGlmICgodGhpcy5nZXRDb3VudEZyb21JdGVtSW5DYXJ0KGl0ZW0ucHJvZHVjdENvZGUpICsgcXVhbnRpdHkpID4gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtYXhpbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5IH0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHRoaXMuZ2V0Q291bnRGcm9tSXRlbUluQ2FydChpdGVtLnByb2R1Y3RDb2RlKSArIHF1YW50aXR5KSA8IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbWluaW11bS1pdGVtcy1xdWFudGl0eScsIHsgcXVhbnRpdHk6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSB9KVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5ICYmIGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5ID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoKHRoaXMuZ2V0Q291bnRGcm9tSXRlbUluQ2FydChpdGVtLnByb2R1Y3RDb2RlKSArIHF1YW50aXR5KSAlIGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5ICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1iZS1tdWx0aXBsZScsIHsgcXVhbnRpdHk6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5IH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyA9IChpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHk6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IGJhbGFuY2UgPSB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICghYmFsYW5jZSB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gbnVsbCB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhbGFuY2UuYWxsb3dBbnlQYXltZW50TWV0aG9kKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHVuaXRQcmljZSA9IGl0ZW0udG90YWwgLyBpdGVtLnF1YW50aXR5O1xyXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxRdWFudGl0eSA9IHF1YW50aXR5IC0gaXRlbS5xdWFudGl0eTtcclxuXHJcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxRdWFudGl0eSA8PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbENvc3QgPSB1bml0UHJpY2UgKiBhZGRpdGlvbmFsUXVhbnRpdHk7XHJcblxyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsQ29zdCA+IGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cykge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbm90LWVub3VnaC1jcmVkaXRzJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgaGFzU3VmZmljaWVudENyZWRpdHNGb3JDYXJ0VG90YWwgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgYmFsYW5jZSA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCFiYWxhbmNlIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSBudWxsIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2FydFN1YmplY3QudmFsdWUudG90YWxzLnRvdGFsID4gYmFsYW5jZS5jcmVkaXRBbW91bnQpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgY2FsY3VsYXRlU3RvY2tDb3VudHMgPSAoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdC5zdG9jayA8IGl0ZW0ucXVhbnRpdHkgKyBxdWFudGl0eSkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUNhcnRJdGVtID0gKGl0ZW0sIHRvYXN0ID0gdHJ1ZSkgPT4ge1xyXG4gICAgICAgIGxldCBpZF9idXNjYWRvID0gdGhpcy5maW5kSXRlbUJ5SWRWYXJpYW50KGl0ZW0udmFyaWFudF9pZClcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuICAgICAgICAvLyAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLCBxdWFudGl0eTogMCwgdmFyaWFudENvZGU6IGl0ZW0udmFyaWFudF9pZCwgaWQ6ICcnLCBvcmRlcl9pdGVtX2lkOiBpdGVtLml0ZW1faWQsIGxvdF9xdWFudGl0eTogJycsIHVuaXRfcHJpY2U6ICcnLCB1bml0X3RvdGFsOiAnJywgYWp1c3RlbWVudF90b3RhbDogJycsIHRvdGFsX2xvdDogJycsIGxvdF9zdGF0dXM6ICcnLCBkYXRlX3JlcXVlc3Q6ICcnLCBub3RlczogICcnLCBzaGlwcGluZ19hZGRyZXNzX2lkOiAnJywgc2hpcHBpbmdfYWRkcmVzc19uYW1lOiAnJywgYWN0aW9uOiAgJ2RlbGV0ZW9yZGVyaXRlbSd9KVxyXG4gICAgICAgIC8vICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIC8vICAgICAgICAgICAgcmVzID0+IHRoaXMucmVtb3ZlQ2FydEl0ZW0ocmVzLCBpdGVtLCB0b2FzdCksXHJcbiAgICAgICAgLy8gICAgICAgICAgICBlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcbiAgICAgICAgLy8gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLmRlbGV0ZSh0aGlzLmRlbGV0ZUl0ZW1BcGkoaWRfYnVzY2FkbykpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHsgdGhpcy5yZW1vdmVDYXJ0SXRlbShyZXMsIGl0ZW0sIHRvYXN0KTsgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpOyB9LFxyXG4gICAgICAgICAgICBlcnIgPT4geyB0aGlzLmhhbmRsZUVycm9yKGVycik7IHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTsgfSxcclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJDYXJ0KCkge1xyXG4gICAgICAgIC8vc29sdWNpb24gcHJvdmlzYW9yaWFcclxuICAgICAgICBsZXQgaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICB3aGlsZSAoaXRlbXMgJiYgaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUNhcnRJdGVtKGl0ZW1zLnBvcCgpLCBmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgLy90aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQW5kUmVzZXRDYXJ0KCkge1xyXG4gICAgICAgIHRoaXMucmVzZXRDYXJ0KHRoaXMuZ2V0Q2FydCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJBbmRSZXNldEN1c3RvbWVyQ2FydCgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkNsZWFyaW5nIGFuZCByZXNldGluZy4uLlwiKVxyXG4gICAgICAgIHRoaXMucmVzZXRDYXJ0KHRoaXMuZ2V0Q2FydEJ5Q3VzdG9tZXIpXHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRXJyb3IgPSAoZXJyb3I6IHsgZXJyb3I6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvci1wYXJhbScpO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb3VudEZyb21JdGVtSW5DYXJ0ID0gKGNvZGVWYXJpYW50KTogbnVtYmVyID0+IHRoaXMuaXRlbXMuZmluZChpdGVtID0+IGl0ZW0udmFyaWFudF9pZCA9PSBjb2RlVmFyaWFudCk/LnF1YW50aXR5IHx8IDA7XHJcblxyXG4gICAgZmluZEl0ZW1CeUlkVmFyaWFudCA9ICh2YXJpYW50X2lkKSA9PiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudF9pZCkuaXRlbV9pZFxyXG5cclxuICAgIGZpbmRJdGVtID0gKHByb2R1Y3RfaWQpID0+IHRoaXMuaXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0X2lkKTtcclxuXHJcbiAgICAvKiogREFUQSBGT1IgT1RIRVIgU0VSVklDRVMgKi9cclxuICAgIGdldENhcnRUb2tlbiA9ICgpID0+IHRoaXMuY2FydF90b2tlbjtcclxuXHJcbiAgICBnZXRMb2NhbGUgPSAoKSA9PiB0aGlzLmxvY2FsZTtcclxuXHJcbiAgICBnZXRUb3RhbEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8udG90YWwpKTtcclxuXHJcbiAgICBnZXRDb3VudENhcnRJdGVtcyA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmNhcnRJdGVtcy5waXBlKG1hcCgoY2FydEl0ZW1zKSA9PiBjYXJ0SXRlbXM/Lmxlbmd0aCkpO1xyXG5cclxuICAgIGdldFRheGVzQW1vdW50ID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PlxyXG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy50YXhlcyA+IDAgPyBjYXJ0Py50b3RhbHM/LnRheGVzIDogMCkpO1xyXG5cclxuICAgIGdldFN1YlRvdGFsQW1vdW50ID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PlxyXG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy5zdWJ0b3RhbCkpO1xyXG5cclxuICAgIHRvRGVjaW1hbCA9ICh0b3RhbCkgPT4gKHRvdGFsIC0gTWF0aC5mbG9vcih0b3RhbCkgPT0gMCkgPyB0b3RhbCAvIDEwMCA6IHRvdGFsXHJcblxyXG4gICAgZ2V0RGlzY291bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXJ0SXRlbXMucGlwZShtYXAoKHByb2R1Y3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHRvdGFsID0gdGhpcy5pdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICsgY3Vyci5wcm9kdWN0LnNhbGVwcmljZSAqIGN1cnIucXVhbnRpdHk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICBsZXQgc3VidG90YWwgPSB0aGlzLml0ZW1zLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgKyBjdXJyLnByb2R1Y3QucHJpY2UgKiBjdXJyLnF1YW50aXR5O1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHN1YnRvdGFsIC0gdG90YWw7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZENvdXBvbiA9IGFzeW5jIChjb2RlKTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25uZWN0aW9uLnB1dCh0aGlzLmNvdXBvbkFwaSgpLCB7IGNvdXBvbjogY29kZSB9KS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5lcnJvciB8fCByZXN1bHQuZXJyb3JzKSByZXR1cm4geyBlcnJvcjogdHJ1ZSwgbWVzc2FnZTogJ2ludmFsaWQtY291cG9uJyB9O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzdWx0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSwgbWVzc2FnZTogJ29rJyB9O1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICdpbnZhbGlkLWNvdXBvbicgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ291cG9uID0gYXN5bmMgKCkgPT4gdGhpcy5jb25uZWN0aW9uLmRlbGV0ZSh0aGlzLmNvdXBvbkFwaSgpKS5waXBlKG1hcChyZXMgPT4gdGhpcy51cGRhdGVDYXJ0T2JqKHJlcywgZmFsc2UpKSkudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgZm9ybWF0Q291cG9uID0gKGNhcnQpID0+IHtcclxuICAgICAgICBsZXQgY3VycmVudF9jb3Vwb24gPSB0aGlzLmNvdXBvblN1YmplY3QudmFsdWU7XHJcbiAgICAgICAgbGV0IGNvdXBvbjogQ291cG9uSSA9IHsgY29kZTogY2FydC5jb3Vwb25Db2RlIH07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoY2FydC5jYXJ0RGlzY291bnRzKVswXTtcclxuICAgICAgICAgICAgY291cG9uID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uY291cG9uLFxyXG4gICAgICAgICAgICAgICAgYW1vdW50OiAoY2FydC5jYXJ0RGlzY291bnRzICYmIGNhcnQuY2FydERpc2NvdW50c1trZXldLmFtb3VudC5jdXJyZW50KSB8fCAwLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogKGNhcnQuY2FydERpc2NvdW50cyAmJiBjYXJ0LmNhcnREaXNjb3VudHNba2V5XS5uYW1lKSB8fCAnbm8tbmFtZSdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAoY291cG9uICE9IGN1cnJlbnRfY291cG9uKSAmJiB0aGlzLmNvdXBvblN1YmplY3QubmV4dChjb3Vwb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZUhhdmVUb1VwZGF0ZSA9ICh2YWx1ZSkgPT4gdGhpcy5oYXZlX3RvX3VwZGF0ZSA9IHZhbHVlO1xyXG5cclxuICAgIHJlYWR5Rm9yQ2hlY2tvdXQgPSAoc3VjY2Vzc0NhbGxiYWNrPzogRnVuY3Rpb24sIGVycm9yQ2FsbGJhY2s/OiBGdW5jdGlvbik6IENhcnRBZmZvcmRhYmxlID0+IHtcclxuICAgICAgICBsZXQgY2FydCA9IHRoaXMuY2FydFN1YmplY3QudmFsdWU7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy5jYXJ0SXRlbXNTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCByZXN1bHQ6IENhcnRBZmZvcmRhYmxlID0geyBvazogdHJ1ZSB9O1xyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPCB0aGlzLmNoYW5uZWxDb25maWcubWluaW11bVF1YW50aXR5UHVyY2hhc2VJdGVtcykge1xyXG4gICAgICAgICAgICByZXN1bHQub2sgPSBmYWxzZTsgcmVzdWx0LnJlYXNvbnMucHVzaCh7IG1lc3NhZ2U6ICdub3QtZW5vdWdodC1pdGVtcycgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcnQudG90YWxzLnRvdGFsIDwgdGhpcy5jaGFubmVsQ29uZmlnLm1pbmltdW1QdXJjaGFzZUFtb3VudCkge1xyXG4gICAgICAgICAgICByZXN1bHQub2sgPSBmYWxzZTsgcmVzdWx0LnJlYXNvbnMucHVzaCh7IG1lc3NhZ2U6ICdub3QtZW5vdWdodC1hbW91bnQnIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2sgfHwgZXJyb3JDYWxsYmFjaykge1xyXG4gICAgICAgICAgICByZXN1bHQub2tcclxuICAgICAgICAgICAgICAgID8gc3VjY2Vzc0NhbGxiYWNrICYmIHN1Y2Nlc3NDYWxsYmFjaygpXHJcbiAgICAgICAgICAgICAgICA6IGVycm9yQ2FsbGJhY2sgJiYgZXJyb3JDYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUl0ZW1zT25FcnJvciA9IChpdGVtc1dpdGhFcnJvcjogYW55W10sIGNvZGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW1zV2l0aEVycm9yKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLml0ZW1zKTtcclxuICAgICAgICBsZXQgaXRlbXNVcGRhdGVkID0gdGhpcy5pdGVtcy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtV2l0aEVycm9yID0gaXRlbXNXaXRoRXJyb3IuZmluZChmYWlsZWRJdGVtID0+IGl0ZW0uaXRlbV9pZCA9PSBmYWlsZWRJdGVtLmlkKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1XaXRoRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uZmFpbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBjb2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coaXRlbXNVcGRhdGVkKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyhpdGVtc1VwZGF0ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRDYXJ0QnlUb2tlbiA9IGFzeW5jICh0b2tlbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJ0X3Rva2VuID0gdG9rZW5cclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRDYXJ0QnlUb2tlbigpXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIFVUSUxTXHJcbiAgICAgKi9cclxuXHJcbiAgICB0cmFuc2Zvcm1JdGVtcyA9IChzZXJ2ZXJfaXRlbSkgPT4gc2VydmVyX2l0ZW0ubWFwKFxyXG4gICAgICAgIGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgcHJvZHVjdDogaXRlbS5wcm9kdWN0LFxyXG4gICAgICAgICAgICAgICAgdmFyaWFudF9pZDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLmNvZGUsXHJcbiAgICAgICAgICAgICAgICBsb3Q6IGl0ZW0ub3JkZXJJdGVtTG90LFxyXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcbiAgICAgICAgICAgICAgICBjb21tZW50czogaXRlbS5jb21tZW50cyB8fCAnJyxcclxuICAgICAgICAgICAgICAgIGl0ZW1faWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICB0b3RhbDogaXRlbS50b3RhbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2UpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2FsZXByaWNlID4gMCA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zZWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2UpO1xyXG4gICAgICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgLy8gICAgIGl0ZW0ucHJvZHVjdC5wcmljZSA9IGl0ZW0udG90YWwgLyBpdGVtLnF1YW50aXR5Ly8gPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2VsZXByaWNlIDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnByaWNlO1xyXG4gICAgICAgICAgICAvLyB9LCAxMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICApXHJcblxyXG5cclxuICAgIGdldENyZWRpdEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+ID0+XHJcbiAgICAgICAgdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoYmFsYW5jZUN1c3RvbWVyKSA9PiBiYWxhbmNlQ3VzdG9tZXI/LmNyZWRpdEFtb3VudCA/PyBudWxsKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgZ2V0Q2xpZW50VGF4ZXMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRheGVzID4gMCA/IGNhcnQ/LnRvdGFscz8uY2xpZW50VGF4ZXMgOiAwKSk7XHJcblxyXG4gICAgZ2V0UmVtYWluaW5nQ3JlZGl0cyA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QucGlwZShtYXAoKGJhbGFuY2VDdXN0b21lcikgPT4gYmFsYW5jZUN1c3RvbWVyPy5yZW1haW5pbmdDcmVkaXRzKSk7XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKGJhbGFuY2U6IGFueSwgdG90YWw6IG51bWJlciB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCFiYWxhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0b3RhbEFtb3VudCA9IHRvdGFsID8/IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IGJhbGFuY2VEYXRhID0ge1xyXG4gICAgICAgICAgICBhbGxvd0FueVBheW1lbnRNZXRob2Q6IGJhbGFuY2UuYWxsb3dBbnlQYXltZW50TWV0aG9kLFxyXG4gICAgICAgICAgICBhbGxvd0V4Y2VlZEJhbGFuY2U6IGJhbGFuY2UuYWxsb3dFeGNlZWRCYWxhbmNlLFxyXG4gICAgICAgICAgICBjcmVkaXRBbW91bnQ6IGJhbGFuY2UuY3JlZGl0QW1vdW50LFxyXG4gICAgICAgICAgICBzaG93TWF4OiBiYWxhbmNlLnNob3dNYXgsXHJcbiAgICAgICAgICAgIHNob3dQcmljZTogYmFsYW5jZS5zaG93UHJpY2UsXHJcbiAgICAgICAgICAgIHJlbWFpbmluZ0NyZWRpdHM6XHJcbiAgICAgICAgICAgICAgICBiYWxhbmNlLmNyZWRpdEFtb3VudCAhPSBudWxsICYmIHRvdGFsQW1vdW50ICE9IG51bGwgJiYgYmFsYW5jZS5jcmVkaXRBbW91bnQgPj0gdG90YWxBbW91bnRcclxuICAgICAgICAgICAgICAgICAgICA/IGJhbGFuY2UuY3JlZGl0QW1vdW50IC0gdG90YWxBbW91bnRcclxuICAgICAgICAgICAgICAgICAgICA6IDAsXHJcbiAgICAgICAgICAgIGFwcGx5TWF4T3JkZXJzOiBiYWxhbmNlLmFwcGx5TWF4T3JkZXJzLFxyXG4gICAgICAgICAgICBtYXhPcmRlcnM6IGJhbGFuY2UubWF4T3JkZXJzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0Lm5leHQoYmFsYW5jZURhdGEpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
|
|
597
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcxQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBS3pDLElBQWEsV0FBVyxHQUF4QixNQUFhLFdBQVc7SUFrRHBCLFlBQW9CLFVBQTZCLEVBQVUsYUFBMkIsRUFBVSxNQUFpQixFQUNyRyxXQUF3QixFQUFVLFVBQStCLEVBQVUsZ0JBQWtDLEVBQzdHLG9CQUEwQyxFQUMxQyxNQUFjO1FBSE4sZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDckcsZ0JBQVcs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Q2hCLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxxQkFBcUI7WUFDcEQsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLGtCQUFrQjtZQUM5QyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7WUFDbEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixnQkFBZ0IsRUFDWixPQUFPLENBQUMsWUFBWSxJQUFJLElBQUksSUFBSSxXQUFXLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksV0FBVztnQkFDdEYsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsV0FBVztnQkFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDWCxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7WUFDdEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1NBQy9CLENBQUM7UUFFRixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FFSixDQUFBOztZQW5wQm1DLGlCQUFpQjtZQUF5QixZQUFZO1lBQWtCLFNBQVM7WUFDeEYsV0FBVztZQUFzQixtQkFBbUI7WUFBNEIsZ0JBQWdCO1lBQ3ZGLG9CQUFvQjtZQUNsQyxNQUFNOzs7QUFyRGpCLFdBQVc7SUFIdkIsVUFBVSxDQUFDO1FBQ1IsVUFBVSxFQUFFLE1BQU07S0FDckIsQ0FBQztHQUNXLFdBQVcsQ0Fxc0J2QjtTQXJzQlksV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFByb2R1Y3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3Byb2R1Y3QnO1xyXG5pbXBvcnQgeyBDYXJ0SXRlbSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FydC1pdGVtJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hcGkvY29ubmVjdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29yZS5jb25zdHMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IENvdXBvbkkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvdXBvbic7XHJcbmltcG9ydCB7IE9yZGVyVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9vcmRlci11dGlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGVja291dERhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWNrb3V0LWRhdGEnO1xyXG5pbXBvcnQgeyBDYXJ0QWZmb3JkYWJsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FydC9jYXJ0LWFmZm9yZGFibGUnO1xyXG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9wdWJsaWMtYXBpJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FydFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBjYXJ0SXRlbXNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Q2FydEl0ZW1bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcclxuICAgIHByaXZhdGUgY291cG9uU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG4gICAgcHJpdmF0ZSBjYXJ0U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG4gICAgcHJpdmF0ZSByZXF1ZXN0SW5Qcm9jZXNzID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgICBwcml2YXRlIHByb21vdGlvbnNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Q2hlY2tvdXREYXRhW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XHJcblxyXG4gICAgcHJpdmF0ZSBiYWxhbmNlQ3VzdG9tZXJTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8e1xyXG4gICAgICAgIGFsbG93QW55UGF5bWVudE1ldGhvZD86IGJvb2xlYW47XHJcbiAgICAgICAgYWxsb3dFeGNlZWRCYWxhbmNlPzogYm9vbGVhbjtcclxuICAgICAgICBjcmVkaXRBbW91bnQ/OiBudW1iZXIgfCBudWxsO1xyXG4gICAgICAgIHNob3dNYXg/OiBib29sZWFuO1xyXG4gICAgICAgIHNob3dQcmljZT86IGJvb2xlYW47XHJcbiAgICAgICAgcmVtYWluaW5nQ3JlZGl0cz86IG51bWJlcjtcclxuICAgICAgICBhcHBseU1heE9yZGVycz86IGJvb2xlYW47XHJcbiAgICAgICAgbWF4T3JkZXJzPzogbnVtYmVyO1xyXG4gICAgfSB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuXHJcbiAgICBwcml2YXRlIGl0ZW1zID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBjb3VudDogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgbG9jYWxlID0gXCJcIjtcclxuICAgIHByaXZhdGUgbG9nZ2VkX2luID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGhhdmVfdG9fdXBkYXRlID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBjaGFubmVsQ29uZmlnOiBhbnkgPSB7fTtcclxuICAgIHByaXZhdGUgY2FydF9iYXNlVXJsID0gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NhcnRzJztcclxuXHJcbiAgICBwdWJsaWMgY2FydEl0ZW1zQXBpID0gKCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgYWRkSXRlbUFwaSA9ICgpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9pdGVtcycgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgYWRkQWxsSXRlbXNBcGkgPSAoKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvbXVsdGlwbGUtaXRlbXMnICsgJz9sb2NhbGU9JyArIHRoaXMuY29uc3RzLmdldExvY2FsZSgpO1xyXG4gICAgcHVibGljIHVwZGF0ZUl0ZW1RdWFudGl0eUFwaSA9IChpdGVtX2lkKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvaXRlbXMvJyArIGl0ZW1faWQgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgZGVsZXRlSXRlbUFwaSA9IChpdGVtX2lkKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvaXRlbXMvJyArIGl0ZW1faWQgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgY291cG9uQXBpID0gKCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRfdG9rZW4gKyAnL2NvdXBvbic7XHJcbiAgICBwdWJsaWMgYWRkcmVzc0Jvb2tBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvYWRkcmVzcy1ib29rJztcclxuICAgIHB1YmxpYyB0YXhlc0FwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9jYXJ0cy90YXgnO1xyXG5cclxuICAgIHB1YmxpYyBjYXJ0X3Rva2VuO1xyXG4gICAgcHVibGljIGNhcnRJdGVtcyA9IHRoaXMuY2FydEl0ZW1zU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKG1hcChpdGVtcyA9PiB0aGlzLnN3aXRjaFByaWNlSW5DYXJ0SXRlbShpdGVtcykpKVxyXG4gICAgcHVibGljIGNvdXBvbiA9IHRoaXMuY291cG9uU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBsb2FkaW5nID0gdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGNhcnQgPSB0aGlzLmNhcnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIHByb21vdGlvbnMgPSB0aGlzLnByb21vdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGRlbGV0aW5nOiBCb29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgYmFsYW5jZUN1c3RvbWVyJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBhbGxvd0FueVBheW1lbnRNZXRob2QkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uYWxsb3dBbnlQYXltZW50TWV0aG9kID8/IG51bGwpKTtcclxuICAgIHB1YmxpYyBhbGxvd0V4Y2VlZEJhbGFuY2UkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uYWxsb3dFeGNlZWRCYWxhbmNlID8/IG51bGwpKTtcclxuICAgIHB1YmxpYyBjcmVkaXRBbW91bnQkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uY3JlZGl0QW1vdW50ID8/IG51bGwpKTtcclxuICAgIHB1YmxpYyBzaG93TWF4JCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LnNob3dNYXggPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIHNob3dQcmljZSQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5zaG93UHJpY2UgPz8gbnVsbCkpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UsIHByaXZhdGUgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLCBwcml2YXRlIGNvbnN0czogQ29uc3RhbnRzLFxyXG4gICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIG9yZGVyVXRpbHM6IE9yZGVyVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNoYW5uZWxDb25maWdTZXJ2aWNlOiBDaGFubmVsQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYXJ0JykpIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuY2FydF90b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYXJ0X3Rva2VuJykgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ2dlZEluLnN1YnNjcmliZShyZXMgPT4gdGhpcy5nZXRDYXJ0KCkpO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbENvbmZpZ1NlcnZpY2UuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmNoYW5uZWxDb25maWcgPSByZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDYXJ0MigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXJ0SXRlbXNTdWJqZWN0LnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFkZHJlc3NCb29rID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuYWRkcmVzc0Jvb2tBcGkoKSkucGlwZShtYXAocmVzID0+IHJlcz8ubGVuZ3RoICYmIHJlcy5tYXAoYWRkcmVzID0+IHsgcmV0dXJuIGFkZHJlcyAmJiB7IC4uLmFkZHJlcywgc2VsZWN0ZWQ6IGFkZHJlcy5kZWZhdWx0IH0gfSkgfHwgbnVsbCkpLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgIHB1YmxpYyBnZXRUYXhlcyA9IGFzeW5jICgpID0+XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy50YXhlc0FwaSgpLCB7IHRva2VuOiB0aGlzLmNhcnRfdG9rZW4gfSkuc3Vic2NyaWJlKHJlcyA9PiByZXMpXHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDYXJ0ID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmNhcnRJdGVtc0FwaSgpLCAoKHRoaXMuY2FydF90b2tlbiAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+PSAxKSAmJiB7IHRva2VuOiB0aGlzLmNhcnRfdG9rZW4gfSkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKVxyXG4gICAgICAgIClcclxuXHJcbiAgICBwcml2YXRlIGdldENhcnRCeVRva2VuID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmNhcnRJdGVtc0FwaSgpLCAoKHRoaXMuY2FydF90b2tlbikgJiYgeyB0b2tlbjogdGhpcy5jYXJ0X3Rva2VuIH0pKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHJlcyA9PiB0aGlzLmluaXRpYWxpemVDYXJ0KHJlcylcclxuICAgICAgICApXHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDYXJ0QnlDdXN0b21lciA9IGFzeW5jICgpID0+XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5jYXJ0SXRlbXNBcGkoKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXHJcbiAgICAgICAgKVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIEBwcml2YXRlXHJcbiAgICAgKiAgQ0FSVCBDUlVEIFNFUlZFUidTIFNZTkNST05JWkVEXHJcbiAgICAgKi9cclxuXHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVDYXJ0ID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJ0X3Rva2VuID0gcmVzcG9uc2UudG9rZW5WYWx1ZTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2FydF90b2tlbicsIHRoaXMuY2FydF90b2tlbik7XHJcbiAgICAgICAgdGhpcy5sb2NhbGUgPSByZXNwb25zZS5sb2NhbGU7XHJcbiAgICAgICAgLyogbGV0IGxvY2FsZUZyb21TdG9yYWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0xPQ0FMRScpXHJcbiAgICAgICAgY29uc29sZS5sb2cobG9jYWxlRnJvbVN0b3JhZ2UpXHJcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGVGcm9tU3RvcmFnZSA/IGxvY2FsZUZyb21TdG9yYWdlIDogcmVzcG9uc2UubG9jYWxlO1xyXG4gICAgICAgIHJlc3BvbnNlLmxvY2FsZSA9IHRoaXMubG9jYWxlICovXHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKHJlc3BvbnNlLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0SXRlbXModGhpcy50cmFuc2Zvcm1JdGVtcyhyZXNwb25zZS5pdGVtcykpO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN3aXRjaFByaWNlSW5DYXJ0SXRlbSA9IChpdGVtczogQ2FydEl0ZW1bXSkgPT4ge1xyXG4gICAgICAgIC8vcmV0dXJuIGl0ZW1zO1xyXG4gICAgICAgIHJldHVybiBpdGVtcy5tYXAoXHJcbiAgICAgICAgICAgIGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucHJvZHVjdC5wcmljZSA9IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2FsZXByaWNlIDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnByaWNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0ZXBDYXJ0ID0gKHJlcykgPT4ge1xyXG4gICAgICAgIHJlcy5pdGVtcy5sZW5ndGggPiAwICYmIHJlcy5pdGVtcy5mb3JFYWNoKFxyXG4gICAgICAgICAgICBpdGVtID0+ICF0aGlzLmlzSXRlbUluTG9jYWwoaXRlbS5pZCkgJiYgdGhpcy5kZWxldGVDYXJ0SXRlbShpdGVtLCBmYWxzZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYWRkQWxsVG9DYXJ0KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIGl0ZW0gPT4gIXJlcy5pdGVtcy5zb21lKGV4dGVybmFsX2l0ZW0gPT4gZXh0ZXJuYWxfaXRlbS5pZCA9PSBpdGVtLml0ZW1faWQpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUNhcnRJdGVtcyA9IChpdGVtcykgPT4ge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcclxuICAgICAgICB0aGlzLmNvdW50ID0gaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuaXRlbXMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ2FydEl0ZW1RdWFudGl0eSA9ICh2YXJpYW50X2lkLCBxdWFudGl0eSkgPT4ge1xyXG4gICAgICAgIGxldCBuZXdRdWFudGl0eSA9IHRoaXMuaXRlbXMuZmluZChpdGVtID0+IGl0ZW0udmFyaWFudF9pZCA9PSB2YXJpYW50X2lkKS5xdWFudGl0eSA9IHF1YW50aXR5O1xyXG4gICAgICAgIHRoaXMuY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuaXRlbXMpO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0LXVwZGF0ZWQnLCB7IHF1YW50aXR5OiBuZXdRdWFudGl0eSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGVuZFRvQ2FydCA9IChjYXJ0KSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKGNhcnQpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLnRyYW5zZm9ybUl0ZW1zKGNhcnQuaXRlbXMpO1xyXG4gICAgICAgIHRoaXMuY291bnQgPSB0aGlzLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuICAgICAgICAvLyAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdC1hZGRlZCcpO1xyXG4gICAgICAgIHRoaXMuY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuaXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVtb3ZlQ2FydEl0ZW0gPSAoY2FydCwgcHJvZHVjdCwgdG9hc3QgPSB0cnVlKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKGNhcnQsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLml0ZW1zLnNwbGljZSh0aGlzLml0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaXRlbV9pZCA9PSBwcm9kdWN0Lml0ZW1faWQpLCAxKTtcclxuICAgICAgICB0aGlzLmNhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLml0ZW1zKTtcclxuICAgICAgICB0b2FzdCAmJiB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdG9hc3QgJiYgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtcmVtb3ZlZCcpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcbiAgICAgICAgLy8gdGhpcy5nb29nbGVBbmFseXRpY3MucmVtb3ZlRnJvbUNhcnQocHJvZHVjdCk7XHJcbiAgICAgICAgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgncmVtb3ZlX2Zyb21fY2FydCcsIHsgLi4ucHJvZHVjdCwgY3VycmVuY3k6IHRoaXMuY29uc3RzLmN1cnJlbmN5LmNvZGUgfSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRJZkFsbHJlYWR5RXhpc3RzID0gKHByb2R1Y3QsIHZhcmlhbnRfaWQsIHF1YW50aXR5QWRkID0gMSkgPT5cclxuICAgICAgICB0aGlzLml0ZW1zLmZpbmQoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLnByb2R1Y3QuaWQgPT0gcHJvZHVjdC5pZCAmJiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudF9pZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtUXVhbnRpdHkoaXRlbSwgdGhpcy5maW5kSXRlbShwcm9kdWN0LmlkKS5xdWFudGl0eSArIHF1YW50aXR5QWRkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUxvY2FsQ2FydCA9ICgpID0+IHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2FydCcsIEpTT04uc3RyaW5naWZ5KHRoaXMuaXRlbXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc2V0Q2FydCA9IChuZXh0PykgPT4ge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgICAgICB0aGlzLmNhcnRTdWJqZWN0Lm5leHQobnVsbCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhudWxsKTtcclxuICAgICAgICB0aGlzLmNhcnRfdG9rZW4gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2FydEl0ZW1zU3ViamVjdC5uZXh0KFtdKTtcclxuICAgICAgICB0aGlzLmNvdW50ID0gMDtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2FydCcsIFwiW11cIik7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NhcnRfdG9rZW4nKTtcclxuICAgICAgICBuZXh0ICYmIG5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUNhcnRPYmogPSAoY2FydCwgZW1pdEV2ZW50ID0gdHJ1ZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIHRoaXMuY2FydFN1YmplY3QubmV4dChjYXJ0KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKGNhcnQ/LmJhbGFuY2VDdXN0b21lciwgY2FydD8udG90YWxzPy50b3RhbCk7XHJcbiAgICAgICAgZW1pdEV2ZW50ICYmIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ2FkZF90b19jYXJ0JywgY2FydCk7XHJcbiAgICAgICAgdGhpcy5wcm9tb3Rpb25zU3ViamVjdC5uZXh0KHRoaXMub3JkZXJVdGlscy5nZXRQcm9tb3Rpb25zKGNhcnQsIHRydWUpKTtcclxuXHJcbiAgICAgICAgY2FydC5jb3Vwb25Db2RlXHJcbiAgICAgICAgICAgID8gdGhpcy5mb3JtYXRDb3Vwb24oY2FydClcclxuICAgICAgICAgICAgOiB0aGlzLmNvdXBvblN1YmplY3QubmV4dChudWxsKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzSXRlbUluTG9jYWwgPSAoaXRlbV9pZCkgPT4gdGhpcy5pdGVtcy5zb21lKGl0ZW0gPT4gaXRlbS5pdGVtX2lkID09IGl0ZW1faWQpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogIEBwdWJsaWNcclxuICAgICAqICBDQVJUIENSVURcclxuICAgICAqL1xyXG5cclxuICAgIGFkZFRvQ2FydCA9IChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkLCBjb21tZW50cz86IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RJblByb2Nlc3MuZ2V0VmFsdWUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJhbGFuY2UgPSB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XHJcbiAgICAgICAgY29uc3QgYXBwbHlNYXhPcmRlcnMgPSBiYWxhbmNlPy5hcHBseU1heE9yZGVycyA/PyBmYWxzZTtcclxuICAgICAgICBjb25zdCBtYXhPcmRlcnMgPSBiYWxhbmNlPy5tYXhPcmRlcnMgPz8gSW5maW5pdHk7XHJcblxyXG4gICAgICAgIGlmIChhcHBseU1heE9yZGVycyAmJiAobWF4T3JkZXJzIDw9IDAgfHwgbWF4T3JkZXJzID09PSBudWxsKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbWF4LW9yZGVycy1yZWFjaGVkJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgbGV0IGFkZGVkID0gdGhpcy5hZGRJZkFsbHJlYWR5RXhpc3RzKHByb2R1Y3QsIHZhcmlhbnRfaWQsIHF1YW50aXR5KTtcclxuICAgICAgICBpZiAoIWFkZGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IHF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgdmFyaWFudENvZGU6IHZhcmlhbnRfaWQsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBpZiAoY29tbWVudHMpIHtcclxuICAgICAgICAgICAgICAgIHBheWxvYWQuY29tbWVudHMgPSBjb21tZW50cztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRJdGVtQXBpKCksIHBheWxvYWQpXHJcbiAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSkpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hbmVqYXIgbGEgcmVzcHVlc3RhIEhUVFAgZXhpdG9zYSAoY8OzZGlnbyAyMDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kVG9DYXJ0KHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0LWFkZGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBNYW5lamFyIGVsIGVycm9yIGRlIGxhIGxsYW1hZGEgSFRUUCAoY8OzZGlnbyA1MDAgdSBvdHJvIGVycm9yKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDw7NkaWdvIGRlIGVycm9yIDUwMCAodGltZW91dClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdIYSBvY3VycmlkbyB1biBlcnJvciBhbCBhZ3JlZ2FyIGFsIGNhcnJpdG8uIFZ1ZWx2YSBhIGludGVudGFybG8uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdHJvIGPDs2RpZ28gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdFcnJvciBpbmVzcGVyYWRvLiBWdWVsdmEgYSBpbnRlbnRhcmxvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkZFRvTG90ID0gKHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRfaWQsIGlkPywgb3JkZXJfaXRlbV9pZD8sIGxvdF9xdWFudGl0eT8sIHVuaXRfcHJpY2U/LCB1bml0X3RvdGFsPywgYWp1c3RlbWVudF90b3RhbD8sIHRvdGFsX2xvdD8sIGxvdF9zdGF0dXM/LCBkYXRlX3JlcXVlc3Q/LCBub3Rlcz8sIHNoaXBwaW5nX2FkZHJlc3NfaWQ/LCBzaGlwcGluZ19hZGRyZXNzX25hbWU/LCBhY3Rpb24/KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYWRkZWQgPSAnJztcclxuICAgICAgICAhYWRkZWQgJiYgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRJdGVtQXBpKCksIHsgcHJvZHVjdENvZGU6IHByb2R1Y3QuaWQsIHF1YW50aXR5OiBxdWFudGl0eSwgdmFyaWFudENvZGU6IHZhcmlhbnRfaWQsIGlkOiBpZCB8fCAnJywgb3JkZXJfaXRlbV9pZDogb3JkZXJfaXRlbV9pZCB8fCAnJywgbG90X3F1YW50aXR5OiBsb3RfcXVhbnRpdHkgfHwgJycsIHVuaXRfcHJpY2U6IHVuaXRfcHJpY2UgfHwgJycsIHVuaXRfdG90YWw6IHVuaXRfdG90YWwgfHwgJycsIGFqdXN0ZW1lbnRfdG90YWw6IGFqdXN0ZW1lbnRfdG90YWwgfHwgJycsIHRvdGFsX2xvdDogdG90YWxfbG90IHx8ICcnLCBsb3Rfc3RhdHVzOiBsb3Rfc3RhdHVzIHx8ICcnLCBkYXRlX3JlcXVlc3Q6IGRhdGVfcmVxdWVzdCB8fCAnJywgbm90ZXM6IG5vdGVzIHx8ICcnLCBzaGlwcGluZ19hZGRyZXNzX2lkOiBzaGlwcGluZ19hZGRyZXNzX2lkIHx8ICcnLCBzaGlwcGluZ19hZGRyZXNzX25hbWU6IHNoaXBwaW5nX2FkZHJlc3NfbmFtZSB8fCAnJywgYWN0aW9uOiBhY3Rpb24gfHwgJ25ld2xvdCcgfSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIHJlcyA9PiB0aGlzLmFwcGVuZFRvQ2FydChyZXMpLFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFRvQ2FydFByb21pc2UgPSBhc3luYyAocHJvZHVjdDogUHJvZHVjdCwgcXVhbnRpdHk6IG51bWJlciwgdmFyaWFudF9pZCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgbGV0IGFkZGVkID0gdGhpcy5hZGRJZkFsbHJlYWR5RXhpc3RzKHByb2R1Y3QsIHZhcmlhbnRfaWQsIHF1YW50aXR5KTtcclxuICAgICAgICBpZiAoIWFkZGVkKSB7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCAodGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRJdGVtQXBpKCksIHsgcHJvZHVjdENvZGU6IHByb2R1Y3QuaWQsIHF1YW50aXR5OiBxdWFudGl0eSwgdmFyaWFudENvZGU6IHZhcmlhbnRfaWQgfSkudG9Qcm9taXNlKCkpO1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQuZXJyb3IpIHRoaXMuaGFuZGxlRXJyb3IocmVzdWx0LmVycm9yKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFRvQ2FydChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGFkZEFsbFRvQ2FydCA9IChpdGVtczogYW55W10pID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IGl0ZW1zOiB0aGlzLm1lcmdlSXRlbXNBZGRBbGxUb0NhcnQoaXRlbXMpIH07XHJcblxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkQWxsSXRlbXNBcGkoKSwgcGFyYW1zKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKCkudGhlbihcclxuICAgICAgICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKHJlcy5jYXJ0KSAmJiB0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKHJlcy5jYXJ0Lml0ZW1zKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLmNhcnRfcmVzcG9uc2Uuc3RhdHVzID09ICdzdWNjZXNzJyAmJiB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdHMtYWRkZWQnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRSZXBlYXRPcmRlclRvQ2FydChpdGVtczogYW55W10pOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5jYXJ0SXRlbXNTdWJqZWN0LnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ2NhcnQtbm90LWVtcHR5Jyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaXRlbXNUb0FkZCA9IGl0ZW1zLm1hcChpdGVtID0+ICh7XHJcbiAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBpdGVtLnByb2R1Y3QuaWQsXHJcbiAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxyXG4gICAgICAgICAgICB2YXJpYW50Q29kZTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLmNvZGVcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgIGlmIChpdGVtc1RvQWRkLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbm8tcHJvZHVjdHMtdG8tYWRkJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICAgICAgaXRlbXM6IGl0ZW1zVG9BZGRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRBbGxJdGVtc0FwaSgpLCBwYXJhbXMpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gJ2ZhaWx1cmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gcmVzLmVycm9yPy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJ18nKSB8fCAndW5rbm93bl9lcnJvcic7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXNSZXNwb25zZSA9IHJlcz8uaXRlbXNfcmVzcG9uc2UgfHwgW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYXJ0SXRlbXMgPSByZXM/LmNhcnQ/Lml0ZW1zIHx8IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG91dE9mU3RvY2tJdGVtcyA9IGl0ZW1zUmVzcG9uc2UuZmlsdGVyKGl0ZW0gPT5cclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWx1cmUnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5lcnJvcnMuc29tZShlcnJvciA9PiBlcnJvci5jb2RlID09PSAnb3V0X29mX3N0b2NrJylcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNhcnRJdGVtcy5sZW5ndGggPT09IDAgJiYgb3V0T2ZTdG9ja0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnYWxsLXByb2R1Y3RzLW91dC1vZi1zdG9jaycpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3V0T2ZTdG9ja0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnc29tZS1wcm9kdWN0cy1vdXQtb2Ytc3RvY2snKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2FydEl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzLmNhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FydEl0ZW1zKHRoaXMudHJhbnNmb3JtSXRlbXMoY2FydEl0ZW1zKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3RzLWFkZGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY2FydCddKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG1lcmdlSXRlbXNBZGRBbGxUb0NhcnQgPSAoaXRlbXM6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgbGV0IHBhcmFtc01lcmdlID0gW11cclxuICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtSW50ZXJubyA9IGl0ZW1zLmZpbmQoaXRlbVBhcmFtID0+IGl0ZW1QYXJhbS52YXJpYW50Q29kZSA9PSBpdGVtLnZhcmlhbnRfaWQpXHJcbiAgICAgICAgICAgIHBhcmFtc01lcmdlLnB1c2goXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogaXRlbS52YXJpYW50X2lkLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtSW50ZXJubyAmJiBpdGVtSW50ZXJuby5xdWFudGl0eSB8fCBpdGVtLnF1YW50aXR5XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcihpdGVtUGFyYW0gPT4gIXRoaXMuaXRlbXMuZmluZChpdGVtID0+IGl0ZW1QYXJhbS52YXJpYW50Q29kZSA9PSBpdGVtLnZhcmlhbnRfaWQpKVxyXG5cclxuICAgICAgICByZXR1cm4gWy4uLml0ZW1zLCAuLi5wYXJhbXNNZXJnZV1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVJdGVtUXVhbnRpdHkgPSAoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVRdWFudGl0eShpdGVtLCBxdWFudGl0eSkgJiYgKHRoaXMudmFsaWRhdGVQcmljZUFuZENyZWRpdHMoaXRlbSwgcXVhbnRpdHkpKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucHV0KHRoaXMudXBkYXRlSXRlbVF1YW50aXR5QXBpKHRoaXMuZmluZEl0ZW1CeUlkVmFyaWFudChpdGVtLnZhcmlhbnRfaWQpKSwgeyAncXVhbnRpdHknOiBOdW1iZXIocXVhbnRpdHkpIH0pLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIHJlcyA9PiB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzKSAmJiB0aGlzLnVwZGF0ZUNhcnRJdGVtUXVhbnRpdHkoaXRlbS52YXJpYW50X2lkLCBOdW1iZXIocXVhbnRpdHkpKSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVycilcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgdmFsaWRhdGVRdWFudGl0eSA9IChpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHkpID0+IHtcclxuICAgICAgICBpZiAoKHRoaXMuZ2V0Q291bnRGcm9tSXRlbUluQ2FydChpdGVtLnByb2R1Y3RDb2RlKSArIHF1YW50aXR5KSA+IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tYXhpbXVtSXRlbXNRdWFudGl0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbWF4aW11bS1pdGVtcy1xdWFudGl0eScsIHsgcXVhbnRpdHk6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tYXhpbXVtSXRlbXNRdWFudGl0eSB9KVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCh0aGlzLmdldENvdW50RnJvbUl0ZW1JbkNhcnQoaXRlbS5wcm9kdWN0Q29kZSkgKyBxdWFudGl0eSkgPCBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWluaW11bUl0ZW1zUXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ21pbmltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWluaW11bUl0ZW1zUXVhbnRpdHkgfSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSAmJiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKCh0aGlzLmdldENvdW50RnJvbUl0ZW1JbkNhcnQoaXRlbS5wcm9kdWN0Q29kZSkgKyBxdWFudGl0eSkgJSBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3QtYmUtbXVsdGlwbGUnLCB7IHF1YW50aXR5OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdmFsaWRhdGVQcmljZUFuZENyZWRpdHMgPSAoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5OiBudW1iZXIpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCBiYWxhbmNlID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoIWJhbGFuY2UgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IG51bGwgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiYWxhbmNlLmFsbG93QW55UGF5bWVudE1ldGhvZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiYWxhbmNlLnJlbWFpbmluZ0NyZWRpdHMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1bml0UHJpY2UgPSBpdGVtLnRvdGFsIC8gaXRlbS5xdWFudGl0eTtcclxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUXVhbnRpdHkgPSBxdWFudGl0eSAtIGl0ZW0ucXVhbnRpdHk7XHJcblxyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsUXVhbnRpdHkgPD0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxDb3N0ID0gdW5pdFByaWNlICogYWRkaXRpb25hbFF1YW50aXR5O1xyXG5cclxuICAgICAgICBpZiAoYWRkaXRpb25hbENvc3QgPiBiYWxhbmNlLnJlbWFpbmluZ0NyZWRpdHMpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIGhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IGJhbGFuY2UgPSB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICghYmFsYW5jZSB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gbnVsbCB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhcnRTdWJqZWN0LnZhbHVlLnRvdGFscy50b3RhbCA+IGJhbGFuY2UuY3JlZGl0QW1vdW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdub3QtZW5vdWdoLWNyZWRpdHMnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIGNhbGN1bGF0ZVN0b2NrQ291bnRzID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnByb2R1Y3Quc3RvY2sgPCBpdGVtLnF1YW50aXR5ICsgcXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jaycpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVDYXJ0SXRlbSA9IChpdGVtLCB0b2FzdCA9IHRydWUpID0+IHtcclxuICAgICAgICBsZXQgaWRfYnVzY2FkbyA9IHRoaXMuZmluZEl0ZW1CeUlkVmFyaWFudChpdGVtLnZhcmlhbnRfaWQpXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgLy8gICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRJdGVtQXBpKCksIHsgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCwgcXVhbnRpdHk6IDAsIHZhcmlhbnRDb2RlOiBpdGVtLnZhcmlhbnRfaWQsIGlkOiAnJywgb3JkZXJfaXRlbV9pZDogaXRlbS5pdGVtX2lkLCBsb3RfcXVhbnRpdHk6ICcnLCB1bml0X3ByaWNlOiAnJywgdW5pdF90b3RhbDogJycsIGFqdXN0ZW1lbnRfdG90YWw6ICcnLCB0b3RhbF9sb3Q6ICcnLCBsb3Rfc3RhdHVzOiAnJywgZGF0ZV9yZXF1ZXN0OiAnJywgbm90ZXM6ICAnJywgc2hpcHBpbmdfYWRkcmVzc19pZDogJycsIHNoaXBwaW5nX2FkZHJlc3NfbmFtZTogJycsIGFjdGlvbjogICdkZWxldGVvcmRlcml0ZW0nfSlcclxuICAgICAgICAvLyAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAvLyAgICAgICAgICAgIHJlcyA9PiB0aGlzLnJlbW92ZUNhcnRJdGVtKHJlcywgaXRlbSwgdG9hc3QpLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKVxyXG4gICAgICAgIC8vICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5kZWxldGUodGhpcy5kZWxldGVJdGVtQXBpKGlkX2J1c2NhZG8pKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHJlcyA9PiB7IHRoaXMucmVtb3ZlQ2FydEl0ZW0ocmVzLCBpdGVtLCB0b2FzdCk7IHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTsgfSxcclxuICAgICAgICAgICAgZXJyID0+IHsgdGhpcy5oYW5kbGVFcnJvcihlcnIpOyB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7IH0sXHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQ2FydCgpIHtcclxuICAgICAgICAvL3NvbHVjaW9uIHByb3Zpc2FvcmlhXHJcbiAgICAgICAgbGV0IGl0ZW1zID0gWy4uLnRoaXMuaXRlbXNdXHJcbiAgICAgICAgd2hpbGUgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVDYXJ0SXRlbShpdGVtcy5wb3AoKSwgZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vdGhpcy5yZXNldENhcnQodGhpcy5nZXRDYXJ0KTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckFuZFJlc2V0Q2FydCgpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJDbGVhcmluZyBhbmQgcmVzZXRpbmcuLi5cIilcclxuICAgICAgICB0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnRCeUN1c3RvbWVyKVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUVycm9yID0gKGVycm9yOiB7IGVycm9yOiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvcGVyYXRpb24tZXJyb3ItcGFyYW0nKTtcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q291bnRGcm9tSXRlbUluQ2FydCA9IChjb2RlVmFyaWFudCk6IG51bWJlciA9PiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gY29kZVZhcmlhbnQpPy5xdWFudGl0eSB8fCAwO1xyXG5cclxuICAgIGZpbmRJdGVtQnlJZFZhcmlhbnQgPSAodmFyaWFudF9pZCkgPT4gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRfaWQpLml0ZW1faWRcclxuXHJcbiAgICBmaW5kSXRlbSA9IChwcm9kdWN0X2lkKSA9PiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnByb2R1Y3QuaWQgPT0gcHJvZHVjdF9pZCk7XHJcblxyXG4gICAgLyoqIERBVEEgRk9SIE9USEVSIFNFUlZJQ0VTICovXHJcbiAgICBnZXRDYXJ0VG9rZW4gPSAoKSA9PiB0aGlzLmNhcnRfdG9rZW47XHJcblxyXG4gICAgZ2V0TG9jYWxlID0gKCkgPT4gdGhpcy5sb2NhbGU7XHJcblxyXG4gICAgZ2V0VG90YWxBbW91bnQgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRvdGFsKSk7XHJcblxyXG4gICAgZ2V0Q291bnRDYXJ0SXRlbXMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXMucGlwZShtYXAoKGNhcnRJdGVtcykgPT4gY2FydEl0ZW1zPy5sZW5ndGgpKTtcclxuXHJcbiAgICBnZXRUYXhlc0Ftb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8udGF4ZXMgPiAwID8gY2FydD8udG90YWxzPy50YXhlcyA6IDApKTtcclxuXHJcbiAgICBnZXRTdWJUb3RhbEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8uc3VidG90YWwpKTtcclxuXHJcbiAgICB0b0RlY2ltYWwgPSAodG90YWwpID0+ICh0b3RhbCAtIE1hdGguZmxvb3IodG90YWwpID09IDApID8gdG90YWwgLyAxMDAgOiB0b3RhbFxyXG5cclxuICAgIGdldERpc2NvdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FydEl0ZW1zLnBpcGUobWFwKChwcm9kdWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IHRoaXMuaXRlbXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldiArIGN1cnIucHJvZHVjdC5zYWxlcHJpY2UgKiBjdXJyLnF1YW50aXR5O1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgbGV0IHN1YnRvdGFsID0gdGhpcy5pdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICsgY3Vyci5wcm9kdWN0LnByaWNlICogY3Vyci5xdWFudGl0eTtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzdWJ0b3RhbCAtIHRvdGFsO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRDb3Vwb24gPSBhc3luYyAoY29kZSk6IFByb21pc2U8YW55PiA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy5jb3Vwb25BcGkoKSwgeyBjb3Vwb246IGNvZGUgfSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3IgfHwgcmVzdWx0LmVycm9ycykgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICdpbnZhbGlkLWNvdXBvbicgfTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKHJlc3VsdCwgZmFsc2UpO1xyXG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIG1lc3NhZ2U6ICdvaycgfTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiB0cnVlLCBtZXNzYWdlOiAnaW52YWxpZC1jb3Vwb24nIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNvdXBvbiA9IGFzeW5jICgpID0+IHRoaXMuY29ubmVjdGlvbi5kZWxldGUodGhpcy5jb3Vwb25BcGkoKSkucGlwZShtYXAocmVzID0+IHRoaXMudXBkYXRlQ2FydE9iaihyZXMsIGZhbHNlKSkpLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgIGZvcm1hdENvdXBvbiA9IChjYXJ0KSA9PiB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRfY291cG9uID0gdGhpcy5jb3Vwb25TdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCBjb3Vwb246IENvdXBvbkkgPSB7IGNvZGU6IGNhcnQuY291cG9uQ29kZSB9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKGNhcnQuY2FydERpc2NvdW50cylbMF07XHJcbiAgICAgICAgICAgIGNvdXBvbiA9IHtcclxuICAgICAgICAgICAgICAgIC4uLmNvdXBvbixcclxuICAgICAgICAgICAgICAgIGFtb3VudDogKGNhcnQuY2FydERpc2NvdW50cyAmJiBjYXJ0LmNhcnREaXNjb3VudHNba2V5XS5hbW91bnQuY3VycmVudCkgfHwgMCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0ubmFtZSkgfHwgJ25vLW5hbWUnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgKGNvdXBvbiAhPSBjdXJyZW50X2NvdXBvbikgJiYgdGhpcy5jb3Vwb25TdWJqZWN0Lm5leHQoY291cG9uKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VIYXZlVG9VcGRhdGUgPSAodmFsdWUpID0+IHRoaXMuaGF2ZV90b191cGRhdGUgPSB2YWx1ZTtcclxuXHJcbiAgICByZWFkeUZvckNoZWNrb3V0ID0gKHN1Y2Nlc3NDYWxsYmFjaz86IEZ1bmN0aW9uLCBlcnJvckNhbGxiYWNrPzogRnVuY3Rpb24pOiBDYXJ0QWZmb3JkYWJsZSA9PiB7XHJcbiAgICAgICAgbGV0IGNhcnQgPSB0aGlzLmNhcnRTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuY2FydEl0ZW1zU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBsZXQgcmVzdWx0OiBDYXJ0QWZmb3JkYWJsZSA9IHsgb2s6IHRydWUgfTtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoIDwgdGhpcy5jaGFubmVsQ29uZmlnLm1pbmltdW1RdWFudGl0eVB1cmNoYXNlSXRlbXMpIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm9rID0gZmFsc2U7IHJlc3VsdC5yZWFzb25zLnB1c2goeyBtZXNzYWdlOiAnbm90LWVub3VnaHQtaXRlbXMnIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYXJ0LnRvdGFscy50b3RhbCA8IHRoaXMuY2hhbm5lbENvbmZpZy5taW5pbXVtUHVyY2hhc2VBbW91bnQpIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm9rID0gZmFsc2U7IHJlc3VsdC5yZWFzb25zLnB1c2goeyBtZXNzYWdlOiAnbm90LWVub3VnaHQtYW1vdW50JyB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrIHx8IGVycm9yQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm9rXHJcbiAgICAgICAgICAgICAgICA/IHN1Y2Nlc3NDYWxsYmFjayAmJiBzdWNjZXNzQ2FsbGJhY2soKVxyXG4gICAgICAgICAgICAgICAgOiBlcnJvckNhbGxiYWNrICYmIGVycm9yQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVJdGVtc09uRXJyb3IgPSAoaXRlbXNXaXRoRXJyb3I6IGFueVtdLCBjb2RlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtc1dpdGhFcnJvcik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5pdGVtcyk7XHJcbiAgICAgICAgbGV0IGl0ZW1zVXBkYXRlZCA9IHRoaXMuaXRlbXMubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXRlbVdpdGhFcnJvciA9IGl0ZW1zV2l0aEVycm9yLmZpbmQoZmFpbGVkSXRlbSA9PiBpdGVtLml0ZW1faWQgPT0gZmFpbGVkSXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtV2l0aEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmVycm9yID0gY29kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW1zVXBkYXRlZCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0SXRlbXMoaXRlbXNVcGRhdGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkQ2FydEJ5VG9rZW4gPSBhc3luYyAodG9rZW46IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FydF90b2tlbiA9IHRva2VuXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0Q2FydEJ5VG9rZW4oKVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqICBVVElMU1xyXG4gICAgICovXHJcblxyXG4gICAgdHJhbnNmb3JtSXRlbXMgPSAoc2VydmVyX2l0ZW0pID0+IHNlcnZlcl9pdGVtLm1hcChcclxuICAgICAgICBpdGVtID0+IHtcclxuICAgICAgICAgICAgaXRlbSA9IHtcclxuICAgICAgICAgICAgICAgIHByb2R1Y3Q6IGl0ZW0ucHJvZHVjdCxcclxuICAgICAgICAgICAgICAgIHZhcmlhbnRfaWQ6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgbG90OiBpdGVtLm9yZGVySXRlbUxvdCxcclxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgY29tbWVudHM6IGl0ZW0uY29tbWVudHMgfHwgJycsXHJcbiAgICAgICAgICAgICAgICBpdGVtX2lkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgdG90YWw6IGl0ZW0udG90YWxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0pO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2FsZXByaWNlKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnByaWNlKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSA+IDAgPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2VsZXByaWNlIDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnByaWNlKTtcclxuICAgICAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgICBpdGVtLnByb2R1Y3QucHJpY2UgPSBpdGVtLnRvdGFsIC8gaXRlbS5xdWFudGl0eS8vID8gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNlbGVwcmljZSA6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5wcmljZTtcclxuICAgICAgICAgICAgLy8gfSwgMTAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgKVxyXG5cclxuXHJcbiAgICBnZXRDcmVkaXRBbW91bnQgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPiA9PlxyXG4gICAgICAgIHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKGJhbGFuY2VDdXN0b21lcikgPT4gYmFsYW5jZUN1c3RvbWVyPy5jcmVkaXRBbW91bnQgPz8gbnVsbClcclxuICAgICAgICApO1xyXG5cclxuICAgIGdldENsaWVudFRheGVzID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PlxyXG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy50YXhlcyA+IDAgPyBjYXJ0Py50b3RhbHM/LmNsaWVudFRheGVzIDogMCkpO1xyXG5cclxuICAgIGdldFJlbWFpbmluZ0NyZWRpdHMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnBpcGUobWFwKChiYWxhbmNlQ3VzdG9tZXIpID0+IGJhbGFuY2VDdXN0b21lcj8ucmVtYWluaW5nQ3JlZGl0cykpO1xyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhiYWxhbmNlOiBhbnksIHRvdGFsOiBudW1iZXIgfCBudWxsID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghYmFsYW5jZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QubmV4dChudWxsKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxBbW91bnQgPSB0b3RhbCA/PyAwO1xyXG5cclxuICAgICAgICBjb25zdCBiYWxhbmNlRGF0YSA9IHtcclxuICAgICAgICAgICAgYWxsb3dBbnlQYXltZW50TWV0aG9kOiBiYWxhbmNlLmFsbG93QW55UGF5bWVudE1ldGhvZCxcclxuICAgICAgICAgICAgYWxsb3dFeGNlZWRCYWxhbmNlOiBiYWxhbmNlLmFsbG93RXhjZWVkQmFsYW5jZSxcclxuICAgICAgICAgICAgY3JlZGl0QW1vdW50OiBiYWxhbmNlLmNyZWRpdEFtb3VudCxcclxuICAgICAgICAgICAgc2hvd01heDogYmFsYW5jZS5zaG93TWF4LFxyXG4gICAgICAgICAgICBzaG93UHJpY2U6IGJhbGFuY2Uuc2hvd1ByaWNlLFxyXG4gICAgICAgICAgICByZW1haW5pbmdDcmVkaXRzOlxyXG4gICAgICAgICAgICAgICAgYmFsYW5jZS5jcmVkaXRBbW91bnQgIT0gbnVsbCAmJiB0b3RhbEFtb3VudCAhPSBudWxsICYmIGJhbGFuY2UuY3JlZGl0QW1vdW50ID49IHRvdGFsQW1vdW50XHJcbiAgICAgICAgICAgICAgICAgICAgPyBiYWxhbmNlLmNyZWRpdEFtb3VudCAtIHRvdGFsQW1vdW50XHJcbiAgICAgICAgICAgICAgICAgICAgOiAwLFxyXG4gICAgICAgICAgICBhcHBseU1heE9yZGVyczogYmFsYW5jZS5hcHBseU1heE9yZGVycyxcclxuICAgICAgICAgICAgbWF4T3JkZXJzOiBiYWxhbmNlLm1heE9yZGVyc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5uZXh0KGJhbGFuY2VEYXRhKTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
|