tuain-ng-forms-lib 15.1.0 → 15.1.1
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/esm2020/lib/components/forms/basic-form.mjs +2 -2
- package/esm2020/lib/services/event-manager.service.mjs +2 -2
- package/fesm2015/tuain-ng-forms-lib.mjs +2 -2
- package/fesm2015/tuain-ng-forms-lib.mjs.map +1 -1
- package/fesm2020/tuain-ng-forms-lib.mjs +2 -2
- package/fesm2020/tuain-ng-forms-lib.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -273,7 +273,7 @@ export class BasicFormComponent extends FormStructureAndData {
|
|
|
273
273
|
return stateChanged;
|
|
274
274
|
}
|
|
275
275
|
checkErrorRecordReceived(recordResponse) {
|
|
276
|
-
const { error } = recordResponse;
|
|
276
|
+
const { error } = recordResponse ?? {};
|
|
277
277
|
if (!error) {
|
|
278
278
|
return false;
|
|
279
279
|
}
|
|
@@ -1307,4 +1307,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImpor
|
|
|
1307
1307
|
template: `<ng-content></ng-content>`
|
|
1308
1308
|
}]
|
|
1309
1309
|
}], ctorParameters: function () { return [{ type: i1.LibFormManagerService }, { type: i2.LibEventManagerService }, { type: i3.LibFileManagementService }]; } });
|
|
1310
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvYmFzaWMtZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSWhFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7O0FBSTNFLE1BQU0sZUFBZSxHQUFHLG1CQUFtQixDQUFDO0FBQzVDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQztBQUMvQixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUM7QUFDL0IsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBRWxDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQztBQUMxQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUM7QUFLdEIsTUFBTSxPQUFPLGtCQUFtQixTQUFRLG9CQUFvQjtJQTRDMUQsWUFDWSxrQkFBeUMsRUFDekMsYUFBcUMsRUFDckMsZ0JBQTBDO1FBQ3BELEtBQUssRUFBRSxDQUFDO1FBSEUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF1QjtRQUN6QyxrQkFBYSxHQUFiLGFBQWEsQ0FBd0I7UUFDckMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEwQjtRQTlDOUMsa0JBQWEsR0FBa0IsSUFBSSxDQUFDO1FBQ3BDLGlCQUFZLEdBQWtCLElBQUksQ0FBQztRQUNuQyxlQUFVLEdBQWtCLElBQUksQ0FBQztRQUNqQyx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsd0JBQW1CLEdBQVksSUFBSSxDQUFDO1FBQzVDLCtCQUErQjtRQUN2QixxQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFDN0IsK0JBQTBCLEdBQVEsRUFBRSxD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QUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUMvRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLElBQVksRUFBRSxRQUFRLEVBQUUsVUFBVSxHQUFHLElBQUk7UUFDNUQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxxQkFBcUIsQ0FBQyxJQUFZLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FBRyxJQUFJO1FBQzdELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7K0dBNXpDVSxrQkFBa0I7bUdBQWxCLGtCQUFrQiwyRUFGbkIsMkJBQTJCOzJGQUUxQixrQkFBa0I7a0JBSDlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDJCQUEyQjtpQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1TdHJ1Y3R1cmVBbmREYXRhIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy9mb3JtJztcbmltcG9ydCB7IExpYkZvcm1NYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0tbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IExpYkV2ZW50TWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ldmVudC1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGliRmlsZU1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmlsZS1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgZm9ybUFjdGlvbnMsIE5PX0VSUk9SIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy9mb3JtLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0b3IgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm1zL2ZpZWxkJztcbmltcG9ydCB7IFJlY29yZEZvcm1TZWN0aW9uIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy9zZWN0aW9uJztcblxuY29uc3QgUEFZTE9BRF9WRVJTSU9OID0gJ1RVQUlORVhDSEFOR0VfMS4wJztcbmNvbnN0IElOTElORV9BQ1RJT04gPSAnSU5MSU5FJztcbmNvbnN0IEdMT0JBTF9BQ1RJT04gPSAnR0xPQkFMJztcbmNvbnN0IEdFVF9EQVRBX0FDVElPTiA9ICdHRVREQVRBJztcblxuY29uc3QgU1VCSkVDVCA9ICdzdWJqZWN0JztcbmNvbnN0IFRPS0VOID0gJ3Rva2VuJztcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmBcbn0pXG5leHBvcnQgY2xhc3MgQmFzaWNGb3JtQ29tcG9uZW50IGV4dGVuZHMgRm9ybVN0cnVjdHVyZUFuZERhdGEge1xuICBwcml2YXRlIF9jb250cm9sVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9vcmlnaW5Ub2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2Zvcm1Sb3V0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2RlZmluaXRpb25PYnRhaW5lZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9ub3RpZnlGb3JtQWN0aXZpdHk6IGJvb2xlYW4gPSB0cnVlO1xuICAvLyBFdmVudG9zIGRlIGFjY2lvbmVzIHkgY2FtcG9zXG4gIHByaXZhdGUgX2Zvcm1DaGFuZ2VTdGF0ZTogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBfZm9ybVNlY3Rpb25zQ2FuRGVhY3RpdmF0ZTogYW55ID0ge307XG4gIHByaXZhdGUgX2Zvcm1TZWN0aW9uc0FjdGl2YXRlOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZTogYW55ID0ge307XG4gIHByaXZhdGUgX2Zvcm1BY3Rpb25zU3RhcnQ6IGFueSA9IHt9O1xuICBwcml2YXRlIF9mb3JtQWN0aW9uc0ZpbmlzaDogYW55ID0ge307XG4gIHByaXZhdGUgX2ZpZWxkSW5wdXRWYWxpZGF0aW9uOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfZmllbGRWYWxpZGF0aW9uc1N0YXJ0OiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfZmllbGRWYWxpZGF0aW9uc0ZpbmlzaDogYW55ID0ge307XG4gIC8vIENhbGxiYWNrIGRlIGFjY2lvbmVzIGRlIHRhYmxhc1xuICBwcml2YXRlIF90YWJsZVNlbGVjdGlvbnNTdGFydDogYW55ID0ge307XG4gIHByaXZhdGUgX3RhYmxlU2VsZWN0aW9uc0ZpbmlzaDogYW55ID0ge307XG4gIHByaXZhdGUgX3RhYmxlQWN0aW9uc1N0YXJ0OiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfdGFibGVBY3Rpb25zRmluaXNoOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfdGFibGVHZXREYXRhU3RhcnQ6IGFueSA9IHt9O1xuICBwcml2YXRlIF90YWJsZUdldERhdGFGaW5pc2g6IGFueSA9IHt9O1xuICAvLyBFcnJvcmVzIGVuIHByb2Nlc29zXG4gIHByaXZhdGUgX2FjdGlvblNlcnZlckVycm9yOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIF9maWVsZFNlcnZlckVycm9yOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIF90YWJsZVNlcnZlckVycm9yOiBhbnlbXSA9IFtdO1xuICAvLyBEYXRvcyBjb21wbGVtZW50YXJpb3MgZGVsIGZvcm11bGFyaW9cbiAgcHJvdGVjdGVkIGlucHV0RGF0YUZpZWxkczogYW55ID0ge307XG4gIHByb3RlY3RlZCBleHRyYURhdGE6IGFueSA9IHt9O1xuICBwcm90ZWN0ZWQgX2V2ZW50RW1pdGVyOiBMaWJFdmVudE1hbmFnZXJTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgZW5hYmxlZFNlY3Rpb25zOiBSZWNvcmRGb3JtU2VjdGlvbltdID0gW107XG4gIC8vIEdlc3Rpw7NuIGRlIGVycm9yXG4gIF9lcnJvclR5cGU6IHN0cmluZyA9ICcnO1xuICBlcnJvckNvZGU6IHN0cmluZyA9ICcnO1xuICBlcnJvckZ1bGxDb2RlOiBzdHJpbmcgPSAnJztcbiAgZXJyb3JOYW1lOiBzdHJpbmcgPSAnJztcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgZXJyb3JEZXRhaWw6IHN0cmluZyA9ICcnO1xuXG4gIC8vIENvbnRyb2wgZGUgZXN0YWRvXG4gIHZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYnVzeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBmb3JtTWFuYWdlclNlcnZpY2U6IExpYkZvcm1NYW5hZ2VyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgX2V2ZW50TWFuYWdlcjogTGliRXZlbnRNYW5hZ2VyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZmlsZU1nbXRTZXJ2aWNlczogTGliRmlsZU1hbmFnZW1lbnRTZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9ldmVudEVtaXRlciA9IHRoaXMuX2V2ZW50TWFuYWdlcjtcbiAgICB0aGlzLmNsZWFuU3RhcnQoKTtcbiAgICB0aGlzLmN1c3RvbVByZVByb2Nlc3NpbmcoKTtcbiAgfVxuXG4gIGNsZWFuU3RhcnQoKSB7XG4gICAgdGhpcy5fZXJyb3JUeXBlID0gJyc7XG4gICAgdGhpcy5lcnJvckNvZGUgPSAnJztcbiAgICB0aGlzLmVycm9yRnVsbENvZGUgPSAnJztcbiAgICB0aGlzLmVycm9yTmFtZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9ICcnO1xuICAgIHRoaXMuY2xlYW5Gb3JtKCk7XG4gICAgdGhpcy5fY29udHJvbFRva2VuID0gbnVsbDtcbiAgICB0aGlzLmlucHV0RGF0YUZpZWxkcyA9IHt9O1xuICAgIHRoaXMuX2RlZmluaXRpb25PYnRhaW5lZCA9IGZhbHNlO1xuICAgIC8vIFNlIGxpbXBpYW4gbG9zIG1hbmVqYWRvcmVzIGRlIGV2ZW50b3NcbiAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICB0aGlzLl9mb3JtQ2hhbmdlU3RhdGUgPSBbXTtcbiAgICB0aGlzLl9mb3JtU2VjdGlvbnNDYW5EZWFjdGl2YXRlID0ge307XG4gICAgdGhpcy5fZm9ybVNlY3Rpb25zQWN0aXZhdGUgPSB7fTtcbiAgICB0aGlzLl9mb3JtU2VjdGlvbnNJbmFjdGl2YXRlID0ge307XG4gICAgdGhpcy5fZm9ybUFjdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMuX2Zvcm1BY3Rpb25zRmluaXNoID0ge307XG4gICAgdGhpcy5fZmllbGRJbnB1dFZhbGlkYXRpb24gPSB7fTtcbiAgICB0aGlzLl9maWVsZFZhbGlkYXRpb25zU3RhcnQgPSB7fTtcbiAgICB0aGlzLl9maWVsZFZhbGlkYXRpb25zRmluaXNoID0ge307XG4gICAgdGhpcy5fdGFibGVTZWxlY3Rpb25zU3RhcnQgPSB7fTtcbiAgICB0aGlzLl90YWJsZVNlbGVjdGlvbnNGaW5pc2ggPSB7fTtcbiAgICB0aGlzLl90YWJsZUFjdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaCA9IHt9O1xuICAgIHRoaXMuX3RhYmxlR2V0RGF0YVN0YXJ0ID0ge307XG4gICAgdGhpcy5fdGFibGVHZXREYXRhRmluaXNoID0ge307XG5cbiAgICB0aGlzLl9hY3Rpb25TZXJ2ZXJFcnJvciA9IFtdO1xuICAgIHRoaXMuX2ZpZWxkU2VydmVyRXJyb3IgPSBbXTtcbiAgICB0aGlzLl90YWJsZVNlcnZlckVycm9yID0gW107XG5cbiAgICB0aGlzLm9uQWN0aW9uU2VydmVyRXJyb3IoKCkgPT4gdGhpcy5kaXNwbGF5QWN0aW9uU2VydmVyRXJyb3IoKSk7XG4gICAgdGhpcy5vblZhbGlkYXRpb25TZXJ2ZXJFcnJvcigoKSA9PiB0aGlzLmRpc3BsYXlWYWxpZGF0aW9uU2VydmVyRXJyb3IoKSk7XG4gICAgdGhpcy5vblRhYmxlU2VydmVyRXJyb3IoKCkgPT4gdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpKTtcbiAgfVxuXG4gIGdldCBmb3JtVmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudmlzaWJsZTsgfVxuICBnZXQgZm9ybSgpIHsgcmV0dXJuIHRoaXM7IH1cblxuICAvLyBNw6l0b2RvcyB2aXJ0dWFsZXNcbiAgY3VzdG9tUHJlUHJvY2Vzc2luZygpIHsgfVxuICBzdGFydCgpIHsgfVxuICBjdXN0b21Gb3JtU3RhcnQoKSB7IH1cbiAgZGlzcGxheUFjdGlvblNlcnZlckVycm9yKCkgeyB9XG4gIGRpc3BsYXlWYWxpZGF0aW9uU2VydmVyRXJyb3IoKSB7IH1cbiAgZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKSB7IH1cbiAgc2hvd0ZpZWxkSW5mbyhjb2RlPzogc3RyaW5nLCBkZXRhaWw/OiBhbnkpIHsgfVxuICBzaG93TW9kYWxEaWFsb2codGl0bGUsIGJvZHksIG9wdGlvbnMsIGNhbGxiYWNrPywgcGFyYW1zPykgeyB9XG4gIG9wZW5VcGxvYWREaWFsb2codGl0bGUsIGJvZHksIG9wdGlvbnMsIGNhbGxiYWNrPywgcGFyYW1zPykgeyB9XG5cbiAgc3Vic2NyaWJlQXBwRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrKTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRFbWl0ZXIuc3Vic2NyaWJlKGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgb3BlbkZvcm0obmFtZTogc3RyaW5nLCBkYXRhOiBhbnkgPSBudWxsLCBiYWNrRGF0YTogYW55ID0gbnVsbCwgY2xlYW5TdGFjayA9IGZhbHNlKTogdm9pZCB7XG4gICAgbGV0IG9yaWdpbjogYW55ID0gbnVsbDtcbiAgICBpZiAoIWNsZWFuU3RhY2spIHtcbiAgICAgIG9yaWdpbiA9IHsgLi4uYmFja0RhdGEsIG5hbWU6IHRoaXMubmFtZSwgdXJsOiB0aGlzLl9mb3JtUm91dGUsIHRva2VuOiB0aGlzLl9jb250cm9sVG9rZW4gfTtcbiAgICAgIG9yaWdpbi5zdWJqZWN0ID0gb3JpZ2luPy5zdWJqZWN0ID8/IHRoaXMuc3ViamVjdDtcbiAgICAgIG9yaWdpbi5zdGF0ZSA9IG9yaWdpbj8uc3RhdGUgPz8gdGhpcy5zdGF0ZTtcbiAgICAgIG9yaWdpbi5maWVsZHMgPSBvcmlnaW4/LmZpZWxkcyA/PyB7fTtcbiAgICAgIG9yaWdpbi5leHRyYSA9IG9yaWdpbj8uZXh0cmEgPz8ge307XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IHsgLi4uZGF0YSwgbmFtZSB9O1xuICAgIHRhcmdldC5zdWJqZWN0ID0gdGFyZ2V0Py5zdWJqZWN0ID8/IG51bGw7XG4gICAgdGFyZ2V0LnN0YXRlID0gdGFyZ2V0Py5zdGF0ZSA/PyBudWxsO1xuICAgIHRhcmdldC5maWVsZHMgPSB0YXJnZXQ/LmZpZWxkcyA/PyB7fTtcbiAgICB0YXJnZXQuZXh0cmEgPSB0YXJnZXQ/LmV4dHJhID8/IHt9O1xuICAgIHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLm9wZW5Gb3JtKG9yaWdpbiwgdGFyZ2V0KTtcbiAgfVxuXG4gIGVuYWJsZUFjdGl2aXR5Tm90aWZpY2F0aW9uKCkgeyB0aGlzLl9ub3RpZnlGb3JtQWN0aXZpdHkgPSB0cnVlOyB9XG4gIGRpc2FibGVBY3Rpdml0eU5vdGlmaWNhdGlvbigpIHsgdGhpcy5fbm90aWZ5Rm9ybUFjdGl2aXR5ID0gZmFsc2U7IH1cbiAgY2FuR29CYWNrKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fb3JpZ2luVG9rZW4gIT09IG51bGwgfVxuICBnb0JhY2soKTogdm9pZCB7IHJldHVybiB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5iYWNrVG8oKTsgfVxuICBnb0JhY2tGb3JtKCk6IHZvaWQgeyByZXR1cm4gdGhpcy5nb0JhY2soKTsgfVxuICBnZXRPcmlnaW5EZXRhaWwoKTogYW55IHsgcmV0dXJuIHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlPy5nZXRGb3JtSW5mbyh0aGlzLl9vcmlnaW5Ub2tlbiA/PyAnJyk7IH1cblxuICBzZXRFcnJvcihlcnJvclR5cGU6IHN0cmluZyB8IG51bGwsIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgbnVsbCwgZXJyb3JEZXRhaWw6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLl9lcnJvclR5cGUgPSBlcnJvclR5cGUgfHwgJyc7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UgfHwgJyc7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9IGVycm9yRGV0YWlsIHx8ICcnO1xuICB9XG5cbiAgcmVzZXRFcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLmVycm9yQ29kZSA9IE5PX0VSUk9SO1xuICAgIHRoaXMuZXJyb3JGdWxsQ29kZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JOYW1lID0gJyc7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yRGV0YWlsID0gJyc7XG4gIH1cblxuICBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2Vycm9yVHlwZTsgfVxuICBnZXRFcnJvck1lc3NhZ2UoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZXJyb3JNZXNzYWdlOyB9XG4gIGdldEVycm9yRGV0YWlsKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmVycm9yRGV0YWlsOyB9XG4gIGdldEVycm9yTmFtZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5lcnJvck5hbWU7IH1cbiAgZ2V0RXJyb3JGdWxsQ29kZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5lcnJvckZ1bGxDb2RlOyB9XG4gIGdldEVycm9yQ29kZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5lcnJvckNvZGU7IH1cblxuICBnZXRGb3JtUGFyYW1ldGVyKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChuYW1lKSA/ICh0aGlzLmV4dHJhRGF0YT8uW25hbWVdID8/IG51bGwpIDogbnVsbDtcbiAgfVxuXG4gIHByZW9jZXNzSW5wdXRQYXJhbXMocGFyYW1zOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICB0aGlzLl9jb250cm9sVG9rZW4gPSBwYXJhbXM/LltUT0tFTl0gPz8gbnVsbDtcbiAgICB0aGlzLnN1YmplY3QgPSBwYXJhbXM/LltTVUJKRUNUXSA/PyBudWxsO1xuICAgIGNvbnN0IHRva2VuSW5mbzogYW55ID0gKHRoaXMuX2NvbnRyb2xUb2tlbikgPyB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5nZXRGb3JtSW5mbyh0aGlzLl9jb250cm9sVG9rZW4pIDoge307XG4gICAgY29uc3QgeyB0b2tlbiwgc3ViamVjdCwgc3RhdGUsIGZpZWxkcywgZXh0cmEsIG9yaWdpblRva2VuIH0gPSB0b2tlbkluZm87XG4gICAgaWYgKHRva2VuICYmIHRoaXMuX2NvbnRyb2xUb2tlbiA9PT0gdG9rZW4pIHtcbiAgICAgIHRoaXMuc3ViamVjdCA9IHRoaXMuc3ViamVjdCA/PyBzdWJqZWN0ID8/IG51bGw7XG4gICAgICB0aGlzLmlucHV0RGF0YUZpZWxkcyA9IGZpZWxkcztcbiAgICAgIHRoaXMuZXh0cmFEYXRhID0gZXh0cmE7XG4gICAgICB0aGlzLl9vcmlnaW5Ub2tlbiA9IG9yaWdpblRva2VuO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN1YnNjcmliZVNlY3Rpb25BY3RpdmF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1TZWN0aW9ucyA9IHRoaXMuc2VjdGlvbnM7XG4gICAgY29uc3Qgc2VjdGlvbk5hbWVzID0gT2JqZWN0LmtleXMoZm9ybVNlY3Rpb25zKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc2VjdGlvbk5hbWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3Qgc2VjdGlvbk5hbWUgPSBzZWN0aW9uTmFtZXNbaW5kZXhdO1xuICAgICAgY29uc3Qgc2VjdGlvbiA9IGZvcm1TZWN0aW9uc1tzZWN0aW9uTmFtZV07XG4gICAgICBzZWN0aW9uLmFjdGl2YXRpb24uc3Vic2NyaWJlKChjb2RlOiBzdHJpbmcpID0+IHRoaXMubGF1bmNoU2VjdGlvbkFjdGl2YXRpb24oY29kZSkpO1xuICAgICAgc2VjdGlvbi5pbmFjdGl2YXRpb24uc3Vic2NyaWJlKChjb2RlOiBzdHJpbmcpID0+IHRoaXMubGF1bmNoU2VjdGlvbkluYWN0aXZhdGlvbihjb2RlKSk7XG4gICAgICAvLyBBZGljaW9uYWxtZW50ZSBzZSBsZSBwaWRlIGEgbGEgc2VjY2nDs24gc2Ugc3Vic2NyaWJhIGFsIGNhbWJpbyBkZSBlc3RhZG8gZGVsIGZvcm11bGFyaW9cbiAgICAgIHNlY3Rpb24uY29ubmVjdFdpdGhQYXJlbnRGb3JtKHRoaXMsIHRoaXMuc3RhdGVDaGFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZUZpZWxkc1N1YmplY3RzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLmdldEZpZWxkcygpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZvcm1GaWVsZHMpKSB7XG4gICAgICBmb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBmaWVsZC5lZGl0aW9uRmluaXNoLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgeyBjb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uIH0gPSBldmVudDtcbiAgICAgICAgICB0aGlzLnN0YXJ0RmllbGRWYWxpZGF0aW9uKGNvZGUsIGludHJpbnNpY1ZhbGlkYXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgZmllbGQuZWRpdGlvblBhcnRpYWwuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCB7IGNvZGUsIGludHJpbnNpY1ZhbGlkYXRpb24gfSA9IGV2ZW50O1xuICAgICAgICAgIHRoaXMuc3RhcnRGaWVsZElucHV0VmFsaWRhdGlvbihjb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZpZWxkLmRldGFpbFJlcXVlc3Quc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc2hvd0ZpZWxkSW5mbyhldmVudC5jb2RlLCBldmVudC5kZXRhaWwpKTtcbiAgICAgICAgLy8gQWRpY2lvbmFsbWVudGUgc2UgbGUgcGlkZSBhbCBjYW1wbyBzZSBzdWJzY3JpYmEgYWwgY2FtYmlvIGRlIGVzdGFkbyBkZWwgZm9ybXVsYXJpb1xuICAgICAgICBmaWVsZC5jb25uZWN0V2l0aFBhcmVudEZvcm0odGhpcywgdGhpcy5zdGF0ZUNoYW5nZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVBY3Rpb25TdWJqZWN0cygpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtQWN0aW9ucyA9IHRoaXMuZ2V0QWN0aW9ucygpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZvcm1BY3Rpb25zKSkge1xuICAgICAgZm9ybUFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgICBhY3Rpb24uYWN0aW9uQWN0aXZhdGVkLnN1YnNjcmliZShjb2RlID0+IHRoaXMuc3RhcnRBY3Rpb24oY29kZSkpO1xuICAgICAgICAvLyBBZGljaW9uYWxtZW50ZSBzZSBsZSBwaWRlIGEgbGEgYWNjacOzbiBzZSBzdWJzY3JpYmEgYWwgY2FtYmlvIGRlIGVzdGFkbyBkZWwgZm9ybXVsYXJpb1xuICAgICAgICBhY3Rpb24uY29ubmVjdFdpdGhQYXJlbnRGb3JtKHRoaXMsIHRoaXMuc3RhdGVDaGFuZ2UpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3Vic2NyaWJlVGFibGVTdWJqZWN0cygpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtVGFibGVzID0gdGhpcy5nZXRUYWJsZXMoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtVGFibGVzKSkge1xuICAgICAgZm9ybVRhYmxlcy5mb3JFYWNoKHRhYmxlID0+IHtcbiAgICAgICAgdGFibGUuaW5saW5lQWN0aW9uVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlQWN0aW9uKGV2ZW50KSk7XG4gICAgICAgIHRhYmxlLmdsb2JhbEFjdGlvblRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZUdsb2JhbEFjdGlvbihldmVudCkpO1xuICAgICAgICB0YWJsZS5yZWNvcmRTZWxlY3Rpb25UcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVSZWNvcmRTZWxlY3Rpb24oZXZlbnQpKTtcbiAgICAgICAgdGFibGUuc2VsZWN0aW9uQWN0aW9uVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlU2VsZWN0aW9uQWN0aW9uKGV2ZW50KSk7XG4gICAgICAgIHRhYmxlLmdldERhdGFUcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVHZXREYXRhKGV2ZW50KSk7XG4gICAgICAgIC8vIEFkaWNpb25hbG1lbnRlIHNlIGxlIHBpZGUgYSBsYSB0YWJsYSBzZSBzdWJzY3JpYmEgYWwgY2FtYmlvIGRlIGVzdGFkbyBkZWwgZm9ybXVsYXJpb1xuICAgICAgICB0YWJsZS5jb25uZWN0V2l0aFBhcmVudEZvcm0odGhpcywgdGhpcy5zdGF0ZUNoYW5nZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmb3JtSW5pdChwYXJhbXMsIGZvcmNlUmVsb2FkID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgaW5pdGlhbFN0YXRlOiBzdHJpbmcgfCBudWxsID0gdGhpcy5wcmVvY2Vzc0lucHV0UGFyYW1zKHBhcmFtcyk7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHsgcmV0dXJuOyB9XG4gICAgaWYgKGZvcmNlUmVsb2FkIHx8ICF0aGlzLl9kZWZpbml0aW9uT2J0YWluZWQpIHtcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgICBjb25zdCBmb3JtRGVmaW5pdGlvbiA9IGF3YWl0IHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmdldEZvcm1EZWZpbml0aW9uKHRoaXMubmFtZSk7XG4gICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICAgIHRoaXMubG9hZERlZmluaXRpb24oZm9ybURlZmluaXRpb24pXG4gICAgICB0aGlzLl9kZWZpbml0aW9uT2J0YWluZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFuRGF0YSgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3VwcG9ydFN0YXRlKGluaXRpYWxTdGF0ZSA/PyAnJykpIHtcbiAgICAgIGluaXRpYWxTdGF0ZSA9IHRoaXMuZGVmYXVsdFN0YXRlID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGlucHV0RmllbGROYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuaW5wdXREYXRhRmllbGRzKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaW5wdXRGaWVsZE5hbWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgY29kZSA9IGlucHV0RmllbGROYW1lc1tpbmRleF07XG4gICAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5pbnB1dERhdGFGaWVsZHNbY29kZV07XG4gICAgICB0aGlzLnNldEZpZWxkVmFsdWUoY29kZSwgZmllbGRWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuc3Vic2NyaWJlU2VjdGlvbkFjdGl2YXRpb24oKTtcbiAgICB0aGlzLnN1YnNjcmliZUZpZWxkc1N1YmplY3RzKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVBY3Rpb25TdWJqZWN0cygpO1xuICAgIHRoaXMuc3Vic2NyaWJlVGFibGVTdWJqZWN0cygpO1xuICAgIC8vIFNlIGRlZmluZSBlbCBlc3RhZG8gaW5pY2lhbCB5IHNlIHNvbGljaXRhIGxhIGFjY2nDs24gaW5pY2lhbFxuICAgIHRoaXMuY2hhbmdlU3RhdGUoaW5pdGlhbFN0YXRlIHx8IHRoaXMuZGVmYXVsdFN0YXRlKTtcbiAgICBjb25zdCByZWNvcmRSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdEZvcm1BY3Rpb24oZm9ybUFjdGlvbnMuZ2V0RGF0YSk7XG4gICAgdGhpcy5jaGVja0Vycm9yUmVjb3JkUmVjZWl2ZWQocmVjb3JkUmVzcG9uc2UpO1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5lbmFibGVkU2VjdGlvbnMgPSB0aGlzLnZpc2libGVTZWN0aW9ucyA/PyBbXTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgICB0aGlzLmN1c3RvbUZvcm1TdGFydCgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY2hhbmdlU3RhdGUoc3RhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0YXRlQ2hhbmdlZCA9IHN1cGVyLmNoYW5nZVN0YXRlKHN0YXRlID8/ICcnKSA/PyBmYWxzZTtcbiAgICBpZiAoc3RhdGVDaGFuZ2VkKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25NZXRob2RzID0gdGhpcy5fZm9ybUNoYW5nZVN0YXRlO1xuICAgICAgaWYgKGNsaWVudEFjdGlvbk1ldGhvZHMgJiYgY2xpZW50QWN0aW9uTWV0aG9kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2xpZW50QWN0aW9uTWV0aG9kcykge1xuICAgICAgICAgIGNhbGxiYWNrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhdGVDaGFuZ2VkO1xuICB9XG5cbiAgY2hlY2tFcnJvclJlY29yZFJlY2VpdmVkKHJlY29yZFJlc3BvbnNlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGVycm9yIH0gPSByZWNvcmRSZXNwb25zZTtcbiAgICBpZiAoIWVycm9yKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHRoaXMuZXJyb3JDb2RlID0gcmVjb3JkUmVzcG9uc2UuZXJyb3JDb2RlO1xuICAgIHRoaXMuZXJyb3JGdWxsQ29kZSA9IHJlY29yZFJlc3BvbnNlLmVycm9yRnVsbENvZGU7XG4gICAgdGhpcy5lcnJvck5hbWUgPSByZWNvcmRSZXNwb25zZS5lcnJvck5hbWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSByZWNvcmRSZXNwb25zZS5lcnJvck1lc3NhZ2U7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9IHJlY29yZFJlc3BvbnNlLmVycm9yRGV0YWlsO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZXJyb3JPY2N1cmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5lcnJvckNvZGUgIT09IE5PX0VSUk9SKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3BvcnRlIG1hbmVqbyBkZSBldmVudG9zIGRlIGZvcm11bGFyaW9cbiAgICovXG5cbiAgYXN5bmMgcmVxdWVzdEZvcm1BY3Rpb24oYWN0aW9uQ29kZTogc3RyaW5nLCBhY3Rpb25TdWJqZWN0OiBhbnkgPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgYWN0aW9uRGV0YWlsID0ge1xuICAgICAgZm9ybUNvZGU6IHRoaXMubmFtZSxcbiAgICAgIGZvcm1TdWJqZWN0OiB0aGlzLnN1YmplY3QsXG4gICAgICBjdXJyZW50TW9kZTogdGhpcy5zdGF0ZSxcbiAgICAgIGFjdGlvbkNvZGUsXG4gICAgICBhY3Rpb25TdWJqZWN0LFxuICAgICAgdmVyc2lvbjogUEFZTE9BRF9WRVJTSU9OLFxuICAgICAgZm9ybURhdGE6IHRoaXMuZ2V0UGF5bG9hZCgpLFxuICAgICAgaW1tdXRhYmxlRGF0YTogdGhpcy5pbW11dGFibGVEYXRhLFxuICAgIH07XG4gICAgdGhpcy5lcnJvckNvZGUgPSBOT19FUlJPUjtcbiAgICB0aGlzLmVycm9yRnVsbENvZGUgPSAnJztcbiAgICB0aGlzLmVycm9yTmFtZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9ICcnO1xuICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgY29uc3QgZm9ybUFjdGlvblJlc3BvbnNlOiBhbnkgPSBhd2FpdCB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5leGVjU2VydmVyQWN0aW9uKGFjdGlvbkRldGFpbCk7XG4gICAgaWYgKCFmb3JtQWN0aW9uUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICBpZiAoZm9ybUFjdGlvblJlc3BvbnNlLmhhc0Vycm9yKCkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZm9ybUFjdGlvblJlc3BvbnNlLmVycm9yO1xuICAgICAgdGhpcy5lcnJvckNvZGUgPSBlcnJvci5lcnJvckNvZGU7XG4gICAgICB0aGlzLmVycm9yRnVsbENvZGUgPSBlcnJvci5lcnJvckZ1bGxDb2RlO1xuICAgICAgdGhpcy5lcnJvck5hbWUgPSBlcnJvci5lcnJvck5hbWU7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yLmVycm9yTWVzc2FnZTtcbiAgICAgIHRoaXMuZXJyb3JEZXRhaWwgPSBlcnJvci5lcnJvckRldGFpbDtcbiAgICB9XG4gICAgY29uc3QgZm9ybVJlc3BvbnNlRGF0YSA9IGZvcm1BY3Rpb25SZXNwb25zZS5nZXREYXRhKCk7XG4gICAgdGhpcy51cGRhdGVGb3JtV2l0aFNlcnZlckRhdGEoZm9ybVJlc3BvbnNlRGF0YSk7XG4gICAgcmV0dXJuIGZvcm1SZXNwb25zZURhdGE7XG4gIH1cblxuICB1cGRhdGVGb3JtV2l0aFNlcnZlckRhdGEoZm9ybUNvbnRlbnQ6IGFueSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnRNb2RlLCBmb3JtU3ViamVjdCwgYWN0aW9ucywgZmllbGRzLCByZWNvcmRUYWJsZXMsXG4gICAgICByZXR1cm5lZEZpbGUsIGltbXV0YWJsZURhdGEsIGV4dHJhSW5mbyxcbiAgICB9ID0gZm9ybUNvbnRlbnQ7XG4gICAgY3VycmVudE1vZGUgJiYgdGhpcy5jaGFuZ2VTdGF0ZShjdXJyZW50TW9kZSk7XG4gICAgaWYgKGZvcm1TdWJqZWN0KSB7IHRoaXMuc3ViamVjdCA9IGZvcm1TdWJqZWN0OyB9XG4gICAgaWYgKGFjdGlvbnMgJiYgYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5nZWRBY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgICBjb25zdCBhY3Rpb25PYmplY3QgPSB0aGlzLmdldEFjdGlvbihjaGFuZ2VkQWN0aW9uLmFjdGlvbkNvZGUpO1xuICAgICAgICBpZiAoYWN0aW9uT2JqZWN0KSB7IGFjdGlvbk9iamVjdC51cGRhdGVGcm9tU2VydmVyKGNoYW5nZWRBY3Rpb24pOyB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgY2hhbmdlZEZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICBjb25zdCBmaWVsZE9iamVjdCA9IHRoaXMuZ2V0RmllbGQoY2hhbmdlZEZpZWxkLmZpZWxkQ29kZSk7XG4gICAgICAgIGlmIChmaWVsZE9iamVjdCkge1xuICAgICAgICAgIGZpZWxkT2JqZWN0LnVwZGF0ZUZyb21TZXJ2ZXIoY2hhbmdlZEZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVjb3JkVGFibGVzICYmIHJlY29yZFRhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5nZWRUYWJsZSBvZiByZWNvcmRUYWJsZXMpIHtcbiAgICAgICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNoYW5nZWRUYWJsZS50YWJsZUNvZGUpO1xuICAgICAgICBpZiAodGFibGVPYmplY3QpIHtcbiAgICAgICAgICB0YWJsZU9iamVjdC51cGRhdGVGcm9tU2VydmVyKGNoYW5nZWRUYWJsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJldHVybmVkRmlsZSAmJiByZXR1cm5lZEZpbGUuZmlsZSkge1xuICAgICAgdGhpcy5maWxlTWdtdFNlcnZpY2VzLnNhdmVGaWxlKHJldHVybmVkRmlsZS5maWxlLCByZXR1cm5lZEZpbGUubmFtZSwgcmV0dXJuZWRGaWxlLnR5cGUpO1xuICAgIH1cbiAgICB0aGlzLmltbXV0YWJsZURhdGEgPSBpbW11dGFibGVEYXRhO1xuICAgIHRoaXMuZXh0cmFJbmZvID0gZXh0cmFJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmVqbyBkZSBldmVudCBoYW5kbGVycyBwYXJhIGVycm9yZXMgU2VydmVyIGRlbCBmb3JtdWxhcmlvXG4gICAqL1xuXG4gIGNsZWFuQWN0aW9uU2VydmVyRXJyb3IoKSB7IHRoaXMuX2FjdGlvblNlcnZlckVycm9yID0gW107IH1cbiAgY2xlYW5GaWVsZFNlcnZlckVycm9yKCkgeyB0aGlzLl9maWVsZFNlcnZlckVycm9yID0gW107IH1cbiAgY2xlYW5UYWJsZVNlcnZlckVycm9yKCkgeyB0aGlzLl90YWJsZVNlcnZlckVycm9yID0gW107IH1cbiAgb25BY3Rpb25TZXJ2ZXJFcnJvcihjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHsgdGhpcy5fYWN0aW9uU2VydmVyRXJyb3IucHVzaCh7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0pOyB9XG4gIG9uVmFsaWRhdGlvblNlcnZlckVycm9yKGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkgeyB0aGlzLl9maWVsZFNlcnZlckVycm9yLnB1c2goeyBjYWxsYmFjaywgcHJvcGVydGllcyB9KTsgfVxuICBvblRhYmxlU2VydmVyRXJyb3IoY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7IHRoaXMuX3RhYmxlU2VydmVyRXJyb3IucHVzaCh7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0pOyB9XG5cbiAgLyoqXG4gICAqIE1hbmVqbyBkZSBldmVudCBoYW5kbGVycyBwYXJhIGFjY2lvbmVzIHNvYnJlIGVsIGZvcm11bGFyaW9cbiAgICovXG5cbiAgb25Gb3JtQ2hhbmdlKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fZm9ybUNoYW5nZVN0YXRlLnB1c2goY2FsbGJhY2spO1xuICB9XG5cbiAgb25TZWN0aW9uQ2FuRGVhY3RpdmF0ZShjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICBjb25zdCBzZWN0aW9uU2V0ID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBzZWN0aW9uU2V0LmZvckVhY2goKHNlY3Rpb25OYW1lKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2Zvcm1TZWN0aW9uc0NhbkRlYWN0aXZhdGVbc2VjdGlvbk5hbWVdKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1TZWN0aW9uc0NhbkRlYWN0aXZhdGVbc2VjdGlvbk5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9mb3JtU2VjdGlvbnNDYW5EZWFjdGl2YXRlW3NlY3Rpb25OYW1lXS5wdXNoKHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSk7XG4gICAgfSk7XG4gIH1cblxuICBvblNlY3Rpb25BY3RpdmF0aW9uKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIGNvbnN0IHNlY3Rpb25TZXQgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIHNlY3Rpb25TZXQuZm9yRWFjaCgoc2VjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZm9ybVNlY3Rpb25zQWN0aXZhdGVbc2VjdGlvbk5hbWVdKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1TZWN0aW9uc0FjdGl2YXRlW3NlY3Rpb25OYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5fZm9ybVNlY3Rpb25zQWN0aXZhdGVbc2VjdGlvbk5hbWVdLnB1c2goeyBjYWxsYmFjaywgcHJvcGVydGllcyB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VjdGlvbkluYWN0aXZhdGlvbihjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICBjb25zdCBzZWN0aW9uU2V0ID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBzZWN0aW9uU2V0LmZvckVhY2goKHNlY3Rpb25OYW1lKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2Zvcm1TZWN0aW9uc0luYWN0aXZhdGVbc2VjdGlvbk5hbWVdKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1TZWN0aW9uc0luYWN0aXZhdGVbc2VjdGlvbk5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9mb3JtU2VjdGlvbnNJbmFjdGl2YXRlW3NlY3Rpb25OYW1lXS5wdXNoKHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSk7XG4gICAgfSk7XG4gIH1cblxuICBvbkFjdGlvblN0YXJ0KGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIGNvbnN0IGFjdGlvblNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgYWN0aW9uU2V0LmZvckVhY2goKGFjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZm9ybUFjdGlvbnNTdGFydFthY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLl9mb3JtQWN0aW9uc1N0YXJ0W2FjdGlvbk5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9mb3JtQWN0aW9uc1N0YXJ0W2FjdGlvbk5hbWVdLnB1c2goeyBjYWxsYmFjaywgcHJvcGVydGllcyB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uQWN0aW9uRmluaXNoKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIGNvbnN0IGFjdGlvblNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgYWN0aW9uU2V0LmZvckVhY2goKGFjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZm9ybUFjdGlvbnNGaW5pc2hbYWN0aW9uTmFtZV0pIHtcbiAgICAgICAgdGhpcy5fZm9ybUFjdGlvbnNGaW5pc2hbYWN0aW9uTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Zvcm1BY3Rpb25zRmluaXNoW2FjdGlvbk5hbWVdLnB1c2goeyBjYWxsYmFjaywgcHJvcGVydGllcyB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVNlY3Rpb25BY3RpdmF0aW9uKGNvZGU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHNlY3Rpb25PYmplY3QgPSB0aGlzLmdldFNlY3Rpb24oY29kZSk7XG4gICAgaWYgKCFzZWN0aW9uT2JqZWN0KSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2RzID0gdGhpcy5fZm9ybVNlY3Rpb25zQ2FuRGVhY3RpdmF0ZVtjb2RlXTtcbiAgICBpZiAoY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGZvciAoY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZCBvZiBjbGllbnRTZWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0gPSBjbGllbnRTZWN0aW9uTWV0aG9kO1xuICAgICAgICBjb25zdCBjYW5BY3RpdmF0ZSA9IGNhbGxiYWNrKHNlY3Rpb25PYmplY3QpO1xuICAgICAgICBpZiAoY2FuQWN0aXZhdGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgbGF1bmNoU2VjdGlvbkFjdGl2YXRpb24oY29kZTogc3RyaW5nKSB7XG4gICAgdGhpcy5ub3RpZnlGb3JtQWN0aXZpdHkoKTtcbiAgICBjb25zdCBzZWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRTZWN0aW9uKGNvZGUpO1xuICAgIGlmICghc2VjdGlvbk9iamVjdCkgeyByZXR1cm47IH1cbiAgICBjb25zdCBjbGllbnRTZWN0aW9uTWV0aG9kcyA9IHRoaXMuX2Zvcm1TZWN0aW9uc0FjdGl2YXRlW2NvZGVdO1xuICAgIGlmIChjbGllbnRTZWN0aW9uTWV0aG9kcykge1xuICAgICAgZm9yIChjb25zdCBjbGllbnRTZWN0aW9uTWV0aG9kIG9mIGNsaWVudFNlY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSA9IGNsaWVudFNlY3Rpb25NZXRob2Q7XG4gICAgICAgIGNhbGxiYWNrKHNlY3Rpb25PYmplY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxhdW5jaFNlY3Rpb25JbmFjdGl2YXRpb24oY29kZTogc3RyaW5nKSB7XG4gICAgdGhpcy5ub3RpZnlGb3JtQWN0aXZpdHkoKTtcbiAgICBjb25zdCBzZWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRTZWN0aW9uKGNvZGUpO1xuICAgIGlmICghc2VjdGlvbk9iamVjdCkgeyByZXR1cm47IH1cbiAgICBjb25zdCBjbGllbnRTZWN0aW9uTWV0aG9kcyA9IHRoaXMuX2Zvcm1TZWN0aW9uc0luYWN0aXZhdGVbY29kZV07XG4gICAgaWYgKGNsaWVudFNlY3Rpb25NZXRob2RzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2Qgb2YgY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcHJvcGVydGllcyB9ID0gY2xpZW50U2VjdGlvbk1ldGhvZDtcbiAgICAgICAgY2FsbGJhY2soc2VjdGlvbk9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRBY3Rpb24oY29kZTogc3RyaW5nKSB7XG4gICAgdGhpcy5ub3RpZnlGb3JtQWN0aXZpdHkoKTtcbiAgICBjb25zdCBhY3Rpb25PYmplY3QgPSB0aGlzLmdldEFjdGlvbihjb2RlKTtcbiAgICBpZiAoIWFjdGlvbk9iamVjdCkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBhY3Rpb25PYmplY3Quc3RhcnQoKTtcbiAgICBjb25zdCBjbGllbnRBY3Rpb25NZXRob2RzID0gdGhpcy5fZm9ybUFjdGlvbnNTdGFydFtjb2RlXTtcbiAgICBpZiAoY2xpZW50QWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudEFjdGlvbk1ldGhvZCBvZiBjbGllbnRBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSA9IGNsaWVudEFjdGlvbk1ldGhvZDtcbiAgICAgICAgY29uc3QgY29udGludWVBY3Rpb25Qcm9taXNlID0gY2FsbGJhY2soYWN0aW9uT2JqZWN0KTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjb250aW51ZUFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgKGN1cnIgIT09IGZhbHNlKSksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICBhY3Rpb25PYmplY3Quc3RvcCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRTZXJ2ZXJBY3Rpb24oYWN0aW9uT2JqZWN0KTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2VydmVyQWN0aW9uKGFjdGlvbklucHV0KSB7XG4gICAgY29uc3QgYWN0aW9uID0gKHR5cGVvZiBhY3Rpb25JbnB1dCA9PT0gJ3N0cmluZycpXG4gICAgICA/IHRoaXMuZ2V0QWN0aW9uKGFjdGlvbklucHV0KSA6IGFjdGlvbklucHV0O1xuICAgIGlmICghYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBzZXJ2ZXJFcnJvciA9IGZhbHNlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChhY3Rpb24uYmFja2VuZCkge1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0Rm9ybUFjdGlvbihhY3Rpb24uYWN0aW9uQ29kZSk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuZmluaXNoQWN0aW9uKGFjdGlvbiwgYWN0aW9uUmVzdWx0LCBzZXJ2ZXJFcnJvcik7XG4gICAgc2VydmVyRXJyb3IgPSAhIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgaWYgKCFzZXJ2ZXJFcnJvcikge1xuICAgICAgYWN0aW9uLm5ld1N0YXRlICYmIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2FjdGlvblNlcnZlckVycm9yLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0gPSB0aGlzLl9hY3Rpb25TZXJ2ZXJFcnJvcltpbmRleF07XG4gICAgICAgIGNhbGxiYWNrKGFjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICAgIGFjdGlvbi5zdG9wKCk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hBY3Rpb24oYWN0aW9uLCBhY3Rpb25SZXN1bHQsIHNlcnZlckVycm9yID0gZmFsc2UpIHtcbiAgICBjb25zdCBmaW5pc2hBY3Rpb25NZXRob2RzID0gdGhpcy5fZm9ybUFjdGlvbnNGaW5pc2hbYWN0aW9uLmFjdGlvbkNvZGVdO1xuICAgIGlmIChmaW5pc2hBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlczogYW55W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgY2xpZW50QWN0aW9uTWV0aG9kIG9mIGZpbmlzaEFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcHJvcGVydGllcyB9ID0gY2xpZW50QWN0aW9uTWV0aG9kO1xuICAgICAgICBjb25zdCBjb250aW51ZU9uRXJyb3IgPSBwcm9wZXJ0aWVzPy5jb250aW51ZU9uRXJyb3IgPz8gZmFsc2U7XG4gICAgICAgIGlmIChjYWxsYmFjayAmJiAoIXNlcnZlckVycm9yIHx8IGNvbnRpbnVlT25FcnJvcikpIHtcbiAgICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNhbGxiYWNrKGFjdGlvbiwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBjb21wbGV0ZUdsb2JhbEFjdGlvbihhY3Rpb246IGFueSkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0U2VydmVyQWN0aW9uKGFjdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogTWFuZWphZG9yZXMgZGUgZXZlbnRvcyBwYXJhIHZhbGlkYWNpb25lcyBzb2JyZSBjYW1wb3NcbiAgICovXG5cbiAgb25GaWVsZElucHV0KGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIGNvbnN0IGZpZWxkU2V0ID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBmaWVsZFNldC5mb3JFYWNoKChjb2RlKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2ZpZWxkSW5wdXRWYWxpZGF0aW9uW2NvZGVdKSB7XG4gICAgICAgIHRoaXMuX2ZpZWxkSW5wdXRWYWxpZGF0aW9uW2NvZGVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9maWVsZElucHV0VmFsaWRhdGlvbltjb2RlXS5wdXNoKHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSk7XG4gICAgfSk7XG4gIH1cblxuICBvbkZpZWxkVmFsaWRhdGlvblN0YXJ0KGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIGNvbnN0IGZpZWxkU2V0ID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBmaWVsZFNldC5mb3JFYWNoKChjb2RlKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNTdGFydFtjb2RlXSkge1xuICAgICAgICB0aGlzLl9maWVsZFZhbGlkYXRpb25zU3RhcnRbY29kZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNTdGFydFtjb2RlXS5wdXNoKHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSk7XG4gICAgfSk7XG4gIH1cblxuICBvbkZpZWxkVmFsaWRhdGlvbkZpbmlzaChjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICBjb25zdCBmaWVsZFNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgZmllbGRTZXQuZm9yRWFjaCgoY29kZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9maWVsZFZhbGlkYXRpb25zRmluaXNoW2NvZGVdKSB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNGaW5pc2hbY29kZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNGaW5pc2hbY29kZV0ucHVzaCh7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRGaWVsZElucHV0VmFsaWRhdGlvbihjb2RlOiBzdHJpbmcsIGludHJpbnNpY1ZhbGlkYXRpb246IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5ub3RpZnlGb3JtQWN0aXZpdHkoKTtcbiAgICBjb25zdCBmaWVsZFRvVmFsaWRhdGUgPSB0aGlzLmdldEZpZWxkKGNvZGUpO1xuICAgIGlmICghZmllbGRUb1ZhbGlkYXRlKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGNvbnN0IHZhbGlkYXRpb25DYWxsYmFja3MgPSB0aGlzLl9maWVsZElucHV0VmFsaWRhdGlvbltjb2RlXTtcbiAgICBpZiAodmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgY29uc3QgY2xpZW50VmFsaWRhdGlvblByb21pc2VzOiBhbnlbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uTWV0aG9kIG9mIHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcHJvcGVydGllcyB9ID0gdmFsaWRhdGlvbk1ldGhvZDtcbiAgICAgICAgY29uc3QgY29udGludWVWYWxpZGF0aW9uUHJvbWlzZSA9IGNhbGxiYWNrKGZpZWxkVG9WYWxpZGF0ZSk7XG4gICAgICAgIGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcy5wdXNoKGNvbnRpbnVlVmFsaWRhdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50VmFsaWRhdGlvblByb21pc2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBzdGFydEZpZWxkVmFsaWRhdGlvbihjb2RlOiBzdHJpbmcsIGludHJpbnNpY1ZhbGlkYXRpb246IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5ub3RpZnlGb3JtQWN0aXZpdHkoKTtcbiAgICBjb25zdCBmaWVsZFRvVmFsaWRhdGUgPSB0aGlzLmdldEZpZWxkKGNvZGUpO1xuICAgIGlmICghZmllbGRUb1ZhbGlkYXRlKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHZhbGlkYXRpb25DYWxsYmFja3MgPSB0aGlzLl9maWVsZFZhbGlkYXRpb25zU3RhcnRbY29kZV07XG4gICAgaWYgKHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgIGNvbnN0IGNsaWVudFZhbGlkYXRpb25Qcm9taXNlczogYW55W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbk1ldGhvZCBvZiB2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSA9IHZhbGlkYXRpb25NZXRob2Q7XG4gICAgICAgIGNvbnN0IGNsaWVudFZhbGlkYXRpb25Qcm9taXNlID0gY2FsbGJhY2soZmllbGRUb1ZhbGlkYXRlKTtcbiAgICAgICAgY2xpZW50VmFsaWRhdGlvblByb21pc2VzLnB1c2goY2xpZW50VmFsaWRhdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50VmFsaWRhdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVWYWxpZGF0aW9uID0gY2xpZW50VmFsaWRhdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIChjdXJyICE9PSBmYWxzZSkpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVWYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGludHJpbnNpY1ZhbGlkYXRpb24pIHtcbiAgICAgIHRoaXMuc3RhcnRTZXJ2ZXJGaWVsZFZhbGlkYXRpb24oZmllbGRUb1ZhbGlkYXRlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFNlcnZlckZpZWxkVmFsaWRhdGlvbihpbnB1dEZpZWxkOiBzdHJpbmcgfCBGaWVsZERlc2NyaXB0b3IpIHtcbiAgICBjb25zdCBmaWVsZE9iajogRmllbGREZXNjcmlwdG9yIHwgbnVsbCA9ICh0eXBlb2YgaW5wdXRGaWVsZCA9PT0gJ3N0cmluZycpXG4gICAgICA/IHRoaXMuZ2V0RmllbGQoaW5wdXRGaWVsZCkgOiBpbnB1dEZpZWxkO1xuICAgIGxldCBzZXJ2ZXJFcnJvciA9IGZhbHNlO1xuICAgIGxldCB2YWxpZGF0aW9uUmVzdWx0OiBib29sZWFuID0gdHJ1ZTtcbiAgICBpZiAoIWZpZWxkT2JqKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChmaWVsZE9iai5iYWNrZW5kKSB7XG4gICAgICBmaWVsZE9iai52YWxpZGF0aW5nID0gdHJ1ZTtcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy52YWxpZGF0ZSwgZmllbGRPYmouY29kZSk7XG4gICAgICBzZXJ2ZXJFcnJvciA9ICEhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKHNlcnZlckVycm9yKSB7XG4gICAgICBmaWVsZE9iaj8uc2V0RXJyb3JDb2RlKHRoaXMuZXJyb3JDb2RlKTtcbiAgICAgIGZpZWxkT2JqPy5zZXRFcnJvck1lc3NhZ2UodGhpcy5lcnJvck1lc3NhZ2UpO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2ZpZWxkU2VydmVyRXJyb3IubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSA9IHRoaXMuX2ZpZWxkU2VydmVyRXJyb3JbaW5kZXhdO1xuICAgICAgICBjYWxsYmFjayhmaWVsZE9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuZmluaXNoRmllbGRWYWxpZGF0aW9uKGZpZWxkT2JqLCB2YWxpZGF0aW9uUmVzdWx0LCBzZXJ2ZXJFcnJvcik7XG4gICAgZmllbGRPYmoudmFsaWRhdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoRmllbGRWYWxpZGF0aW9uKGZpZWxkT2JqZWN0OiBhbnksIHZhbGlkYXRpb25SZXN1bHQ6IGJvb2xlYW4sIHNlcnZlckVycm9yID0gZmFsc2UpIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uQ2FsbGJhY2tzID0gdGhpcy5fZmllbGRWYWxpZGF0aW9uc0ZpbmlzaFtmaWVsZE9iamVjdC5jb2RlXTtcbiAgICBpZiAodmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb25NZXRob2Qgb2YgdmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0gPSB2YWxpZGF0aW9uTWV0aG9kO1xuICAgICAgICBjb25zdCBjb250aW51ZU9uRXJyb3IgPSBwcm9wZXJ0aWVzPy5jb250aW51ZU9uRXJyb3IgPz8gZmFsc2U7XG4gICAgICAgIGlmICghc2VydmVyRXJyb3IgfHwgY29udGludWVPbkVycm9yKSB7XG4gICAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjYWxsYmFjayhmaWVsZE9iamVjdCwgdmFsaWRhdGlvblJlc3VsdCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY29udGludWVGaWVsZFZhbGlkYXRpb24oY29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRTZXJ2ZXJGaWVsZFZhbGlkYXRpb24oY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogTWFuZWphZG9yZXMgZGUgZXZlbnRvcyBwYXJhIGFjY2lvbmVzIHNvYnJlIFRhYmxhc1xuICAgKi9cblxuICBvblRhYmxlQWN0aW9uU3RhcnQoY29kZTogc3RyaW5nLCBhY3Rpb25Db2RlOiBzdHJpbmcsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZShjb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlubGluZUFjdGlvbk9iamVjdCA9IHRhYmxlT2JqZWN0LmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgICBpZiAoIWlubGluZUFjdGlvbk9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzOiBhbnk7XG4gICAgaWYgKHRoaXMuX3RhYmxlQWN0aW9uc1N0YXJ0W2NvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNTdGFydFtjb2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0ge307XG4gICAgICB0aGlzLl90YWJsZUFjdGlvbnNTdGFydFtjb2RlXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgaWYgKCF0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA9IFtdO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0ucHVzaCh7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0pO1xuICB9XG5cbiAgb25UYWJsZUFjdGlvbkZpbmlzaChjb2RlOiBzdHJpbmcsIGFjdGlvbkNvZGU6IHN0cmluZywgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5saW5lQWN0aW9uT2JqZWN0ID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghaW5saW5lQWN0aW9uT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnM6IGFueTtcbiAgICBpZiAodGhpcy5fdGFibGVBY3Rpb25zRmluaXNoW2NvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNGaW5pc2hbY29kZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHt9O1xuICAgICAgdGhpcy5fdGFibGVBY3Rpb25zRmluaXNoW2NvZGVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICBpZiAoIXRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdID0gW107XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXS5wdXNoKHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSk7XG4gIH1cblxuICBvblRhYmxlU2VsZWN0aW9uU3RhcnQoY29kZTogc3RyaW5nLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUoY29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkgeyByZXR1cm47IH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzOiBhbnlbXTtcbiAgICBpZiAodGhpcy5fdGFibGVTZWxlY3Rpb25zU3RhcnRbY29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlU2VsZWN0aW9uc1N0YXJ0W2NvZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSBbXTtcbiAgICAgIHRoaXMuX3RhYmxlU2VsZWN0aW9uc1N0YXJ0W2NvZGVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnMucHVzaCh7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0pO1xuICB9XG5cbiAgb25UYWJsZVNlbGVjdGlvbkZpbmlzaChjb2RlOiBzdHJpbmcsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZShjb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnM6IGFueVtdO1xuICAgIGlmICh0aGlzLl90YWJsZVNlbGVjdGlvbnNGaW5pc2hbY29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlU2VsZWN0aW9uc0ZpbmlzaFtjb2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gW107XG4gICAgICB0aGlzLl90YWJsZVNlbGVjdGlvbnNGaW5pc2hbY29kZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVycy5wdXNoKHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSk7XG4gIH1cblxuICBvblRhYmxlR2V0RGF0YVN0YXJ0KGNvZGU6IHN0cmluZywgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVyczogYW55W107XG4gICAgaWYgKHRoaXMuX3RhYmxlR2V0RGF0YVN0YXJ0W2NvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUdldERhdGFTdGFydFtjb2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gW107XG4gICAgICB0aGlzLl90YWJsZUdldERhdGFTdGFydFtjb2RlXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzLnB1c2goeyBjYWxsYmFjaywgcHJvcGVydGllcyB9KTtcbiAgfVxuXG4gIG9uVGFibGVHZXREYXRhRmluaXNoKGNvZGU6IHN0cmluZywgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVyczogYW55O1xuICAgIGlmICh0aGlzLl90YWJsZUdldERhdGFGaW5pc2hbY29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlR2V0RGF0YUZpbmlzaFtjb2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0ge307XG4gICAgICB0aGlzLl90YWJsZUdldERhdGFGaW5pc2hbY29kZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVyc1tHRVRfREFUQV9BQ1RJT05dID0geyBjYWxsYmFjaywgcHJvcGVydGllcyB9O1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZUdsb2JhbEFjdGlvbih0YWJsZUFjdGlvbkV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vdGlmeUZvcm1BY3Rpdml0eSgpO1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbkNvZGUpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgYWN0aW9uID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHRhYmxlQWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICBhY3Rpb24sXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgIH07XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zU3RhcnRbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0gPSB0YWJsZUFjdGlvbk1ldGhvZDtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IGNhbGxiYWNrKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIChjdXJyICE9PSBmYWxzZSkpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlcnZlckdsb2JhbEFjdGlvbih0YWJsZUFjdGlvbkRldGFpbDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZU9iamVjdCwgYWN0aW9uLCB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgc2VydmVyRXJyb3IgPSBmYWxzZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoYWN0aW9uLmJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogR0xPQkFMX0FDVElPTixcbiAgICAgICAgYWN0aW9uQ29kZVxuICAgICAgfTtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnRhYmxlQWN0aW9uLCBhY3Rpb25TdWJqZWN0KTtcbiAgICAgIHNlcnZlckVycm9yID0gISF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmZpbmlzaFRhYmxlR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQsIHNlcnZlckVycm9yKTtcbiAgICBpZiAoIXNlcnZlckVycm9yKSB7XG4gICAgICBhY3Rpb24ubmV3U3RhdGUgJiYgdGhpcy5jaGFuZ2VTdGF0ZShhY3Rpb24ubmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fdGFibGVTZXJ2ZXJFcnJvci5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcHJvcGVydGllcyB9ID0gdGhpcy5fdGFibGVTZXJ2ZXJFcnJvcltpbmRleF07XG4gICAgICAgIGNhbGxiYWNrKHRhYmxlT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnksIGFjdGlvblJlc3VsdCwgc2VydmVyRXJyb3IgPSBmYWxzZSkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0gPSB0YWJsZUFjdGlvbk1ldGhvZDtcbiAgICAgICAgY29uc3QgY29udGludWVPbkVycm9yID0gcHJvcGVydGllcz8uY29udGludWVPbkVycm9yID8/IGZhbHNlO1xuICAgICAgICBpZiAoIXNlcnZlckVycm9yIHx8IGNvbnRpbnVlT25FcnJvcikge1xuICAgICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2FsbGJhY2sodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZUFjdGlvbih0YWJsZUFjdGlvbkV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vdGlmeUZvcm1BY3Rpdml0eSgpO1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlLCBhY3Rpb25EZXRhaWwgfSA9IHRhYmxlQWN0aW9uRXZlbnQ7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlQ29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uQ29kZSkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB7IHJlY29yZElkLCByZWNvcmREYXRhIH0gPSBhY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgYWN0aW9uID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHRhYmxlQWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICBhY3Rpb24sXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgcmVjb3JkSWQsXG4gICAgICByZWNvcmREYXRhXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNTdGFydFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlczogYW55W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSA9IHRhYmxlQWN0aW9uTWV0aG9kO1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gY2FsbGJhY2sodGFibGVBY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgKGN1cnIgIT09IGZhbHNlKSksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlckFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCBhY3Rpb24sIHRhYmxlQ29kZSwgYWN0aW9uQ29kZSwgcmVjb3JkSWQsIHJlY29yZERhdGEgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgc2VydmVyRXJyb3IgPSBmYWxzZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoYWN0aW9uLmJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5mb3JtQ29uZmlnPy50YWJsZUFjdGlvbnMuaW5saW5lLFxuICAgICAgICBhY3Rpb25Db2RlLFxuICAgICAgICB0YWJsZVJlY29yZElkOiByZWNvcmRJZCxcbiAgICAgICAgdGFibGVSZWNvcmREYXRhOiByZWNvcmREYXRhXG4gICAgICB9O1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgICAucmVxdWVzdEZvcm1BY3Rpb24oZm9ybUFjdGlvbnMudGFibGVBY3Rpb24sIGFjdGlvblN1YmplY3QpO1xuICAgICAgc2VydmVyRXJyb3IgPSAhIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuZmluaXNoVGFibGVBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCwgc2VydmVyRXJyb3IpO1xuICAgIGlmICghc2VydmVyRXJyb3IpIHtcbiAgICAgIGFjdGlvbi5uZXdTdGF0ZSAmJiB0aGlzLmNoYW5nZVN0YXRlKGFjdGlvbi5uZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGNvbXBsZXRlSW5saW5lQWN0aW9uKHRhYmxlQWN0aW9uOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFRhYmxlU2VydmVyQWN0aW9uKHRhYmxlQWN0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnksIGFjdGlvblJlc3VsdCwgc2VydmVyRXJyb3IgPSBmYWxzZSkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0gPSB0YWJsZUFjdGlvbk1ldGhvZDtcbiAgICAgICAgY29uc3QgY29udGludWVPbkVycm9yID0gcHJvcGVydGllcz8uY29udGludWVPbkVycm9yID8/IGZhbHNlO1xuICAgICAgICBpZiAoIXNlcnZlckVycm9yIHx8IGNvbnRpbnVlT25FcnJvcikge1xuICAgICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2FsbGJhY2sodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVJlY29yZFNlbGVjdGlvbih0YWJsZUFjdGlvbkV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vdGlmeUZvcm1BY3Rpdml0eSgpO1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25EZXRhaWwgfSA9IHRhYmxlQWN0aW9uRXZlbnQ7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlQ29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB7IHJlY29yZElkLCByZWNvcmREYXRhIH0gPSBhY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVTZWxlY3Rpb25EZXRhaWwgPSB7XG4gICAgICB0YWJsZU9iamVjdCxcbiAgICAgIHRhYmxlQ29kZSxcbiAgICAgIHJlY29yZElkLFxuICAgICAgcmVjb3JkRGF0YVxuICAgIH07XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVTZWxlY3Rpb25zU3RhcnRbdGFibGVDb2RlXTtcbiAgICBpZiAodGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlczogYW55W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVTZWxlY3Rpb25NZXRob2Qgb2YgdGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSA9IHRhYmxlU2VsZWN0aW9uTWV0aG9kO1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gY2FsbGJhY2sodGFibGVTZWxlY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgKGN1cnIgIT09IGZhbHNlKSksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlclJlY29yZFNlbGVjdGlvbih0YWJsZVNlbGVjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyUmVjb3JkU2VsZWN0aW9uKHRhYmxlU2VsZWN0aW9uRGV0YWlsOiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCB0YWJsZUNvZGUsIHJlY29yZElkLCByZWNvcmREYXRhIH0gPSB0YWJsZVNlbGVjdGlvbkRldGFpbDtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGxldCBzZXJ2ZXJFcnJvciA9IGZhbHNlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmICh0YWJsZU9iamVjdC5zZWxlY3Rpb25CYWNrZW5kKSB7XG4gICAgICBjb25zdCBhY3Rpb25TdWJqZWN0OiBhbnkgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5mb3JtQ29uZmlnPy50YWJsZUFjdGlvbnMucm93U2VsZWN0aW9uLFxuICAgICAgICBhY3Rpb25Db2RlOiBudWxsLFxuICAgICAgICB0YWJsZVJlY29yZElkOiByZWNvcmRJZCxcbiAgICAgICAgdGFibGVSZWNvcmREYXRhOiByZWNvcmREYXRhXG4gICAgICB9O1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgICAucmVxdWVzdEZvcm1BY3Rpb24oZm9ybUFjdGlvbnMudGFibGVBY3Rpb24sIGFjdGlvblN1YmplY3QpO1xuICAgICAgc2VydmVyRXJyb3IgPSAhIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuZmluaXNoVGFibGVSZWNvcmRTZWxlY3Rpb24odGFibGVTZWxlY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCwgc2VydmVyRXJyb3IpO1xuICAgIGlmIChzZXJ2ZXJFcnJvcikge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVSZWNvcmRTZWxlY3Rpb24odGFibGVTZWxlY3Rpb25EZXRhaWw6IGFueSwgYWN0aW9uUmVzdWx0LCBzZXJ2ZXJFcnJvciA9IGZhbHNlKSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUgfSA9IHRhYmxlU2VsZWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlU2VsZWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGlmICh0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzOiBhbnlbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZVNlbGVjdGlvbk1ldGhvZCBvZiB0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcHJvcGVydGllcyB9ID0gdGFibGVTZWxlY3Rpb25NZXRob2Q7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlT25FcnJvciA9IHByb3BlcnRpZXM/LmNvbnRpbnVlT25FcnJvciA/PyBmYWxzZTtcbiAgICAgICAgaWYgKCFzZXJ2ZXJFcnJvciB8fCBjb250aW51ZU9uRXJyb3IpIHtcbiAgICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNhbGxiYWNrKHRhYmxlU2VsZWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25FdmVudDogYW55KSB7XG4gICAgdGhpcy5ub3RpZnlGb3JtQWN0aXZpdHkoKTtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSwgYWN0aW9uRGV0YWlsIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbkNvZGUpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgeyBzZWxlY3RlZFJlY29yZHMgfSA9IGFjdGlvbkRldGFpbDtcbiAgICBjb25zdCBhY3Rpb24gPSB0YWJsZU9iamVjdC5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgdGFibGVBY3Rpb25EZXRhaWwgPSB7XG4gICAgICB0YWJsZU9iamVjdCxcbiAgICAgIGFjdGlvbixcbiAgICAgIHRhYmxlQ29kZSxcbiAgICAgIGFjdGlvbkNvZGUsXG4gICAgICBzZWxlY3RlZFJlY29yZHNcbiAgICB9O1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlQWN0aW9uc1N0YXJ0W3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzOiBhbnlbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcHJvcGVydGllcyB9ID0gdGFibGVBY3Rpb25NZXRob2Q7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSBjYWxsYmFjayh0YWJsZUFjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiAoY3VyciAhPT0gZmFsc2UpKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWw6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIGFjdGlvbiwgdGFibGVDb2RlLCBhY3Rpb25Db2RlLCBzZWxlY3RlZFJlY29yZHMgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgc2VydmVyRXJyb3IgPSBmYWxzZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoYWN0aW9uLmJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5mb3JtQ29uZmlnPy50YWJsZUFjdGlvbnMuc2VsZWN0aW9uLFxuICAgICAgICBhY3Rpb25Db2RlLFxuICAgICAgICBzZWxlY3RlZFJlY29yZHNcbiAgICAgIH07XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy50YWJsZUFjdGlvbiwgYWN0aW9uU3ViamVjdCk7XG4gICAgICBzZXJ2ZXJFcnJvciA9ICEhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5maW5pc2hUYWJsZVNlbGVjdGlvbkFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0LCBzZXJ2ZXJFcnJvcik7XG4gICAgaWYgKCFzZXJ2ZXJFcnJvcikge1xuICAgICAgYWN0aW9uLm5ld1N0YXRlICYmIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWw6IGFueSwgYWN0aW9uUmVzdWx0LCBzZXJ2ZXJFcnJvciA9IGZhbHNlKSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlczogYW55W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSA9IHRhYmxlQWN0aW9uTWV0aG9kO1xuICAgICAgICBjb25zdCBjb250aW51ZU9uRXJyb3IgPSBwcm9wZXJ0aWVzPy5jb250aW51ZU9uRXJyb3IgPz8gZmFsc2U7XG4gICAgICAgIGlmICghc2VydmVyRXJyb3IgfHwgY29udGludWVPbkVycm9yKSB7XG4gICAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjYWxsYmFjayh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlR2V0RGF0YSh0YWJsZUFjdGlvbkV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vdGlmeUZvcm1BY3Rpdml0eSgpO1xuICAgIGNvbnN0IHsgdGFibGVDb2RlIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICB0YWJsZUNvZGVcbiAgICB9O1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlR2V0RGF0YVN0YXJ0W3RhYmxlQ29kZV07XG4gICAgaWYgKHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0gPSB0YWJsZUFjdGlvbk1ldGhvZDtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IGNhbGxiYWNrKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIChjdXJyICE9PSBmYWxzZSkpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJHZXREYXRhKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJHZXREYXRhKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCB0YWJsZUNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGxldCBzZXJ2ZXJFcnJvciA9IGZhbHNlO1xuICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7IHRhYmxlQ29kZSB9O1xuICAgIGNvbnN0IGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy5nZXRUYWJsZURhdGEsIGFjdGlvblN1YmplY3QpO1xuICAgIHNlcnZlckVycm9yID0gISF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIGF3YWl0IHRoaXMuZmluaXNoVGFibGVHZXREYXRhKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQsIHNlcnZlckVycm9yKTtcbiAgICBpZiAoc2VydmVyRXJyb3IpIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlR2V0RGF0YSh0YWJsZUFjdGlvbkRldGFpbDogYW55LCBhY3Rpb25SZXN1bHQsIHNlcnZlckVycm9yID0gZmFsc2UpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgdGFibGVBY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1t0YWJsZUFjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlczogYW55W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSA9IHRhYmxlQWN0aW9uTWV0aG9kO1xuICAgICAgICBjb25zdCBjb250aW51ZU9uRXJyb3IgPSBwcm9wZXJ0aWVzPy5jb250aW51ZU9uRXJyb3IgPz8gZmFsc2U7XG4gICAgICAgIGlmICghc2VydmVyRXJyb3IgfHwgY29udGludWVPbkVycm9yKSB7XG4gICAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjYWxsYmFjayh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBjaGVja1NlY3Rpb25SZXF1aXJlZEZpZWxkcyhzZWN0aW9uQ29kZTogc3RyaW5nLCByZXFGaWVsZE1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNsZWFuRXJyb3JGaWVsZHMobnVsbCwgc2VjdGlvbkNvZGUpO1xuICAgIGNvbnN0IHJlcXVpcmVkRmllbGRNZXNzYWdlID0gcmVxRmllbGRNZXNzYWdlID8/IHRoaXMuZm9ybUNvbmZpZz8uZm9ybVN0YW5kYXJkRXJyb3JzLnJlcXVpcmVkRmllbGRcbiAgICBjb25zdCBudW1FcnJvcnMgPSB0aGlzLnRhZ0ZpZWxkc1dpdGhFcnJvcihyZXF1aXJlZEZpZWxkTWVzc2FnZSwgdGhpcy5nZXRSZXF1aXJlZEVtcHR5RmllbGRzKG51bGwsIHNlY3Rpb25Db2RlKSk7XG4gICAgcmV0dXJuIChudW1FcnJvcnMgPT09IDApO1xuICB9XG5cbiAgdmFsaWRhdGVTZWN0aW9uQ29uc2lzdGVuY3koc2VjdGlvbkNvZGU6IHN0cmluZywgcmVxRmllbGRNZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgY29tcGxldGVGaWVsZHMgPSB0aGlzLmNoZWNrU2VjdGlvblJlcXVpcmVkRmllbGRzKHNlY3Rpb25Db2RlLCByZXFGaWVsZE1lc3NhZ2UpO1xuICAgIGlmICghY29tcGxldGVGaWVsZHMpIHtcbiAgICAgIHRoaXMuc2V0RXJyb3IodGhpcy5mb3JtQ29uZmlnPy5mb3JtU3RhbmRhcmRFcnJvcnMudHlwZVdhcm5pbmcsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZz8uZm9ybVN0YW5kYXJkRXJyb3JzLnZhbGlkYXRpb25UaXRsZSxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnPy5mb3JtU3RhbmRhcmRFcnJvcnMucmVxdWlyZWRGaWVsZHMpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgdmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XG4gICAgY29uc3QgcmVxdWlyZWRFbXB0eUZpZWxkczogYW55W10gPSB0aGlzLmdldFJlcXVpcmVkRW1wdHlGaWVsZHMobnVsbCwgc2VjdGlvbkNvZGUpID8/IFtdO1xuICAgIGlmIChyZXF1aXJlZEVtcHR5RmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICB2YWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRFcnJvcih0aGlzLmZvcm1Db25maWc/LmZvcm1TdGFuZGFyZEVycm9ycy50eXBlV2FybmluZyxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnPy5mb3JtU3RhbmRhcmRFcnJvcnMudmFsaWRhdGlvblRpdGxlLFxuICAgICAgICB0aGlzLmZvcm1Db25maWc/LmZvcm1TdGFuZGFyZEVycm9ycy5yZXF1aXJlZEZpZWxkcyk7XG4gICAgICB0aGlzLnRhZ0ZpZWxkc1dpdGhFcnJvcih0aGlzLmZvcm1Db25maWc/LmZvcm1TdGFuZGFyZEVycm9ycy5yZXF1aXJlZEZpZWxkLCByZXF1aXJlZEVtcHR5RmllbGRzKTtcbiAgICAgIGZvciAoY29uc3QgY29kZSBvZiByZXF1aXJlZEVtcHR5RmllbGRzKSB7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkRW1wdHlGaWVsZCA9IHRoaXMuZ2V0RmllbGQoY29kZSk7XG4gICAgICAgIHJlcXVpcmVkRW1wdHlGaWVsZD8uZm9jdXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRpb25Jc3N1ZUZpZWxkczogYW55W10gPSB0aGlzLmdldEZpZWxkc1dpdGhWYWxpZGF0aW9uSXNzdWVzKG51bGwsXG4gICAgICBzZWN0aW9uQ29kZSkgPz8gW107XG4gICAgaWYgKCF2YWxpZGF0aW9uRXJyb3IgJiYgdmFsaWRhdGlvbklzc3VlRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhbGlkYXRpb25FcnJvciA9IHRydWU7XG4gICAgICB0aGlzLnNldEVycm9yKHRoaXMuZm9ybUNvbmZpZz8uZm9ybVN0YW5kYXJkRXJyb3JzLnR5cGVXYXJuaW5nLFxuICAgICAgICB0aGlzLmZvcm1Db25maWc/LmZvcm1TdGFuZGFyZEVycm9ycy52YWxpZGF0aW9uVGl0bGUsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZz8uZm9ybVN0YW5kYXJkRXJyb3JzLnZhbGlkYXRpb25GaWVsZHMpO1xuICAgICAgZm9yIChjb25zdCBjb2RlIG9mIHZhbGlkYXRpb25Jc3N1ZUZpZWxkcykge1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uSXNzdWVGaWVsZCA9IHRoaXMuZ2V0RmllbGQoY29kZSk7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uSXNzdWVGaWVsZCkge1xuICAgICAgICAgIHZhbGlkYXRpb25Jc3N1ZUZpZWxkLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3I7XG4gIH1cblxuICBjb3B5VGFibGVSZWNvcmRUb0ZpZWxkcyh0YWJsZU9iajogYW55LCBtYXBwaW5nVGFibGU6IGFueSA9IG51bGwpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVPYmoudGFibGVDb2RlKTtcbiAgICBjb25zdCB0YWJsZVJlY29yZCA9IHRhYmxlT2JqZWN0Py5nZXRUYWJsZVJlY29yZCh0YWJsZU9iai5yZWNvcmRJZCk7XG4gICAgY29uc3QgY29sdW1uTmFtZXMgPSB0YWJsZU9iamVjdD8uY29sdW1uTmFtZXM7XG4gICAgaWYgKHRhYmxlUmVjb3JkICYmIGNvbHVtbk5hbWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbk5hbWUgb2YgY29sdW1uTmFtZXMpIHtcbiAgICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSB0YWJsZVJlY29yZC5nZXRGaWVsZFZhbHVlKGNvbHVtbk5hbWUpID8/ICcnO1xuICAgICAgICBjb25zdCBjb2RlID0gbWFwcGluZ1RhYmxlPy5bY29sdW1uTmFtZV0gPz8gY29sdW1uTmFtZTtcbiAgICAgICAgY29uc3QgZmllbGQgPSBjb2RlID8gdGhpcy5nZXRGaWVsZChjb2RlKSA6IG51bGw7XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgIGZpZWxkLnNldFZhbHVlKGNvbHVtblZhbHVlKTtcbiAgICAgICAgICBmaWVsZC5oYXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBub3RpZnlGb3JtQWN0aXZpdHkoKSB7XG4gICAgaWYgKHRoaXMuX25vdGlmeUZvcm1BY3Rpdml0eSkge1xuICAgICAgdGhpcy5fZXZlbnRFbWl0ZXIubmV4dCgnZm9ybUFjdGl2aXR5JywgeyBjb2RlOiB0aGlzLmZvcm1Db2RlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvcyBMZWdhY3kgZGUgY29tcGF0aWJpbGlkYWQgaGFjaWEgYXRyw6FzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgbmFtZVxuICAgKi9cbiAgZ2V0IGZvcm1Db2RlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLm5hbWUgPz8gJyc7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG5hbWVcbiAgICovXG4gIHNldCBmb3JtQ29kZShuYW1lOiBzdHJpbmcpIHsgdGhpcy5uYW1lID0gbmFtZTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYnVzeVxuICAgKi9cbiAgZ2V0IGluU2VydmVyUHJvY2VzcygpIHsgcmV0dXJuIHRoaXMuYnVzeTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugc3RhdGVcbiAgICovXG4gIGdldCBjdXJyZW50U3RhdGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuc3RhdGUgPz8gJyc7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGNoYW5nZVN0YXRlXG4gICAqL1xuICBzZXQgY3VycmVudFN0YXRlKHN0YXRlOiBzdHJpbmcpIHsgdGhpcz8uY2hhbmdlU3RhdGUoc3RhdGUpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvblNlY3Rpb25BY3RpdmF0aW9uXG4gICAqL1xuICBnZXQgZm9ybVJvdXRlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9mb3JtUm91dGUgPz8gJyc7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9uU2VjdGlvbkFjdGl2YXRpb25cbiAgICovXG4gIHNldCBmb3JtUm91dGUocm91dGU6IHN0cmluZykgeyB0aGlzLl9mb3JtUm91dGUgPSByb3V0ZTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb25TZWN0aW9uQWN0aXZhdGlvblxuICAgKi9cbiAgYWRkU2VjdGlvbkFjdGl2YXRpb24oY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMub25TZWN0aW9uQWN0aXZhdGlvbihjb2RlcywgY2FsbGJhY2ssIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvblNlY3Rpb25JbmFjdGl2YXRpb25cbiAgICovXG4gIGFkZFNlY3Rpb25JbmFjdGl2YXRpb24oY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMub25TZWN0aW9uSW5hY3RpdmF0aW9uKGNvZGVzLCBjYWxsYmFjaywgcHJvcGVydGllcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9uQWN0aW9uU3RhcnRcbiAgICovXG4gIGFkZEFjdGlvbk1ldGhvZFN0YXJ0KGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLm9uQWN0aW9uU3RhcnQoY29kZXMsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb25BY3Rpb25GaW5pc2hcbiAgICovXG4gIGFkZEFjdGlvbk1ldGhvZEZpbmlzaChjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5vbkFjdGlvbkZpbmlzaChjb2RlcywgY2FsbGJhY2ssIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvbkZpZWxkSW5wdXRcbiAgICovXG4gIGFkZEZpZWxkSW5wdXRWYWxpZGF0aW9uKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLm9uRmllbGRJbnB1dChjb2RlcywgY2FsbGJhY2ssIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvbkZpZWxkVmFsaWRhdGlvblN0YXJ0XG4gICAqL1xuICBhZGRGaWVsZFZhbGlkYXRpb25TdGFydChjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5vbkZpZWxkVmFsaWRhdGlvblN0YXJ0KGNvZGVzLCBjYWxsYmFjaywgcHJvcGVydGllcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9uRmllbGRWYWxpZGF0aW9uRmluaXNoXG4gICAqL1xuICBhZGRGaWVsZFZhbGlkYXRpb25GaW5pc2goY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMub25GaWVsZFZhbGlkYXRpb25GaW5pc2goY29kZXMsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb25UYWJsZUFjdGlvblN0YXJ0XG4gICAqL1xuICBhZGRUYWJsZUFjdGlvblN0YXJ0KGNvZGU6IHN0cmluZywgYWN0aW9uQ29kZTogc3RyaW5nLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5vblRhYmxlQWN0aW9uU3RhcnQoY29kZSwgYWN0aW9uQ29kZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvblRhYmxlQWN0aW9uRmluaXNoXG4gICAqL1xuICBhZGRUYWJsZUFjdGlvbkZpbmlzaChjb2RlOiBzdHJpbmcsIGFjdGlvbkNvZGU6IHN0cmluZywgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMub25UYWJsZUFjdGlvbkZpbmlzaChjb2RlLCBhY3Rpb25Db2RlLCBjYWxsYmFjaywgcHJvcGVydGllcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9uVGFibGVTZWxlY3Rpb25TdGFydFxuICAgKi9cbiAgYWRkVGFibGVTZWxlY3Rpb25TdGFydChjb2RlOiBzdHJpbmcsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLm9uVGFibGVTZWxlY3Rpb25TdGFydChjb2RlLCBjYWxsYmFjaywgcHJvcGVydGllcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9uVGFibGVTZWxlY3Rpb25GaW5pc2hcbiAgICovXG4gIGFkZFRhYmxlU2VsZWN0aW9uRmluaXNoKGNvZGU6IHN0cmluZywgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMub25UYWJsZVNlbGVjdGlvbkZpbmlzaChjb2RlLCBjYWxsYmFjaywgcHJvcGVydGllcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9uVGFibGVHZXREYXRhU3RhcnRcbiAgICovXG4gIGFkZFRhYmxlR2V0RGF0YVN0YXJ0KGNvZGU6IHN0cmluZywgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMub25UYWJsZUdldERhdGFTdGFydChjb2RlLCBjYWxsYmFjaywgcHJvcGVydGllcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9uVGFibGVHZXREYXRhRmluaXNoXG4gICAqL1xuICBhZGRUYWJsZUdldERhdGFGaW5pc2goY29kZTogc3RyaW5nLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5vblRhYmxlR2V0RGF0YUZpbmlzaChjb2RlLCBjYWxsYmFjaywgcHJvcGVydGllcyk7XG4gIH1cbn1cbiJdfQ==
|
|
1310
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvYmFzaWMtZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSWhFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7O0FBSTNFLE1BQU0sZUFBZSxHQUFHLG1CQUFtQixDQUFDO0FBQzVDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQztBQUMvQixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUM7QUFDL0IsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBRWxDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQztBQUMxQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUM7QUFLdEIsTUFBTSxPQUFPLGtCQUFtQixTQUFRLG9CQUFvQjtJQTRDMUQsWUFDWSxrQkFBeUMsRUFDekMsYUFBcUMsRUFDckMsZ0JBQTBDO1FBQ3BELEtBQUssRUFBRSxDQUFDO1FBSEUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF1QjtRQUN6QyxrQkFBYSxHQUFiLGFBQWEsQ0FBd0I7UUFDckMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEwQjtRQTlDOUMsa0JBQWEsR0FBa0IsSUFBSSxDQUFDO1FBQ3BDLGlCQUFZLEdBQWtCLElBQUksQ0FBQztRQUNuQyxlQUFVLEdBQWtCLElBQUksQ0FBQztRQUNqQyx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsd0JBQW1CLEdBQVksSUFBSSxDQUFDO1FBQzVDLCtCQUErQjtRQUN2QixxQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFDN0IsK0JBQTBCLEdBQVEsRUFBRSxDQUFDO1FBQ3JDLDBCQUFxQixHQUFRLEVBQUUsQ0FBQztRQUNoQyw0QkFBdUIsR0FBUSxFQUFFLENBQUM7UUFDbEMsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQzVCLHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQUM3QiwwQkFBcUIsR0FBUSxFQUFFLENBQUM7UUFDaEMsMkJBQXNCLEdBQVEsRUFBRSxDQUFDO1FBQ2pDLDRCQUF1QixHQUFRLEVBQUUsQ0FBQztRQUMxQyxpQ0FBaUM7UUFDekIsMEJBQXFCLEdBQVEsRUFBRSxDQUFDO1FBQ2hDLDJCQUFzQixHQUFRLEVBQUUsQ0FBQztRQUNqQyx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFDN0Isd0JBQW1CLEdBQVEsRUFBRSxDQUFDO1FBQzlCLHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQUM3Qix3QkFBbUIsR0FBUSxFQUFFLENBQUM7UUFDdEMsc0JBQXNCO1FBQ2QsdUJBQWtCLEdBQVUsRUFBRSxDQUFDO1FBQy9CLHNCQUFpQixHQUFVLEVBQUUsQ0FBQztRQUM5QixzQkFBaUIsR0FBVSxFQUFFLENBQUM7UUFDdEMsdUNBQXVDO1FBQzdCLG9CQUFlLEdBQVEsRUFBRSxDQUFDO1FBQzFCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFFcEIsb0JBQWUsR0FBd0IsRUFBRSxDQUFDO1FBQ3BELG1CQUFtQjtRQUNuQixlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFDM0IsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUN2QixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUV6QixvQkFBb0I7UUFDcEIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixTQUFJLEdBQVksS0FBSyxDQUFDO1FBT3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN2QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztRQUNqQyx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsMEJBQTBCLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFFOUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFFNUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELElBQUksV0FBVyxLQUFjLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbkQsSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTNCLG9CQUFvQjtJQUNwQixtQkFBbUIsS0FBSyxDQUFDO0lBQ3pCLEtBQUssS0FBSyxDQUFDO0lBQ1gsZUFBZSxLQUFLLENBQUM7SUFDckIsd0JBQXdCLEtBQUssQ0FBQztJQUM5Qiw0QkFBNEIsS0FBSyxDQUFDO0lBQ2xDLHVCQUF1QixLQUFLLENBQUM7SUFDN0IsYUFBYSxDQUFDLElBQWEsRUFBRSxNQUFZLElBQUksQ0FBQztJQUM5QyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUyxFQUFFLE1BQU8sSUFBSSxDQUFDO0lBQzdELGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVMsRUFBRSxNQUFPLElBQUksQ0FBQztJQUU5RCxpQkFBaUIsQ0FBQyxTQUFpQixFQUFFLFFBQVE7UUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxRQUFRLENBQUMsSUFBWSxFQUFFLE9BQVksSUFBSSxFQUFFLFdBQWdCLElBQUksRUFBRSxVQUFVLEdBQUcsS0FBSztRQUMvRSxJQUFJLE1BQU0sR0FBUSxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLE1BQU0sR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0YsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDakQsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDM0MsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUNyQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1NBQ3BDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNqQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUM7UUFDckMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCwwQkFBMEIsS0FBSyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRSwyQkFBMkIsS0FBSyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRSxTQUFTLEtBQWMsT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQSxDQUFDLENBQUM7SUFDMUQsTUFBTSxLQUFXLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRCxVQUFVLEtBQVcsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVDLGVBQWUsS0FBVSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFaEcsUUFBUSxDQUFDLFNBQXdCLEVBQUUsWUFBMkIsRUFBRSxXQUEwQjtRQUN4RixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxZQUFZLEtBQWEsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNsRCxlQUFlLEtBQWEsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN2RCxjQUFjLEtBQWEsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNyRCxZQUFZLEtBQWEsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNqRCxnQkFBZ0IsS0FBYSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3pELFlBQVksS0FBYSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBRWpELGdCQUFnQixDQUFDLElBQVk7UUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFELENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUFXO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNHLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUN4RSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLEtBQUssRUFBRTtZQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQztZQUMvQyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztZQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztZQUNoQyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsMEJBQTBCO1FBQ3hCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDbkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN4RCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuRixPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdkYseUZBQXlGO1lBQ3pGLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDcEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzdCLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pCLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNwQyxNQUFNLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsS0FBSyxDQUFDO29CQUM1QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3ZELENBQUMsQ0FBQyxDQUFDO2dCQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNyQyxNQUFNLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsS0FBSyxDQUFDO29CQUM1QyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUM7Z0JBQzVELENBQUMsQ0FBQyxDQUFDO2dCQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNyRixxRkFBcUY7Z0JBQ3JGLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RELENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDOUIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDM0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLHdGQUF3RjtnQkFDeEYsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkQsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM3QixVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN6QixLQUFLLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQzNFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDakYsS0FBSyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUN2RixLQUFLLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZGLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLHVGQUF1RjtnQkFDdkYsS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEQsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFXLEdBQUcsS0FBSztRQUN4QyxJQUFJLFlBQVksR0FBa0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQzNCLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQ25DLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7U0FDakM7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNsQjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsRUFBRTtZQUMxQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUM7U0FDMUM7UUFDRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxRCxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMzRCxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztTQUN0QztRQUNELElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDO1FBRWxELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRVEsV0FBVyxDQUFDLEtBQXlCO1FBQzVDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUM3RCxJQUFJLFlBQVksRUFBRTtZQUNoQixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUNsRCxJQUFJLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3pELEtBQUssTUFBTSxRQUFRLElBQUksbUJBQW1CLEVBQUU7b0JBQzFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDakI7YUFDRjtTQUNGO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELHdCQUF3QixDQUFDLGNBQW1CO1FBQzFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxjQUFjLElBQUksRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztTQUFFO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUMxQyxJQUFJLENBQUMsYUFBYSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDbEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQztRQUNoRCxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxXQUFXLENBQUM7UUFDOUMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUVILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxVQUFrQixFQUFFLGdCQUFxQixFQUFFO1FBQ2pFLE1BQU0sWUFBWSxHQUFHO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ3ZCLFVBQVU7WUFDVixhQUFhO1lBQ2IsT0FBTyxFQUFFLGVBQWU7WUFDeEIsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0IsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQ2xDLENBQUM7UUFDRixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixNQUFNLGtCQUFrQixHQUFRLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUN2QixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqQyxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7WUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztZQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztTQUN0QztRQUNELE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDaEQsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQsd0JBQXdCLENBQUMsV0FBZ0I7UUFDdkMsTUFBTSxFQUNKLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQ3ZELFlBQVksRUFBRSxhQUFhLEVBQUUsU0FBUyxHQUN2QyxHQUFHLFdBQVcsQ0FBQztRQUNoQixXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QyxJQUFJLFdBQVcsRUFBRTtZQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDO1NBQUU7UUFDaEQsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakMsS0FBSyxNQUFNLGFBQWEsSUFBSSxPQUFPLEVBQUU7Z0JBQ25DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLFlBQVksRUFBRTtvQkFBRSxZQUFZLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQUU7YUFDcEU7U0FDRjtRQUNELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9CLEtBQUssTUFBTSxZQUFZLElBQUksTUFBTSxFQUFFO2dCQUNqQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxXQUFXLEVBQUU7b0JBQ2YsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUM1QzthQUNGO1NBQ0Y7UUFDRCxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQyxLQUFLLE1BQU0sWUFBWSxJQUFJLFlBQVksRUFBRTtnQkFDdkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFELElBQUksV0FBVyxFQUFFO29CQUNmLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDNUM7YUFDRjtTQUNGO1FBQ0QsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLElBQUksRUFBRTtZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekY7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFFSCxzQkFBc0IsS0FBSyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRCxxQkFBcUIsS0FBSyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RCxxQkFBcUIsS0FBSyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RCxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVHLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0csa0JBQWtCLENBQUMsUUFBUSxFQUFFLFVBQVUsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUxRzs7T0FFRztJQUVILFlBQVksQ0FBQyxRQUFRO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQStCLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FBRyxJQUFJO1FBQ2pGLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDakQsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNuRDtZQUNELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUErQixFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUM5RSxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0UsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDOUM7WUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQscUJBQXFCLENBQUMsS0FBK0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxHQUFHLElBQUk7UUFDaEYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUM5QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ2hEO1lBQ0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUErQixFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUN4RSxNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDekM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQStCLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FBRyxJQUFJO1FBQ3pFLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUMxQztZQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsdUJBQXVCLENBQUMsSUFBWTtRQUN4QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztTQUFFO1FBQ3JDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25FLElBQUksb0JBQW9CLEVBQUU7WUFDeEIsS0FBSyxNQUFNLG1CQUFtQixJQUFJLG9CQUFvQixFQUFFO2dCQUN0RCxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLG1CQUFtQixDQUFDO2dCQUNyRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzVDLElBQUksV0FBVyxLQUFLLEtBQUssRUFBRTtvQkFDekIsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7YUFDRjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLHVCQUF1QixDQUFDLElBQVk7UUFDeEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQy9CLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELElBQUksb0JBQW9CLEVBQUU7WUFDeEIsS0FBSyxNQUFNLG1CQUFtQixJQUFJLG9CQUFvQixFQUFFO2dCQUN0RCxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLG1CQUFtQixDQUFDO2dCQUNyRCxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDekI7U0FDRjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMseUJBQXlCLENBQUMsSUFBWTtRQUMxQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDL0IsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEUsSUFBSSxvQkFBb0IsRUFBRTtZQUN4QixLQUFLLE1BQU0sbUJBQW1CLElBQUksb0JBQW9CLEVBQUU7Z0JBQ3RELE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsbUJBQW1CLENBQUM7Z0JBQ3JELFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUN6QjtTQUNGO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBWTtRQUM1QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDOUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RCxJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLE1BQU0sb0JBQW9CLEdBQVUsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssTUFBTSxrQkFBa0IsSUFBSSxtQkFBbUIsRUFBRTtnQkFDcEQsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQztnQkFDcEQsTUFBTSxxQkFBcUIsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3JELG9CQUFvQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2FBQ2xEO1lBQ0QsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNwRSxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RHLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ25CLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsT0FBTzthQUNSO1NBQ0Y7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLENBQUMsT0FBTyxXQUFXLEtBQUssUUFBUSxDQUFDO1lBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU87U0FDUjtRQUNELElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ2xCLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDaEU7UUFDRCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMzRCxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdEQ7YUFBTTtZQUNMLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNuRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2xCO1NBQ0Y7UUFDRCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxXQUFXLEdBQUcsS0FBSztRQUMxRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkUsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixNQUFNLG9CQUFvQixHQUFVLEVBQUUsQ0FBQztZQUN2QyxLQUFLLE1BQU0sa0JBQWtCLElBQUksbUJBQW1CLEVBQUU7Z0JBQ3BELE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsa0JBQWtCLENBQUM7Z0JBQ3BELE1BQU0sZUFBZSxHQUFHLFVBQVUsRUFBRSxlQUFlLElBQUksS0FBSyxDQUFDO2dCQUM3RCxJQUFJLFFBQVEsSUFBSSxDQUFDLENBQUMsV0FBVyxJQUFJLGVBQWUsQ0FBQyxFQUFFO29CQUNqRCxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO2lCQUMzRDthQUNGO1lBQ0QsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsTUFBVztRQUM5QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFFSCxZQUFZLENBQUMsS0FBK0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxHQUFHLElBQUk7UUFDdkUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ3ZDO1lBQ0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQStCLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FBRyxJQUFJO1FBQ2pGLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUN4QztZQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxLQUErQixFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUNsRixNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDekM7WUFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLHlCQUF5QixDQUFDLElBQVksRUFBRSxzQkFBK0IsSUFBSTtRQUMvRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztTQUFFO1FBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELElBQUksbUJBQW1CLEVBQUU7WUFDdkIsTUFBTSx3QkFBd0IsR0FBVSxFQUFFLENBQUM7WUFDM0MsS0FBSyxNQUFNLGdCQUFnQixJQUFJLG1CQUFtQixFQUFFO2dCQUNsRCxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLGdCQUFnQixDQUFDO2dCQUNsRCxNQUFNLHlCQUF5QixHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDNUQsd0JBQXdCLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7YUFDMUQ7WUFDRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUM3QztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFZLEVBQUUsc0JBQStCLElBQUk7UUFDMUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQ2pDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELElBQUksbUJBQW1CLEVBQUU7WUFDdkIsTUFBTSx3QkFBd0IsR0FBVSxFQUFFLENBQUM7WUFDM0MsS0FBSyxNQUFNLGdCQUFnQixJQUFJLG1CQUFtQixFQUFFO2dCQUNsRCxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLGdCQUFnQixDQUFDO2dCQUNsRCxNQUFNLHVCQUF1QixHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDMUQsd0JBQXdCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7YUFDeEQ7WUFDRCxNQUFNLHVCQUF1QixHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sa0JBQWtCLEdBQUcsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5RyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3ZCLE9BQU87YUFDUjtTQUNGO1FBQ0QsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixJQUFJLENBQUMsMEJBQTBCLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDbEQ7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLDBCQUEwQixDQUFDLFVBQW9DO1FBQ25FLE1BQU0sUUFBUSxHQUEyQixDQUFDLE9BQU8sVUFBVSxLQUFLLFFBQVEsQ0FBQztZQUN2RSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQzNDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLGdCQUFnQixHQUFZLElBQUksQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTztTQUNSO1FBQ0QsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQ3BCLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQzNCLGdCQUFnQixHQUFHLE1BQU0sSUFBSTtpQkFDMUIsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUQsV0FBVyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckM7UUFDRCxJQUFJLFdBQVcsRUFBRTtZQUNmLFFBQVEsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZDLFFBQVEsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNsRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0QsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3BCO1NBQ0Y7UUFDRCxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUUsUUFBUSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxXQUFnQixFQUFFLGdCQUF5QixFQUFFLFdBQVcsR0FBRyxLQUFLO1FBQzFGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRSxJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLE1BQU0sb0JBQW9CLEdBQVUsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssTUFBTSxnQkFBZ0IsSUFBSSxtQkFBbUIsRUFBRTtnQkFDbEQsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDbEQsTUFBTSxlQUFlLEdBQUcsVUFBVSxFQUFFLGVBQWUsSUFBSSxLQUFLLENBQUM7Z0JBQzdELElBQUksQ0FBQyxXQUFXLElBQUksZUFBZSxFQUFFO29CQUNuQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7aUJBQ3BFO2FBQ0Y7WUFDRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsdUJBQXVCLENBQUMsSUFBWTtRQUN4QyxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFFSCxrQkFBa0IsQ0FBQyxJQUFZLEVBQUUsVUFBa0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxHQUFHLElBQUk7UUFDOUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE9BQU87U0FDUjtRQUNELE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDdkIsT0FBTztTQUNSO1FBQ0QsSUFBSSxrQkFBdUIsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEQ7YUFBTTtZQUNMLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsa0JBQWtCLENBQUM7U0FDcEQ7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDbkMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3JDO1FBQ0Qsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQVksRUFBRSxVQUFrQixFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUMvRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsT0FBTztTQUNSO1FBQ0QsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUN2QixPQUFPO1NBQ1I7UUFDRCxJQUFJLGtCQUF1QixDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyRDthQUFNO1lBQ0wsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztTQUNyRDtRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNuQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDckM7UUFDRCxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBWSxFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUM3RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDN0IsSUFBSSxrQkFBeUIsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkQ7YUFBTTtZQUNMLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsa0JBQWtCLENBQUM7U0FDdkQ7UUFDRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsSUFBWSxFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUM5RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDN0IsSUFBSSxrQkFBeUIsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEQ7YUFBTTtZQUNMLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEdBQUcsa0JBQWtCLENBQUM7U0FDeEQ7UUFDRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBWSxFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUMzRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxrQkFBeUIsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEQ7YUFBTTtZQUNMLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsa0JBQWtCLENBQUM7U0FDcEQ7UUFDRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBWSxFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUM1RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxrQkFBdUIsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsa0JBQWtCLENBQUM7U0FDckQ7UUFDRCxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBRUQsS0FBSyxDQUFDLHNCQUFzQixDQUFDLGdCQUFxQjtRQUNoRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFHLGdCQUFnQixDQUFDO1FBQ25ELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUFFLE9BQU87U0FBRTtRQUM1QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQ3hCLE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsV0FBVztZQUNYLE1BQU07WUFDTixTQUFTO1lBQ1QsVUFBVTtTQUNYLENBQUM7UUFDRixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5RCxNQUFNLGtCQUFrQixHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN4RixJQUFJLGtCQUFrQixFQUFFO1lBQ3RCLE1BQU0sb0JBQW9CLEdBQVUsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssTUFBTSxpQkFBaUIsSUFBSSxrQkFBa0IsRUFBRTtnQkFDbEQsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztnQkFDbkQsTUFBTSxtQkFBbUIsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDeEQsb0JBQW9CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDaEQ7WUFDRCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEcsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDbkIsT0FBTzthQUNSO1NBQ0Y7UUFDRCxJQUFJLENBQUMsNEJBQTRCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsS0FBSyxDQUFDLDRCQUE0QixDQUFDLGlCQUFzQjtRQUN2RCxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsaUJBQWlCLENBQUM7UUFDekUsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUFFLE9BQU87U0FBRTtRQUN4QyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDeEIsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDbEIsTUFBTSxhQUFhLEdBQUc7Z0JBQ3BCLFNBQVM7Z0JBQ1QsVUFBVSxFQUFFLGFBQWE7Z0JBQ3pCLFVBQVU7YUFDWCxDQUFDO1lBQ0YsWUFBWSxHQUFHLE1BQU0sSUFBSTtpQkFDdEIsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUM3RCxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQztRQUNELE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdEQ7YUFBTTtZQUNMLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNsRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0QsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3ZCO1NBQ0Y7UUFDRCxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxpQkFBc0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxHQUFHLEtBQUs7UUFDckYsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztRQUNwRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRCxNQUFNLGtCQUFrQixHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN4RixJQUFJLGtCQUFrQixFQUFFO1lBQ3RCLE1BQU0sb0JBQW9CLEdBQVUsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssTUFBTSxpQkFBaUIsSUFBSSxrQkFBa0IsRUFBRTtnQkFDbEQsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztnQkFDbkQsTUFBTSxlQUFlLEdBQUcsVUFBVSxFQUFFLGVBQWUsSUFBSSxLQUFLLENBQUM7Z0JBQzdELElBQUksQ0FBQyxXQUFXLElBQUksZUFBZSxFQUFFO29CQUNuQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7aUJBQ3RFO2FBQ0Y7WUFDRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsZ0JBQXFCO1FBQzFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxHQUFHLGdCQUFnQixDQUFDO1FBQ2pFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUFFLE9BQU87U0FBRTtRQUM1QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxZQUFZLENBQUM7UUFDOUMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQ3hCLE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsV0FBVztZQUNYLE1BQU07WUFDTixTQUFTO1lBQ1QsVUFBVTtZQUNWLFFBQVE7WUFDUixVQUFVO1NBQ1gsQ0FBQztRQUNGLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hGLElBQUksa0JBQWtCLEVBQUU7WUFDdEIsTUFBTSxvQkFBb0IsR0FBVSxFQUFFLENBQUM7WUFDdkMsS0FBSyxNQUFNLGlCQUFpQixJQUFJLGtCQUFrQixFQUFFO2dCQUNsRCxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLGlCQUFpQixDQUFDO2dCQUNuRCxNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUN4RCxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQzthQUNoRDtZQUNELE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDcEUsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN0RyxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNuQixPQUFPO2FBQ1I7U0FDRjtRQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCLENBQUMsaUJBQXNCO1FBQ2pELE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLGlCQUFpQixDQUFDO1FBQy9GLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDeEMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ2xCLE1BQU0sYUFBYSxHQUFHO2dCQUNwQixTQUFTO2dCQUNULFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxNQUFNO2dCQUNoRCxVQUFVO2dCQUNWLGFBQWEsRUFBRSxRQUFRO2dCQUN2QixlQUFlLEVBQUUsVUFBVTthQUM1QixDQUFDO1lBQ0YsWUFBWSxHQUFHLE1BQU0sSUFBSTtpQkFDdEIsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUM3RCxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQztRQUNELE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdEQ7YUFBTTtZQUNMLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1NBQ2hDO1FBQ0QsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxXQUFnQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGlCQUFzQixFQUFFLFlBQVksRUFBRSxXQUFXLEdBQUcsS0FBSztRQUMvRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFHLGlCQUFpQixDQUFDO1FBQ3BELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hGLElBQUksa0JBQWtCLEVBQUU7WUFDdEIsTUFBTSxvQkFBb0IsR0FBVSxFQUFFLENBQUM7WUFDdkMsS0FBSyxNQUFNLGlCQUFpQixJQUFJLGtCQUFrQixFQUFFO2dCQUNsRCxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLGlCQUFpQixDQUFDO2dCQUNuRCxNQUFNLGVBQWUsR0FBRyxVQUFVLEVBQUUsZUFBZSxJQUFJLEtBQUssQ0FBQztnQkFDN0QsSUFBSSxDQUFDLFdBQVcsSUFBSSxlQUFlLEVBQUU7b0JBQ25DLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztpQkFDdEU7YUFDRjtZQUNELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxnQkFBcUI7UUFDbkQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztRQUNyRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDN0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsWUFBWSxDQUFDO1FBQzlDLE1BQU0sb0JBQW9CLEdBQUc7WUFDM0IsV0FBVztZQUNYLFNBQVM7WUFDVCxRQUFRO1lBQ1IsVUFBVTtTQUNYLENBQUM7UUFDRixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRSxJQUFJLGtCQUFrQixFQUFFO1lBQ3RCLE1BQU0sb0JBQW9CLEdBQVUsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssTUFBTSxvQkFBb0IsSUFBSSxrQkFBa0IsRUFBRTtnQkFDckQsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQztnQkFDdEQsTUFBTSxtQkFBbUIsR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDM0Qsb0JBQW9CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDaEQ7WUFDRCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEcsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDbkIsT0FBTzthQUNSO1NBQ0Y7UUFDRCxJQUFJLENBQUMsK0JBQStCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsS0FBSyxDQUFDLCtCQUErQixDQUFDLG9CQUF5QjtRQUM3RCxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsb0JBQW9CLENBQUM7UUFDOUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUFFLE9BQU87U0FBRTtRQUM3QixXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDeEIsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNoQyxNQUFNLGFBQWEsR0FBUTtnQkFDekIsU0FBUztnQkFDVCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsWUFBWTtnQkFDdEQsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLGFBQWEsRUFBRSxRQUFRO2dCQUN2QixlQUFlLEVBQUUsVUFBVTthQUM1QixDQUFDO1lBQ0YsWUFBWSxHQUFHLE1BQU0sSUFBSTtpQkFDdEIsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUM3RCxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQztRQUNELE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLG9CQUFvQixFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2RixJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1NBQ2hDO1FBQ0QsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxLQUFLLENBQUMsMEJBQTBCLENBQUMsb0JBQXlCLEVBQUUsWUFBWSxFQUFFLFdBQVcsR0FBRyxLQUFLO1FBQzNGLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQztRQUMzQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRSxJQUFJLGtCQUFrQixFQUFFO1lBQ3RCLE1BQU0sb0JBQW9CLEdBQVUsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssTUFBTSxvQkFBb0IsSUFBSSxrQkFBa0IsRUFBRTtnQkFDckQsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQztnQkFDdEQsTUFBTSxlQUFlLEdBQUcsVUFBVSxFQUFFLGVBQWUsSUFBSSxLQUFLLENBQUM7Z0JBQzdELElBQUksQ0FBQyxXQUFXLElBQUksZUFBZSxFQUFFO29CQUNuQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7aUJBQ3pFO2FBQ0Y7WUFDRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMseUJBQXlCLENBQUMsZ0JBQXFCO1FBQ25ELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxHQUFHLGdCQUFnQixDQUFDO1FBQ2pFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUFFLE9BQU87U0FBRTtRQUM1QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsTUFBTSxFQUFFLGVBQWUsRUFBRSxHQUFHLFlBQVksQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDeEIsTUFBTSxpQkFBaUIsR0FBRztZQUN4QixXQUFXO1lBQ1gsTUFBTTtZQUNOLFNBQVM7WUFDVCxVQUFVO1lBQ1YsZUFBZTtTQUNoQixDQUFDO1FBQ0YsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUQsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEYsSUFBSSxrQkFBa0IsRUFBRTtZQUN0QixNQUFNLG9CQUFvQixHQUFVLEVBQUUsQ0FBQztZQUN2QyxLQUFLLE1BQU0saUJBQWlCLElBQUksa0JBQWtCLEVBQUU7Z0JBQ2xELE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ25ELE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3hELG9CQUFvQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ2hEO1lBQ0QsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNwRSxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RHLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ25CLE9BQU87YUFDUjtTQUNGO1FBQ0QsSUFBSSxDQUFDLCtCQUErQixDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxpQkFBc0I7UUFDMUQsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztRQUMxRixJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQ3hDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN4QixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNsQixNQUFNLGFBQWEsR0FBRztnQkFDcEIsU0FBUztnQkFDVCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsU0FBUztnQkFDbkQsVUFBVTtnQkFDVixlQUFlO2FBQ2hCLENBQUM7WUFDRixZQUFZLEdBQUcsTUFBTSxJQUFJO2lCQUN0QixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzdELFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JDO1FBQ0QsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN0RDthQUFNO1lBQ0wsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7U0FDaEM7UUFDRCxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxpQkFBc0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxHQUFHLEtBQUs7UUFDeEYsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztRQUNwRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRCxNQUFNLGtCQUFrQixHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN4RixJQUFJLGtCQUFrQixFQUFFO1lBQ3RCLE1BQU0sb0JBQW9CLEdBQVUsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssTUFBTSxpQkFBaUIsSUFBSSxrQkFBa0IsRUFBRTtnQkFDbEQsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztnQkFDbkQsTUFBTSxlQUFlLEdBQUcsVUFBVSxFQUFFLGVBQWUsSUFBSSxLQUFLLENBQUM7Z0JBQzdELElBQUksQ0FBQyxXQUFXLElBQUksZUFBZSxFQUFFO29CQUNuQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7aUJBQ3RFO2FBQ0Y7WUFDRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsZ0JBQXFCO1FBQzNDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztRQUN2QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsV0FBVztZQUNYLFNBQVM7U0FDVixDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlELElBQUksa0JBQWtCLEVBQUU7WUFDdEIsTUFBTSxvQkFBb0IsR0FBVSxFQUFFLENBQUM7WUFDdkMsS0FBSyxNQUFNLGlCQUFpQixJQUFJLGtCQUFrQixFQUFFO2dCQUNsRCxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLGlCQUFpQixDQUFDO2dCQUNuRCxNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUN4RCxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQzthQUNoRDtZQUNELE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDcEUsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN0RyxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNuQixPQUFPO2FBQ1I7U0FDRjtRQUNELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxLQUFLLENBQUMsdUJBQXVCLENBQUMsaUJBQXNCO1FBQ2xELE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsaUJBQWlCLENBQUM7UUFDckQsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixNQUFNLGFBQWEsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSTthQUM1QixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzlELFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM1RSxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1NBQ2hDO1FBQ0QsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsaUJBQXNCLEVBQUUsWUFBWSxFQUFFLFdBQVcsR0FBRyxLQUFLO1FBQ2hGLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLEdBQUcsaUJBQWlCLENBQUM7UUFDekQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0QsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDN0YsSUFBSSxrQkFBa0IsRUFBRTtZQUN0QixNQUFNLG9CQUFvQixHQUFVLEVBQUUsQ0FBQztZQUN2QyxLQUFLLE1BQU0saUJBQWlCLElBQUksa0JBQWtCLEVBQUU7Z0JBQ2xELE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ25ELE1BQU0sZUFBZSxHQUFHLFVBQVUsRUFBRSxlQUFlLElBQUksS0FBSyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsV0FBVyxJQUFJLGVBQWUsRUFBRTtvQkFDbkMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO2lCQUN0RTthQUNGO1lBQ0QsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRUQsMEJBQTBCLENBQUMsV0FBbUIsRUFBRSxlQUF3QjtRQUN0RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsZUFBZSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLENBQUMsYUFBYSxDQUFBO1FBQ2pHLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDaEgsT0FBTyxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsMEJBQTBCLENBQUMsV0FBbUIsRUFBRSxlQUF3QjtRQUN0RSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxXQUFXLEVBQzNELElBQUksQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLENBQUMsZUFBZSxFQUNuRCxJQUFJLENBQUMsVUFBVSxFQUFFLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3RELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDNUIsTUFBTSxtQkFBbUIsR0FBVSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4RixJQUFJLG1CQUFtQixFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLENBQUMsV0FBVyxFQUMzRCxJQUFJLENBQUMsVUFBVSxFQUFFLGtCQUFrQixDQUFDLGVBQWUsRUFDbkQsSUFBSSxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUNoRyxLQUFLLE1BQU0sSUFBSSxJQUFJLG1CQUFtQixFQUFFO2dCQUN0QyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9DLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUM1QixNQUFNO2FBQ1A7U0FDRjtRQUNELE1BQU0scUJBQXFCLEdBQVUsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksRUFDMUUsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxlQUFlLElBQUkscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN4RCxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxXQUFXLEVBQzNELElBQUksQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLENBQUMsZUFBZSxFQUNuRCxJQUFJLENBQUMsVUFBVSxFQUFFLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDeEQsS0FBSyxNQUFNLElBQUksSUFBSSxxQkFBcUIsRUFBRTtnQkFDeEMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLG9CQUFvQixFQUFFO29CQUN4QixvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDOUI7Z0JBQ0QsTUFBTTthQUNQO1NBQ0Y7UUFDRCxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQsdUJBQXVCLENBQUMsUUFBYSxFQUFFLGVBQW9CLElBQUk7UUFDN0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEQsTUFBTSxXQUFXLEdBQUcsV0FBVyxFQUFFLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkUsTUFBTSxXQUFXLEdBQUcsV0FBVyxFQUFFLFdBQVcsQ0FBQztRQUM3QyxJQUFJLFdBQVcsSUFBSSxXQUFXLEVBQUU7WUFDOUIsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUU7Z0JBQ3BDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoRSxNQUFNLElBQUksR0FBRyxZQUFZLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUM7Z0JBQ3RELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNoRCxJQUFJLEtBQUssRUFBRTtvQkFDVCxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUM1QixLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztpQkFDMUI7YUFDRjtZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ2pFO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBRUg7O09BRUc7SUFDSCxJQUFJLFFBQVEsS0FBYSxPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVsRDs7T0FFRztJQUNILElBQUksUUFBUSxDQUFDLElBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFaEQ7O09BRUc7SUFDSCxJQUFJLGVBQWUsS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTNDOztPQUVHO0lBQ0gsSUFBSSxZQUFZLEtBQWEsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdkQ7O09BRUc7SUFDSCxJQUFJLFlBQVksQ0FBQyxLQUFhLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0Q7O09BRUc7SUFDSCxJQUFJLFNBQVMsS0FBYSxPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV6RDs7T0FFRztJQUNILElBQUksU0FBUyxDQUFDLEtBQWEsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFekQ7O09BRUc7SUFDSCxvQkFBb0IsQ0FBQyxLQUErQixFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUMvRSxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQixDQUFDLEtBQStCLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FBRyxJQUFJO1FBQ2pGLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CLENBQUMsS0FBK0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxHQUFHLElBQUk7UUFDL0UsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ0gscUJBQXFCLENBQUMsS0FBK0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxHQUFHLElBQUk7UUFDaEYsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsdUJBQXVCLENBQUMsS0FBK0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxHQUFHLElBQUk7UUFDbEYsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsdUJBQXVCLENBQUMsS0FBK0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxHQUFHLElBQUk7UUFDbEYsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCx3QkFBd0IsQ0FBQyxLQUErQixFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUNuRixPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQixDQUFDLElBQVksRUFBRSxVQUFrQixFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUMvRSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0IsQ0FBQyxJQUFZLEVBQUUsVUFBa0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxHQUFHLElBQUk7UUFDaEYsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsc0JBQXNCLENBQUMsSUFBWSxFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUM5RCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QixDQUFDLElBQVksRUFBRSxRQUFRLEVBQUUsVUFBVSxHQUFHLElBQUk7UUFDL0QsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0IsQ0FBQyxJQUFZLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FBRyxJQUFJO1FBQzVELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gscUJBQXFCLENBQUMsSUFBWSxFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUM3RCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7OytHQTV6Q1Usa0JBQWtCO21HQUFsQixrQkFBa0IsMkVBRm5CLDJCQUEyQjsyRkFFMUIsa0JBQWtCO2tCQUg5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwyQkFBMkI7aUJBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtU3RydWN0dXJlQW5kRGF0YSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvZm9ybSc7XG5pbXBvcnQgeyBMaWJGb3JtTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMaWJFdmVudE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXZlbnQtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IExpYkZpbGVNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbGUtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IGZvcm1BY3Rpb25zLCBOT19FUlJPUiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvZm9ybS5jb25zdGFudHMnO1xuaW1wb3J0IHsgRmllbGREZXNjcmlwdG9yIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy9maWVsZCc7XG5pbXBvcnQgeyBSZWNvcmRGb3JtU2VjdGlvbiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvc2VjdGlvbic7XG5cbmNvbnN0IFBBWUxPQURfVkVSU0lPTiA9ICdUVUFJTkVYQ0hBTkdFXzEuMCc7XG5jb25zdCBJTkxJTkVfQUNUSU9OID0gJ0lOTElORSc7XG5jb25zdCBHTE9CQUxfQUNUSU9OID0gJ0dMT0JBTCc7XG5jb25zdCBHRVRfREFUQV9BQ1RJT04gPSAnR0VUREFUQSc7XG5cbmNvbnN0IFNVQkpFQ1QgPSAnc3ViamVjdCc7XG5jb25zdCBUT0tFTiA9ICd0b2tlbic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gXG59KVxuZXhwb3J0IGNsYXNzIEJhc2ljRm9ybUNvbXBvbmVudCBleHRlbmRzIEZvcm1TdHJ1Y3R1cmVBbmREYXRhIHtcbiAgcHJpdmF0ZSBfY29udHJvbFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfb3JpZ2luVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9mb3JtUm91dGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9kZWZpbml0aW9uT2J0YWluZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbm90aWZ5Rm9ybUFjdGl2aXR5OiBib29sZWFuID0gdHJ1ZTtcbiAgLy8gRXZlbnRvcyBkZSBhY2Npb25lcyB5IGNhbXBvc1xuICBwcml2YXRlIF9mb3JtQ2hhbmdlU3RhdGU6IGFueVtdID0gW107XG4gIHByaXZhdGUgX2Zvcm1TZWN0aW9uc0NhbkRlYWN0aXZhdGU6IGFueSA9IHt9O1xuICBwcml2YXRlIF9mb3JtU2VjdGlvbnNBY3RpdmF0ZTogYW55ID0ge307XG4gIHByaXZhdGUgX2Zvcm1TZWN0aW9uc0luYWN0aXZhdGU6IGFueSA9IHt9O1xuICBwcml2YXRlIF9mb3JtQWN0aW9uc1N0YXJ0OiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfZm9ybUFjdGlvbnNGaW5pc2g6IGFueSA9IHt9O1xuICBwcml2YXRlIF9maWVsZElucHV0VmFsaWRhdGlvbjogYW55ID0ge307XG4gIHByaXZhdGUgX2ZpZWxkVmFsaWRhdGlvbnNTdGFydDogYW55ID0ge307XG4gIHByaXZhdGUgX2ZpZWxkVmFsaWRhdGlvbnNGaW5pc2g6IGFueSA9IHt9O1xuICAvLyBDYWxsYmFjayBkZSBhY2Npb25lcyBkZSB0YWJsYXNcbiAgcHJpdmF0ZSBfdGFibGVTZWxlY3Rpb25zU3RhcnQ6IGFueSA9IHt9O1xuICBwcml2YXRlIF90YWJsZVNlbGVjdGlvbnNGaW5pc2g6IGFueSA9IHt9O1xuICBwcml2YXRlIF90YWJsZUFjdGlvbnNTdGFydDogYW55ID0ge307XG4gIHByaXZhdGUgX3RhYmxlQWN0aW9uc0ZpbmlzaDogYW55ID0ge307XG4gIHByaXZhdGUgX3RhYmxlR2V0RGF0YVN0YXJ0OiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfdGFibGVHZXREYXRhRmluaXNoOiBhbnkgPSB7fTtcbiAgLy8gRXJyb3JlcyBlbiBwcm9jZXNvc1xuICBwcml2YXRlIF9hY3Rpb25TZXJ2ZXJFcnJvcjogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBfZmllbGRTZXJ2ZXJFcnJvcjogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBfdGFibGVTZXJ2ZXJFcnJvcjogYW55W10gPSBbXTtcbiAgLy8gRGF0b3MgY29tcGxlbWVudGFyaW9zIGRlbCBmb3JtdWxhcmlvXG4gIHByb3RlY3RlZCBpbnB1dERhdGFGaWVsZHM6IGFueSA9IHt9O1xuICBwcm90ZWN0ZWQgZXh0cmFEYXRhOiBhbnkgPSB7fTtcbiAgcHJvdGVjdGVkIF9ldmVudEVtaXRlcjogTGliRXZlbnRNYW5hZ2VyU2VydmljZTtcbiAgcHJvdGVjdGVkIGVuYWJsZWRTZWN0aW9uczogUmVjb3JkRm9ybVNlY3Rpb25bXSA9IFtdO1xuICAvLyBHZXN0acOzbiBkZSBlcnJvclxuICBfZXJyb3JUeXBlOiBzdHJpbmcgPSAnJztcbiAgZXJyb3JDb2RlOiBzdHJpbmcgPSAnJztcbiAgZXJyb3JGdWxsQ29kZTogc3RyaW5nID0gJyc7XG4gIGVycm9yTmFtZTogc3RyaW5nID0gJyc7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIGVycm9yRGV0YWlsOiBzdHJpbmcgPSAnJztcblxuICAvLyBDb250cm9sIGRlIGVzdGFkb1xuICB2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGJ1c3k6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZm9ybU1hbmFnZXJTZXJ2aWNlOiBMaWJGb3JtTWFuYWdlclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIF9ldmVudE1hbmFnZXI6IExpYkV2ZW50TWFuYWdlclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGZpbGVNZ210U2VydmljZXM6IExpYkZpbGVNYW5hZ2VtZW50U2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZXZlbnRFbWl0ZXIgPSB0aGlzLl9ldmVudE1hbmFnZXI7XG4gICAgdGhpcy5jbGVhblN0YXJ0KCk7XG4gICAgdGhpcy5jdXN0b21QcmVQcm9jZXNzaW5nKCk7XG4gIH1cblxuICBjbGVhblN0YXJ0KCkge1xuICAgIHRoaXMuX2Vycm9yVHlwZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JDb2RlID0gJyc7XG4gICAgdGhpcy5lcnJvckZ1bGxDb2RlID0gJyc7XG4gICAgdGhpcy5lcnJvck5hbWUgPSAnJztcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JEZXRhaWwgPSAnJztcbiAgICB0aGlzLmNsZWFuRm9ybSgpO1xuICAgIHRoaXMuX2NvbnRyb2xUb2tlbiA9IG51bGw7XG4gICAgdGhpcy5pbnB1dERhdGFGaWVsZHMgPSB7fTtcbiAgICB0aGlzLl9kZWZpbml0aW9uT2J0YWluZWQgPSBmYWxzZTtcbiAgICAvLyBTZSBsaW1waWFuIGxvcyBtYW5lamFkb3JlcyBkZSBldmVudG9zXG4gICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgdGhpcy5fZm9ybUNoYW5nZVN0YXRlID0gW107XG4gICAgdGhpcy5fZm9ybVNlY3Rpb25zQ2FuRGVhY3RpdmF0ZSA9IHt9O1xuICAgIHRoaXMuX2Zvcm1TZWN0aW9uc0FjdGl2YXRlID0ge307XG4gICAgdGhpcy5fZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZSA9IHt9O1xuICAgIHRoaXMuX2Zvcm1BY3Rpb25zU3RhcnQgPSB7fTtcbiAgICB0aGlzLl9mb3JtQWN0aW9uc0ZpbmlzaCA9IHt9O1xuICAgIHRoaXMuX2ZpZWxkSW5wdXRWYWxpZGF0aW9uID0ge307XG4gICAgdGhpcy5fZmllbGRWYWxpZGF0aW9uc1N0YXJ0ID0ge307XG4gICAgdGhpcy5fZmllbGRWYWxpZGF0aW9uc0ZpbmlzaCA9IHt9O1xuICAgIHRoaXMuX3RhYmxlU2VsZWN0aW9uc1N0YXJ0ID0ge307XG4gICAgdGhpcy5fdGFibGVTZWxlY3Rpb25zRmluaXNoID0ge307XG4gICAgdGhpcy5fdGFibGVBY3Rpb25zU3RhcnQgPSB7fTtcbiAgICB0aGlzLl90YWJsZUFjdGlvbnNGaW5pc2ggPSB7fTtcbiAgICB0aGlzLl90YWJsZUdldERhdGFTdGFydCA9IHt9O1xuICAgIHRoaXMuX3RhYmxlR2V0RGF0YUZpbmlzaCA9IHt9O1xuXG4gICAgdGhpcy5fYWN0aW9uU2VydmVyRXJyb3IgPSBbXTtcbiAgICB0aGlzLl9maWVsZFNlcnZlckVycm9yID0gW107XG4gICAgdGhpcy5fdGFibGVTZXJ2ZXJFcnJvciA9IFtdO1xuXG4gICAgdGhpcy5vbkFjdGlvblNlcnZlckVycm9yKCgpID0+IHRoaXMuZGlzcGxheUFjdGlvblNlcnZlckVycm9yKCkpO1xuICAgIHRoaXMub25WYWxpZGF0aW9uU2VydmVyRXJyb3IoKCkgPT4gdGhpcy5kaXNwbGF5VmFsaWRhdGlvblNlcnZlckVycm9yKCkpO1xuICAgIHRoaXMub25UYWJsZVNlcnZlckVycm9yKCgpID0+IHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKSk7XG4gIH1cblxuICBnZXQgZm9ybVZpc2libGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnZpc2libGU7IH1cbiAgZ2V0IGZvcm0oKSB7IHJldHVybiB0aGlzOyB9XG5cbiAgLy8gTcOpdG9kb3MgdmlydHVhbGVzXG4gIGN1c3RvbVByZVByb2Nlc3NpbmcoKSB7IH1cbiAgc3RhcnQoKSB7IH1cbiAgY3VzdG9tRm9ybVN0YXJ0KCkgeyB9XG4gIGRpc3BsYXlBY3Rpb25TZXJ2ZXJFcnJvcigpIHsgfVxuICBkaXNwbGF5VmFsaWRhdGlvblNlcnZlckVycm9yKCkgeyB9XG4gIGRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCkgeyB9XG4gIHNob3dGaWVsZEluZm8oY29kZT86IHN0cmluZywgZGV0YWlsPzogYW55KSB7IH1cbiAgc2hvd01vZGFsRGlhbG9nKHRpdGxlLCBib2R5LCBvcHRpb25zLCBjYWxsYmFjaz8sIHBhcmFtcz8pIHsgfVxuICBvcGVuVXBsb2FkRGlhbG9nKHRpdGxlLCBib2R5LCBvcHRpb25zLCBjYWxsYmFjaz8sIHBhcmFtcz8pIHsgfVxuXG4gIHN1YnNjcmliZUFwcEV2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50RW1pdGVyLnN1YnNjcmliZShldmVudE5hbWUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIG9wZW5Gb3JtKG5hbWU6IHN0cmluZywgZGF0YTogYW55ID0gbnVsbCwgYmFja0RhdGE6IGFueSA9IG51bGwsIGNsZWFuU3RhY2sgPSBmYWxzZSk6IHZvaWQge1xuICAgIGxldCBvcmlnaW46IGFueSA9IG51bGw7XG4gICAgaWYgKCFjbGVhblN0YWNrKSB7XG4gICAgICBvcmlnaW4gPSB7IC4uLmJhY2tEYXRhLCBuYW1lOiB0aGlzLm5hbWUsIHVybDogdGhpcy5fZm9ybVJvdXRlLCB0b2tlbjogdGhpcy5fY29udHJvbFRva2VuIH07XG4gICAgICBvcmlnaW4uc3ViamVjdCA9IG9yaWdpbj8uc3ViamVjdCA/PyB0aGlzLnN1YmplY3Q7XG4gICAgICBvcmlnaW4uc3RhdGUgPSBvcmlnaW4/LnN0YXRlID8/IHRoaXMuc3RhdGU7XG4gICAgICBvcmlnaW4uZmllbGRzID0gb3JpZ2luPy5maWVsZHMgPz8ge307XG4gICAgICBvcmlnaW4uZXh0cmEgPSBvcmlnaW4/LmV4dHJhID8/IHt9O1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSB7IC4uLmRhdGEsIG5hbWUgfTtcbiAgICB0YXJnZXQuc3ViamVjdCA9IHRhcmdldD8uc3ViamVjdCA/PyBudWxsO1xuICAgIHRhcmdldC5zdGF0ZSA9IHRhcmdldD8uc3RhdGUgPz8gbnVsbDtcbiAgICB0YXJnZXQuZmllbGRzID0gdGFyZ2V0Py5maWVsZHMgPz8ge307XG4gICAgdGFyZ2V0LmV4dHJhID0gdGFyZ2V0Py5leHRyYSA/PyB7fTtcbiAgICB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5vcGVuRm9ybShvcmlnaW4sIHRhcmdldCk7XG4gIH1cblxuICBlbmFibGVBY3Rpdml0eU5vdGlmaWNhdGlvbigpIHsgdGhpcy5fbm90aWZ5Rm9ybUFjdGl2aXR5ID0gdHJ1ZTsgfVxuICBkaXNhYmxlQWN0aXZpdHlOb3RpZmljYXRpb24oKSB7IHRoaXMuX25vdGlmeUZvcm1BY3Rpdml0eSA9IGZhbHNlOyB9XG4gIGNhbkdvQmFjaygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX29yaWdpblRva2VuICE9PSBudWxsIH1cbiAgZ29CYWNrKCk6IHZvaWQgeyByZXR1cm4gdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuYmFja1RvKCk7IH1cbiAgZ29CYWNrRm9ybSgpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZ29CYWNrKCk7IH1cbiAgZ2V0T3JpZ2luRGV0YWlsKCk6IGFueSB7IHJldHVybiB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZT8uZ2V0Rm9ybUluZm8odGhpcy5fb3JpZ2luVG9rZW4gPz8gJycpOyB9XG5cbiAgc2V0RXJyb3IoZXJyb3JUeXBlOiBzdHJpbmcgfCBudWxsLCBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IG51bGwsIGVycm9yRGV0YWlsOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5fZXJyb3JUeXBlID0gZXJyb3JUeXBlIHx8ICcnO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlIHx8ICcnO1xuICAgIHRoaXMuZXJyb3JEZXRhaWwgPSBlcnJvckRldGFpbCB8fCAnJztcbiAgfVxuXG4gIHJlc2V0RXJyb3IoKTogdm9pZCB7XG4gICAgdGhpcy5lcnJvckNvZGUgPSBOT19FUlJPUjtcbiAgICB0aGlzLmVycm9yRnVsbENvZGUgPSAnJztcbiAgICB0aGlzLmVycm9yTmFtZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9ICcnO1xuICB9XG5cbiAgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9lcnJvclR5cGU7IH1cbiAgZ2V0RXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmVycm9yTWVzc2FnZTsgfVxuICBnZXRFcnJvckRldGFpbCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5lcnJvckRldGFpbDsgfVxuICBnZXRFcnJvck5hbWUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZXJyb3JOYW1lOyB9XG4gIGdldEVycm9yRnVsbENvZGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZXJyb3JGdWxsQ29kZTsgfVxuICBnZXRFcnJvckNvZGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZXJyb3JDb2RlOyB9XG5cbiAgZ2V0Rm9ybVBhcmFtZXRlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAobmFtZSkgPyAodGhpcy5leHRyYURhdGE/LltuYW1lXSA/PyBudWxsKSA6IG51bGw7XG4gIH1cblxuICBwcmVvY2Vzc0lucHV0UGFyYW1zKHBhcmFtczogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgdGhpcy5fY29udHJvbFRva2VuID0gcGFyYW1zPy5bVE9LRU5dID8/IG51bGw7XG4gICAgdGhpcy5zdWJqZWN0ID0gcGFyYW1zPy5bU1VCSkVDVF0gPz8gbnVsbDtcbiAgICBjb25zdCB0b2tlbkluZm86IGFueSA9ICh0aGlzLl9jb250cm9sVG9rZW4pID8gdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuZ2V0Rm9ybUluZm8odGhpcy5fY29udHJvbFRva2VuKSA6IHt9O1xuICAgIGNvbnN0IHsgdG9rZW4sIHN1YmplY3QsIHN0YXRlLCBmaWVsZHMsIGV4dHJhLCBvcmlnaW5Ub2tlbiB9ID0gdG9rZW5JbmZvO1xuICAgIGlmICh0b2tlbiAmJiB0aGlzLl9jb250cm9sVG9rZW4gPT09IHRva2VuKSB7XG4gICAgICB0aGlzLnN1YmplY3QgPSB0aGlzLnN1YmplY3QgPz8gc3ViamVjdCA/PyBudWxsO1xuICAgICAgdGhpcy5pbnB1dERhdGFGaWVsZHMgPSBmaWVsZHM7XG4gICAgICB0aGlzLmV4dHJhRGF0YSA9IGV4dHJhO1xuICAgICAgdGhpcy5fb3JpZ2luVG9rZW4gPSBvcmlnaW5Ub2tlbjtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdWJzY3JpYmVTZWN0aW9uQWN0aXZhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtU2VjdGlvbnMgPSB0aGlzLnNlY3Rpb25zO1xuICAgIGNvbnN0IHNlY3Rpb25OYW1lcyA9IE9iamVjdC5rZXlzKGZvcm1TZWN0aW9ucyk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNlY3Rpb25OYW1lcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHNlY3Rpb25OYW1lID0gc2VjdGlvbk5hbWVzW2luZGV4XTtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSBmb3JtU2VjdGlvbnNbc2VjdGlvbk5hbWVdO1xuICAgICAgc2VjdGlvbi5hY3RpdmF0aW9uLnN1YnNjcmliZSgoY29kZTogc3RyaW5nKSA9PiB0aGlzLmxhdW5jaFNlY3Rpb25BY3RpdmF0aW9uKGNvZGUpKTtcbiAgICAgIHNlY3Rpb24uaW5hY3RpdmF0aW9uLnN1YnNjcmliZSgoY29kZTogc3RyaW5nKSA9PiB0aGlzLmxhdW5jaFNlY3Rpb25JbmFjdGl2YXRpb24oY29kZSkpO1xuICAgICAgLy8gQWRpY2lvbmFsbWVudGUgc2UgbGUgcGlkZSBhIGxhIHNlY2Npw7NuIHNlIHN1YnNjcmliYSBhbCBjYW1iaW8gZGUgZXN0YWRvIGRlbCBmb3JtdWxhcmlvXG4gICAgICBzZWN0aW9uLmNvbm5lY3RXaXRoUGFyZW50Rm9ybSh0aGlzLCB0aGlzLnN0YXRlQ2hhbmdlKTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVGaWVsZHNTdWJqZWN0cygpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy5nZXRGaWVsZHMoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtRmllbGRzKSkge1xuICAgICAgZm9ybUZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgZmllbGQuZWRpdGlvbkZpbmlzaC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgY29kZSwgaW50cmluc2ljVmFsaWRhdGlvbiB9ID0gZXZlbnQ7XG4gICAgICAgICAgdGhpcy5zdGFydEZpZWxkVmFsaWRhdGlvbihjb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZpZWxkLmVkaXRpb25QYXJ0aWFsLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgeyBjb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uIH0gPSBldmVudDtcbiAgICAgICAgICB0aGlzLnN0YXJ0RmllbGRJbnB1dFZhbGlkYXRpb24oY29kZSwgaW50cmluc2ljVmFsaWRhdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICBmaWVsZC5kZXRhaWxSZXF1ZXN0LnN1YnNjcmliZShldmVudCA9PiB0aGlzLnNob3dGaWVsZEluZm8oZXZlbnQuY29kZSwgZXZlbnQuZGV0YWlsKSk7XG4gICAgICAgIC8vIEFkaWNpb25hbG1lbnRlIHNlIGxlIHBpZGUgYWwgY2FtcG8gc2Ugc3Vic2NyaWJhIGFsIGNhbWJpbyBkZSBlc3RhZG8gZGVsIGZvcm11bGFyaW9cbiAgICAgICAgZmllbGQuY29ubmVjdFdpdGhQYXJlbnRGb3JtKHRoaXMsIHRoaXMuc3RhdGVDaGFuZ2UpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3Vic2NyaWJlQWN0aW9uU3ViamVjdHMoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUFjdGlvbnMgPSB0aGlzLmdldEFjdGlvbnMoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtQWN0aW9ucykpIHtcbiAgICAgIGZvcm1BY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgICAgYWN0aW9uLmFjdGlvbkFjdGl2YXRlZC5zdWJzY3JpYmUoY29kZSA9PiB0aGlzLnN0YXJ0QWN0aW9uKGNvZGUpKTtcbiAgICAgICAgLy8gQWRpY2lvbmFsbWVudGUgc2UgbGUgcGlkZSBhIGxhIGFjY2nDs24gc2Ugc3Vic2NyaWJhIGFsIGNhbWJpbyBkZSBlc3RhZG8gZGVsIGZvcm11bGFyaW9cbiAgICAgICAgYWN0aW9uLmNvbm5lY3RXaXRoUGFyZW50Rm9ybSh0aGlzLCB0aGlzLnN0YXRlQ2hhbmdlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZVRhYmxlU3ViamVjdHMoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybVRhYmxlcyA9IHRoaXMuZ2V0VGFibGVzKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybVRhYmxlcykpIHtcbiAgICAgIGZvcm1UYWJsZXMuZm9yRWFjaCh0YWJsZSA9PiB7XG4gICAgICAgIHRhYmxlLmlubGluZUFjdGlvblRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZUFjdGlvbihldmVudCkpO1xuICAgICAgICB0YWJsZS5nbG9iYWxBY3Rpb25UcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVHbG9iYWxBY3Rpb24oZXZlbnQpKTtcbiAgICAgICAgdGFibGUucmVjb3JkU2VsZWN0aW9uVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlUmVjb3JkU2VsZWN0aW9uKGV2ZW50KSk7XG4gICAgICAgIHRhYmxlLnNlbGVjdGlvbkFjdGlvblRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZVNlbGVjdGlvbkFjdGlvbihldmVudCkpO1xuICAgICAgICB0YWJsZS5nZXREYXRhVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlR2V0RGF0YShldmVudCkpO1xuICAgICAgICAvLyBBZGljaW9uYWxtZW50ZSBzZSBsZSBwaWRlIGEgbGEgdGFibGEgc2Ugc3Vic2NyaWJhIGFsIGNhbWJpbyBkZSBlc3RhZG8gZGVsIGZvcm11bGFyaW9cbiAgICAgICAgdGFibGUuY29ubmVjdFdpdGhQYXJlbnRGb3JtKHRoaXMsIHRoaXMuc3RhdGVDaGFuZ2UpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZm9ybUluaXQocGFyYW1zLCBmb3JjZVJlbG9hZCA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGluaXRpYWxTdGF0ZTogc3RyaW5nIHwgbnVsbCA9IHRoaXMucHJlb2Nlc3NJbnB1dFBhcmFtcyhwYXJhbXMpO1xuICAgIGlmICghdGhpcy5uYW1lKSB7IHJldHVybjsgfVxuICAgIGlmIChmb3JjZVJlbG9hZCB8fCAhdGhpcy5fZGVmaW5pdGlvbk9idGFpbmVkKSB7XG4gICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xuICAgICAgY29uc3QgZm9ybURlZmluaXRpb24gPSBhd2FpdCB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5nZXRGb3JtRGVmaW5pdGlvbih0aGlzLm5hbWUpO1xuICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgICB0aGlzLmxvYWREZWZpbml0aW9uKGZvcm1EZWZpbml0aW9uKVxuICAgICAgdGhpcy5fZGVmaW5pdGlvbk9idGFpbmVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhbkRhdGEoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN1cHBvcnRTdGF0ZShpbml0aWFsU3RhdGUgPz8gJycpKSB7XG4gICAgICBpbml0aWFsU3RhdGUgPSB0aGlzLmRlZmF1bHRTdGF0ZSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dEZpZWxkTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmlucHV0RGF0YUZpZWxkcyk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGlucHV0RmllbGROYW1lcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBpbnB1dEZpZWxkTmFtZXNbaW5kZXhdO1xuICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuaW5wdXREYXRhRmllbGRzW2NvZGVdO1xuICAgICAgdGhpcy5zZXRGaWVsZFZhbHVlKGNvZGUsIGZpZWxkVmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnN1YnNjcmliZVNlY3Rpb25BY3RpdmF0aW9uKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVGaWVsZHNTdWJqZWN0cygpO1xuICAgIHRoaXMuc3Vic2NyaWJlQWN0aW9uU3ViamVjdHMoKTtcbiAgICB0aGlzLnN1YnNjcmliZVRhYmxlU3ViamVjdHMoKTtcbiAgICAvLyBTZSBkZWZpbmUgZWwgZXN0YWRvIGluaWNpYWwgeSBzZSBzb2xpY2l0YSBsYSBhY2Npw7NuIGluaWNpYWxcbiAgICB0aGlzLmNoYW5nZVN0YXRlKGluaXRpYWxTdGF0ZSB8fCB0aGlzLmRlZmF1bHRTdGF0ZSk7XG4gICAgY29uc3QgcmVjb3JkUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLmdldERhdGEpO1xuICAgIHRoaXMuY2hlY2tFcnJvclJlY29yZFJlY2VpdmVkKHJlY29yZFJlc3BvbnNlKTtcbiAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuZW5hYmxlZFNlY3Rpb25zID0gdGhpcy52aXNpYmxlU2VjdGlvbnMgPz8gW107XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gICAgdGhpcy5jdXN0b21Gb3JtU3RhcnQoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNoYW5nZVN0YXRlKHN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGF0ZUNoYW5nZWQgPSBzdXBlci5jaGFuZ2VTdGF0ZShzdGF0ZSA/PyAnJykgPz8gZmFsc2U7XG4gICAgaWYgKHN0YXRlQ2hhbmdlZCkge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uTWV0aG9kcyA9IHRoaXMuX2Zvcm1DaGFuZ2VTdGF0ZTtcbiAgICAgIGlmIChjbGllbnRBY3Rpb25NZXRob2RzICYmIGNsaWVudEFjdGlvbk1ldGhvZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNsaWVudEFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgICBjYWxsYmFjayhzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlQ2hhbmdlZDtcbiAgfVxuXG4gIGNoZWNrRXJyb3JSZWNvcmRSZWNlaXZlZChyZWNvcmRSZXNwb25zZTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBlcnJvciB9ID0gcmVjb3JkUmVzcG9uc2UgPz8ge307XG4gICAgaWYgKCFlcnJvcikgeyByZXR1cm4gZmFsc2U7IH1cbiAgICB0aGlzLmVycm9yQ29kZSA9IHJlY29yZFJlc3BvbnNlLmVycm9yQ29kZTtcbiAgICB0aGlzLmVycm9yRnVsbENvZGUgPSByZWNvcmRSZXNwb25zZS5lcnJvckZ1bGxDb2RlO1xuICAgIHRoaXMuZXJyb3JOYW1lID0gcmVjb3JkUmVzcG9uc2UuZXJyb3JOYW1lO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gcmVjb3JkUmVzcG9uc2UuZXJyb3JNZXNzYWdlO1xuICAgIHRoaXMuZXJyb3JEZXRhaWwgPSByZWNvcmRSZXNwb25zZS5lcnJvckRldGFpbDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGVycm9yT2NjdXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuZXJyb3JDb2RlICE9PSBOT19FUlJPUik7XG4gIH1cblxuICAvKipcbiAgICogU29wb3J0ZSBtYW5lam8gZGUgZXZlbnRvcyBkZSBmb3JtdWxhcmlvXG4gICAqL1xuXG4gIGFzeW5jIHJlcXVlc3RGb3JtQWN0aW9uKGFjdGlvbkNvZGU6IHN0cmluZywgYWN0aW9uU3ViamVjdDogYW55ID0ge30pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGFjdGlvbkRldGFpbCA9IHtcbiAgICAgIGZvcm1Db2RlOiB0aGlzLm5hbWUsXG4gICAgICBmb3JtU3ViamVjdDogdGhpcy5zdWJqZWN0LFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMuc3RhdGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgYWN0aW9uU3ViamVjdCxcbiAgICAgIHZlcnNpb246IFBBWUxPQURfVkVSU0lPTixcbiAgICAgIGZvcm1EYXRhOiB0aGlzLmdldFBheWxvYWQoKSxcbiAgICAgIGltbXV0YWJsZURhdGE6IHRoaXMuaW1tdXRhYmxlRGF0YSxcbiAgICB9O1xuICAgIHRoaXMuZXJyb3JDb2RlID0gTk9fRVJST1I7XG4gICAgdGhpcy5lcnJvckZ1bGxDb2RlID0gJyc7XG4gICAgdGhpcy5lcnJvck5hbWUgPSAnJztcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JEZXRhaWwgPSAnJztcbiAgICB0aGlzLmJ1c3kgPSB0cnVlO1xuICAgIGNvbnN0IGZvcm1BY3Rpb25SZXNwb25zZTogYW55ID0gYXdhaXQgdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuZXhlY1NlcnZlckFjdGlvbihhY3Rpb25EZXRhaWwpO1xuICAgIGlmICghZm9ybUFjdGlvblJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgaWYgKGZvcm1BY3Rpb25SZXNwb25zZS5oYXNFcnJvcigpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGZvcm1BY3Rpb25SZXNwb25zZS5lcnJvcjtcbiAgICAgIHRoaXMuZXJyb3JDb2RlID0gZXJyb3IuZXJyb3JDb2RlO1xuICAgICAgdGhpcy5lcnJvckZ1bGxDb2RlID0gZXJyb3IuZXJyb3JGdWxsQ29kZTtcbiAgICAgIHRoaXMuZXJyb3JOYW1lID0gZXJyb3IuZXJyb3JOYW1lO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5lcnJvck1lc3NhZ2U7XG4gICAgICB0aGlzLmVycm9yRGV0YWlsID0gZXJyb3IuZXJyb3JEZXRhaWw7XG4gICAgfVxuICAgIGNvbnN0IGZvcm1SZXNwb25zZURhdGEgPSBmb3JtQWN0aW9uUmVzcG9uc2UuZ2V0RGF0YSgpO1xuICAgIHRoaXMudXBkYXRlRm9ybVdpdGhTZXJ2ZXJEYXRhKGZvcm1SZXNwb25zZURhdGEpO1xuICAgIHJldHVybiBmb3JtUmVzcG9uc2VEYXRhO1xuICB9XG5cbiAgdXBkYXRlRm9ybVdpdGhTZXJ2ZXJEYXRhKGZvcm1Db250ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7XG4gICAgICBjdXJyZW50TW9kZSwgZm9ybVN1YmplY3QsIGFjdGlvbnMsIGZpZWxkcywgcmVjb3JkVGFibGVzLFxuICAgICAgcmV0dXJuZWRGaWxlLCBpbW11dGFibGVEYXRhLCBleHRyYUluZm8sXG4gICAgfSA9IGZvcm1Db250ZW50O1xuICAgIGN1cnJlbnRNb2RlICYmIHRoaXMuY2hhbmdlU3RhdGUoY3VycmVudE1vZGUpO1xuICAgIGlmIChmb3JtU3ViamVjdCkgeyB0aGlzLnN1YmplY3QgPSBmb3JtU3ViamVjdDsgfVxuICAgIGlmIChhY3Rpb25zICYmIGFjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBjaGFuZ2VkQWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRBY3Rpb24oY2hhbmdlZEFjdGlvbi5hY3Rpb25Db2RlKTtcbiAgICAgICAgaWYgKGFjdGlvbk9iamVjdCkgeyBhY3Rpb25PYmplY3QudXBkYXRlRnJvbVNlcnZlcihjaGFuZ2VkQWN0aW9uKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmllbGRzICYmIGZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5nZWRGaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgY29uc3QgZmllbGRPYmplY3QgPSB0aGlzLmdldEZpZWxkKGNoYW5nZWRGaWVsZC5maWVsZENvZGUpO1xuICAgICAgICBpZiAoZmllbGRPYmplY3QpIHtcbiAgICAgICAgICBmaWVsZE9iamVjdC51cGRhdGVGcm9tU2VydmVyKGNoYW5nZWRGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlY29yZFRhYmxlcyAmJiByZWNvcmRUYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBjaGFuZ2VkVGFibGUgb2YgcmVjb3JkVGFibGVzKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZShjaGFuZ2VkVGFibGUudGFibGVDb2RlKTtcbiAgICAgICAgaWYgKHRhYmxlT2JqZWN0KSB7XG4gICAgICAgICAgdGFibGVPYmplY3QudXBkYXRlRnJvbVNlcnZlcihjaGFuZ2VkVGFibGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXR1cm5lZEZpbGUgJiYgcmV0dXJuZWRGaWxlLmZpbGUpIHtcbiAgICAgIHRoaXMuZmlsZU1nbXRTZXJ2aWNlcy5zYXZlRmlsZShyZXR1cm5lZEZpbGUuZmlsZSwgcmV0dXJuZWRGaWxlLm5hbWUsIHJldHVybmVkRmlsZS50eXBlKTtcbiAgICB9XG4gICAgdGhpcy5pbW11dGFibGVEYXRhID0gaW1tdXRhYmxlRGF0YTtcbiAgICB0aGlzLmV4dHJhSW5mbyA9IGV4dHJhSW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW5lam8gZGUgZXZlbnQgaGFuZGxlcnMgcGFyYSBlcnJvcmVzIFNlcnZlciBkZWwgZm9ybXVsYXJpb1xuICAgKi9cblxuICBjbGVhbkFjdGlvblNlcnZlckVycm9yKCkgeyB0aGlzLl9hY3Rpb25TZXJ2ZXJFcnJvciA9IFtdOyB9XG4gIGNsZWFuRmllbGRTZXJ2ZXJFcnJvcigpIHsgdGhpcy5fZmllbGRTZXJ2ZXJFcnJvciA9IFtdOyB9XG4gIGNsZWFuVGFibGVTZXJ2ZXJFcnJvcigpIHsgdGhpcy5fdGFibGVTZXJ2ZXJFcnJvciA9IFtdOyB9XG4gIG9uQWN0aW9uU2VydmVyRXJyb3IoY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7IHRoaXMuX2FjdGlvblNlcnZlckVycm9yLnB1c2goeyBjYWxsYmFjaywgcHJvcGVydGllcyB9KTsgfVxuICBvblZhbGlkYXRpb25TZXJ2ZXJFcnJvcihjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHsgdGhpcy5fZmllbGRTZXJ2ZXJFcnJvci5wdXNoKHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSk7IH1cbiAgb25UYWJsZVNlcnZlckVycm9yKGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkgeyB0aGlzLl90YWJsZVNlcnZlckVycm9yLnB1c2goeyBjYWxsYmFjaywgcHJvcGVydGllcyB9KTsgfVxuXG4gIC8qKlxuICAgKiBNYW5lam8gZGUgZXZlbnQgaGFuZGxlcnMgcGFyYSBhY2Npb25lcyBzb2JyZSBlbCBmb3JtdWxhcmlvXG4gICAqL1xuXG4gIG9uRm9ybUNoYW5nZShjYWxsYmFjaykge1xuICAgIHRoaXMuX2Zvcm1DaGFuZ2VTdGF0ZS5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIG9uU2VjdGlvbkNhbkRlYWN0aXZhdGUoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgY29uc3Qgc2VjdGlvblNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgc2VjdGlvblNldC5mb3JFYWNoKChzZWN0aW9uTmFtZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9mb3JtU2VjdGlvbnNDYW5EZWFjdGl2YXRlW3NlY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLl9mb3JtU2VjdGlvbnNDYW5EZWFjdGl2YXRlW3NlY3Rpb25OYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5fZm9ybVNlY3Rpb25zQ2FuRGVhY3RpdmF0ZVtzZWN0aW9uTmFtZV0ucHVzaCh7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgb25TZWN0aW9uQWN0aXZhdGlvbihjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICBjb25zdCBzZWN0aW9uU2V0ID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBzZWN0aW9uU2V0LmZvckVhY2goKHNlY3Rpb25OYW1lKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2Zvcm1TZWN0aW9uc0FjdGl2YXRlW3NlY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLl9mb3JtU2VjdGlvbnNBY3RpdmF0ZVtzZWN0aW9uTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Zvcm1TZWN0aW9uc0FjdGl2YXRlW3NlY3Rpb25OYW1lXS5wdXNoKHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSk7XG4gICAgfSk7XG4gIH1cblxuICBvblNlY3Rpb25JbmFjdGl2YXRpb24oY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgY29uc3Qgc2VjdGlvblNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgc2VjdGlvblNldC5mb3JFYWNoKChzZWN0aW9uTmFtZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9mb3JtU2VjdGlvbnNJbmFjdGl2YXRlW3NlY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLl9mb3JtU2VjdGlvbnNJbmFjdGl2YXRlW3NlY3Rpb25OYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5fZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZVtzZWN0aW9uTmFtZV0ucHVzaCh7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgb25BY3Rpb25TdGFydChjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICBjb25zdCBhY3Rpb25TZXQgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIGFjdGlvblNldC5mb3JFYWNoKChhY3Rpb25OYW1lKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2Zvcm1BY3Rpb25zU3RhcnRbYWN0aW9uTmFtZV0pIHtcbiAgICAgICAgdGhpcy5fZm9ybUFjdGlvbnNTdGFydFthY3Rpb25OYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5fZm9ybUFjdGlvbnNTdGFydFthY3Rpb25OYW1lXS5wdXNoKHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSk7XG4gICAgfSk7XG4gIH1cblxuICBvbkFjdGlvbkZpbmlzaChjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICBjb25zdCBhY3Rpb25TZXQgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIGFjdGlvblNldC5mb3JFYWNoKChhY3Rpb25OYW1lKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2Zvcm1BY3Rpb25zRmluaXNoW2FjdGlvbk5hbWVdKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1BY3Rpb25zRmluaXNoW2FjdGlvbk5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9mb3JtQWN0aW9uc0ZpbmlzaFthY3Rpb25OYW1lXS5wdXNoKHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlTZWN0aW9uQWN0aXZhdGlvbihjb2RlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBzZWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRTZWN0aW9uKGNvZGUpO1xuICAgIGlmICghc2VjdGlvbk9iamVjdCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBjb25zdCBjbGllbnRTZWN0aW9uTWV0aG9kcyA9IHRoaXMuX2Zvcm1TZWN0aW9uc0NhbkRlYWN0aXZhdGVbY29kZV07XG4gICAgaWYgKGNsaWVudFNlY3Rpb25NZXRob2RzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2Qgb2YgY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcHJvcGVydGllcyB9ID0gY2xpZW50U2VjdGlvbk1ldGhvZDtcbiAgICAgICAgY29uc3QgY2FuQWN0aXZhdGUgPSBjYWxsYmFjayhzZWN0aW9uT2JqZWN0KTtcbiAgICAgICAgaWYgKGNhbkFjdGl2YXRlID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGxhdW5jaFNlY3Rpb25BY3RpdmF0aW9uKGNvZGU6IHN0cmluZykge1xuICAgIHRoaXMubm90aWZ5Rm9ybUFjdGl2aXR5KCk7XG4gICAgY29uc3Qgc2VjdGlvbk9iamVjdCA9IHRoaXMuZ2V0U2VjdGlvbihjb2RlKTtcbiAgICBpZiAoIXNlY3Rpb25PYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZHMgPSB0aGlzLl9mb3JtU2VjdGlvbnNBY3RpdmF0ZVtjb2RlXTtcbiAgICBpZiAoY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGZvciAoY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZCBvZiBjbGllbnRTZWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0gPSBjbGllbnRTZWN0aW9uTWV0aG9kO1xuICAgICAgICBjYWxsYmFjayhzZWN0aW9uT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBsYXVuY2hTZWN0aW9uSW5hY3RpdmF0aW9uKGNvZGU6IHN0cmluZykge1xuICAgIHRoaXMubm90aWZ5Rm9ybUFjdGl2aXR5KCk7XG4gICAgY29uc3Qgc2VjdGlvbk9iamVjdCA9IHRoaXMuZ2V0U2VjdGlvbihjb2RlKTtcbiAgICBpZiAoIXNlY3Rpb25PYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZHMgPSB0aGlzLl9mb3JtU2VjdGlvbnNJbmFjdGl2YXRlW2NvZGVdO1xuICAgIGlmIChjbGllbnRTZWN0aW9uTWV0aG9kcykge1xuICAgICAgZm9yIChjb25zdCBjbGllbnRTZWN0aW9uTWV0aG9kIG9mIGNsaWVudFNlY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSA9IGNsaWVudFNlY3Rpb25NZXRob2Q7XG4gICAgICAgIGNhbGxiYWNrKHNlY3Rpb25PYmplY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0QWN0aW9uKGNvZGU6IHN0cmluZykge1xuICAgIHRoaXMubm90aWZ5Rm9ybUFjdGl2aXR5KCk7XG4gICAgY29uc3QgYWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRBY3Rpb24oY29kZSk7XG4gICAgaWYgKCFhY3Rpb25PYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgYWN0aW9uT2JqZWN0LnN0YXJ0KCk7XG4gICAgY29uc3QgY2xpZW50QWN0aW9uTWV0aG9kcyA9IHRoaXMuX2Zvcm1BY3Rpb25zU3RhcnRbY29kZV07XG4gICAgaWYgKGNsaWVudEFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzOiBhbnlbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBjbGllbnRBY3Rpb25NZXRob2Qgb2YgY2xpZW50QWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0gPSBjbGllbnRBY3Rpb25NZXRob2Q7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uUHJvbWlzZSA9IGNhbGxiYWNrKGFjdGlvbk9iamVjdCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY29udGludWVBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIChjdXJyICE9PSBmYWxzZSkpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgYWN0aW9uT2JqZWN0LnN0b3AoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0U2VydmVyQWN0aW9uKGFjdGlvbk9iamVjdCk7XG4gIH1cblxuICBhc3luYyBzdGFydFNlcnZlckFjdGlvbihhY3Rpb25JbnB1dCkge1xuICAgIGNvbnN0IGFjdGlvbiA9ICh0eXBlb2YgYWN0aW9uSW5wdXQgPT09ICdzdHJpbmcnKVxuICAgICAgPyB0aGlzLmdldEFjdGlvbihhY3Rpb25JbnB1dCkgOiBhY3Rpb25JbnB1dDtcbiAgICBpZiAoIWFjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgc2VydmVyRXJyb3IgPSBmYWxzZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoYWN0aW9uLmJhY2tlbmQpIHtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdEZvcm1BY3Rpb24oYWN0aW9uLmFjdGlvbkNvZGUpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmZpbmlzaEFjdGlvbihhY3Rpb24sIGFjdGlvblJlc3VsdCwgc2VydmVyRXJyb3IpO1xuICAgIHNlcnZlckVycm9yID0gISF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIGlmICghc2VydmVyRXJyb3IpIHtcbiAgICAgIGFjdGlvbi5uZXdTdGF0ZSAmJiB0aGlzLmNoYW5nZVN0YXRlKGFjdGlvbi5uZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9hY3Rpb25TZXJ2ZXJFcnJvci5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcHJvcGVydGllcyB9ID0gdGhpcy5fYWN0aW9uU2VydmVyRXJyb3JbaW5kZXhdO1xuICAgICAgICBjYWxsYmFjayhhY3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICBhY3Rpb24uc3RvcCgpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoQWN0aW9uKGFjdGlvbiwgYWN0aW9uUmVzdWx0LCBzZXJ2ZXJFcnJvciA9IGZhbHNlKSB7XG4gICAgY29uc3QgZmluaXNoQWN0aW9uTWV0aG9kcyA9IHRoaXMuX2Zvcm1BY3Rpb25zRmluaXNoW2FjdGlvbi5hY3Rpb25Db2RlXTtcbiAgICBpZiAoZmluaXNoQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudEFjdGlvbk1ldGhvZCBvZiBmaW5pc2hBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSA9IGNsaWVudEFjdGlvbk1ldGhvZDtcbiAgICAgICAgY29uc3QgY29udGludWVPbkVycm9yID0gcHJvcGVydGllcz8uY29udGludWVPbkVycm9yID8/IGZhbHNlO1xuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgKCFzZXJ2ZXJFcnJvciB8fCBjb250aW51ZU9uRXJyb3IpKSB7XG4gICAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjYWxsYmFjayhhY3Rpb24sIGFjdGlvblJlc3VsdCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgY29tcGxldGVHbG9iYWxBY3Rpb24oYWN0aW9uOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFNlcnZlckFjdGlvbihhY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmVqYWRvcmVzIGRlIGV2ZW50b3MgcGFyYSB2YWxpZGFjaW9uZXMgc29icmUgY2FtcG9zXG4gICAqL1xuXG4gIG9uRmllbGRJbnB1dChjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICBjb25zdCBmaWVsZFNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgZmllbGRTZXQuZm9yRWFjaCgoY29kZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9maWVsZElucHV0VmFsaWRhdGlvbltjb2RlXSkge1xuICAgICAgICB0aGlzLl9maWVsZElucHV0VmFsaWRhdGlvbltjb2RlXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5fZmllbGRJbnB1dFZhbGlkYXRpb25bY29kZV0ucHVzaCh7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgb25GaWVsZFZhbGlkYXRpb25TdGFydChjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICBjb25zdCBmaWVsZFNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgZmllbGRTZXQuZm9yRWFjaCgoY29kZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9maWVsZFZhbGlkYXRpb25zU3RhcnRbY29kZV0pIHtcbiAgICAgICAgdGhpcy5fZmllbGRWYWxpZGF0aW9uc1N0YXJ0W2NvZGVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9maWVsZFZhbGlkYXRpb25zU3RhcnRbY29kZV0ucHVzaCh7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgb25GaWVsZFZhbGlkYXRpb25GaW5pc2goY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgY29uc3QgZmllbGRTZXQgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIGZpZWxkU2V0LmZvckVhY2goKGNvZGUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZmllbGRWYWxpZGF0aW9uc0ZpbmlzaFtjb2RlXSkge1xuICAgICAgICB0aGlzLl9maWVsZFZhbGlkYXRpb25zRmluaXNoW2NvZGVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9maWVsZFZhbGlkYXRpb25zRmluaXNoW2NvZGVdLnB1c2goeyBjYWxsYmFjaywgcHJvcGVydGllcyB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0RmllbGRJbnB1dFZhbGlkYXRpb24oY29kZTogc3RyaW5nLCBpbnRyaW5zaWNWYWxpZGF0aW9uOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRoaXMubm90aWZ5Rm9ybUFjdGl2aXR5KCk7XG4gICAgY29uc3QgZmllbGRUb1ZhbGlkYXRlID0gdGhpcy5nZXRGaWVsZChjb2RlKTtcbiAgICBpZiAoIWZpZWxkVG9WYWxpZGF0ZSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBjb25zdCB2YWxpZGF0aW9uQ2FsbGJhY2tzID0gdGhpcy5fZmllbGRJbnB1dFZhbGlkYXRpb25bY29kZV07XG4gICAgaWYgKHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgIGNvbnN0IGNsaWVudFZhbGlkYXRpb25Qcm9taXNlczogYW55W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbk1ldGhvZCBvZiB2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSA9IHZhbGlkYXRpb25NZXRob2Q7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlVmFsaWRhdGlvblByb21pc2UgPSBjYWxsYmFjayhmaWVsZFRvVmFsaWRhdGUpO1xuICAgICAgICBjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMucHVzaChjb250aW51ZVZhbGlkYXRpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRGaWVsZFZhbGlkYXRpb24oY29kZTogc3RyaW5nLCBpbnRyaW5zaWNWYWxpZGF0aW9uOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRoaXMubm90aWZ5Rm9ybUFjdGl2aXR5KCk7XG4gICAgY29uc3QgZmllbGRUb1ZhbGlkYXRlID0gdGhpcy5nZXRGaWVsZChjb2RlKTtcbiAgICBpZiAoIWZpZWxkVG9WYWxpZGF0ZSkgeyByZXR1cm47IH1cbiAgICBjb25zdCB2YWxpZGF0aW9uQ2FsbGJhY2tzID0gdGhpcy5fZmllbGRWYWxpZGF0aW9uc1N0YXJ0W2NvZGVdO1xuICAgIGlmICh2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICBjb25zdCBjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb25NZXRob2Qgb2YgdmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0gPSB2YWxpZGF0aW9uTWV0aG9kO1xuICAgICAgICBjb25zdCBjbGllbnRWYWxpZGF0aW9uUHJvbWlzZSA9IGNhbGxiYWNrKGZpZWxkVG9WYWxpZGF0ZSk7XG4gICAgICAgIGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcy5wdXNoKGNsaWVudFZhbGlkYXRpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudFZhbGlkYXRpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50VmFsaWRhdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlVmFsaWRhdGlvbiA9IGNsaWVudFZhbGlkYXRpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiAoY3VyciAhPT0gZmFsc2UpKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpbnRyaW5zaWNWYWxpZGF0aW9uKSB7XG4gICAgICB0aGlzLnN0YXJ0U2VydmVyRmllbGRWYWxpZGF0aW9uKGZpZWxkVG9WYWxpZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRTZXJ2ZXJGaWVsZFZhbGlkYXRpb24oaW5wdXRGaWVsZDogc3RyaW5nIHwgRmllbGREZXNjcmlwdG9yKSB7XG4gICAgY29uc3QgZmllbGRPYmo6IEZpZWxkRGVzY3JpcHRvciB8IG51bGwgPSAodHlwZW9mIGlucHV0RmllbGQgPT09ICdzdHJpbmcnKVxuICAgICAgPyB0aGlzLmdldEZpZWxkKGlucHV0RmllbGQpIDogaW5wdXRGaWVsZDtcbiAgICBsZXQgc2VydmVyRXJyb3IgPSBmYWxzZTtcbiAgICBsZXQgdmFsaWRhdGlvblJlc3VsdDogYm9vbGVhbiA9IHRydWU7XG4gICAgaWYgKCFmaWVsZE9iaikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZmllbGRPYmouYmFja2VuZCkge1xuICAgICAgZmllbGRPYmoudmFsaWRhdGluZyA9IHRydWU7XG4gICAgICB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgICAucmVxdWVzdEZvcm1BY3Rpb24oZm9ybUFjdGlvbnMudmFsaWRhdGUsIGZpZWxkT2JqLmNvZGUpO1xuICAgICAgc2VydmVyRXJyb3IgPSAhIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGlmIChzZXJ2ZXJFcnJvcikge1xuICAgICAgZmllbGRPYmo/LnNldEVycm9yQ29kZSh0aGlzLmVycm9yQ29kZSk7XG4gICAgICBmaWVsZE9iaj8uc2V0RXJyb3JNZXNzYWdlKHRoaXMuZXJyb3JNZXNzYWdlKTtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9maWVsZFNlcnZlckVycm9yLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0gPSB0aGlzLl9maWVsZFNlcnZlckVycm9yW2luZGV4XTtcbiAgICAgICAgY2FsbGJhY2soZmllbGRPYmopO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLmZpbmlzaEZpZWxkVmFsaWRhdGlvbihmaWVsZE9iaiwgdmFsaWRhdGlvblJlc3VsdCwgc2VydmVyRXJyb3IpO1xuICAgIGZpZWxkT2JqLnZhbGlkYXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaEZpZWxkVmFsaWRhdGlvbihmaWVsZE9iamVjdDogYW55LCB2YWxpZGF0aW9uUmVzdWx0OiBib29sZWFuLCBzZXJ2ZXJFcnJvciA9IGZhbHNlKSB7XG4gICAgY29uc3QgdmFsaWRhdGlvbkNhbGxiYWNrcyA9IHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNGaW5pc2hbZmllbGRPYmplY3QuY29kZV07XG4gICAgaWYgKHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzOiBhbnlbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uTWV0aG9kIG9mIHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcHJvcGVydGllcyB9ID0gdmFsaWRhdGlvbk1ldGhvZDtcbiAgICAgICAgY29uc3QgY29udGludWVPbkVycm9yID0gcHJvcGVydGllcz8uY29udGludWVPbkVycm9yID8/IGZhbHNlO1xuICAgICAgICBpZiAoIXNlcnZlckVycm9yIHx8IGNvbnRpbnVlT25FcnJvcikge1xuICAgICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2FsbGJhY2soZmllbGRPYmplY3QsIHZhbGlkYXRpb25SZXN1bHQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNvbnRpbnVlRmllbGRWYWxpZGF0aW9uKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0U2VydmVyRmllbGRWYWxpZGF0aW9uKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmVqYWRvcmVzIGRlIGV2ZW50b3MgcGFyYSBhY2Npb25lcyBzb2JyZSBUYWJsYXNcbiAgICovXG5cbiAgb25UYWJsZUFjdGlvblN0YXJ0KGNvZGU6IHN0cmluZywgYWN0aW9uQ29kZTogc3RyaW5nLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUoY29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmxpbmVBY3Rpb25PYmplY3QgPSB0YWJsZU9iamVjdC5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFpbmxpbmVBY3Rpb25PYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVyczogYW55O1xuICAgIGlmICh0aGlzLl90YWJsZUFjdGlvbnNTdGFydFtjb2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zU3RhcnRbY29kZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHt9O1xuICAgICAgdGhpcy5fdGFibGVBY3Rpb25zU3RhcnRbY29kZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIGlmICghdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gPSBbXTtcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdLnB1c2goeyBjYWxsYmFjaywgcHJvcGVydGllcyB9KTtcbiAgfVxuXG4gIG9uVGFibGVBY3Rpb25GaW5pc2goY29kZTogc3RyaW5nLCBhY3Rpb25Db2RlOiBzdHJpbmcsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZShjb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlubGluZUFjdGlvbk9iamVjdCA9IHRhYmxlT2JqZWN0LmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgICBpZiAoIWlubGluZUFjdGlvbk9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzOiBhbnk7XG4gICAgaWYgKHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFtjb2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zRmluaXNoW2NvZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB7fTtcbiAgICAgIHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFtjb2RlXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgaWYgKCF0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA9IFtdO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0ucHVzaCh7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0pO1xuICB9XG5cbiAgb25UYWJsZVNlbGVjdGlvblN0YXJ0KGNvZGU6IHN0cmluZywgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVyczogYW55W107XG4gICAgaWYgKHRoaXMuX3RhYmxlU2VsZWN0aW9uc1N0YXJ0W2NvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZVNlbGVjdGlvbnNTdGFydFtjb2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gW107XG4gICAgICB0aGlzLl90YWJsZVNlbGVjdGlvbnNTdGFydFtjb2RlXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzLnB1c2goeyBjYWxsYmFjaywgcHJvcGVydGllcyB9KTtcbiAgfVxuXG4gIG9uVGFibGVTZWxlY3Rpb25GaW5pc2goY29kZTogc3RyaW5nLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUoY29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkgeyByZXR1cm47IH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzOiBhbnlbXTtcbiAgICBpZiAodGhpcy5fdGFibGVTZWxlY3Rpb25zRmluaXNoW2NvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZVNlbGVjdGlvbnNGaW5pc2hbY29kZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IFtdO1xuICAgICAgdGhpcy5fdGFibGVTZWxlY3Rpb25zRmluaXNoW2NvZGVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnMucHVzaCh7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0pO1xuICB9XG5cbiAgb25UYWJsZUdldERhdGFTdGFydChjb2RlOiBzdHJpbmcsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZShjb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnM6IGFueVtdO1xuICAgIGlmICh0aGlzLl90YWJsZUdldERhdGFTdGFydFtjb2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVHZXREYXRhU3RhcnRbY29kZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IFtdO1xuICAgICAgdGhpcy5fdGFibGVHZXREYXRhU3RhcnRbY29kZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVycy5wdXNoKHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSk7XG4gIH1cblxuICBvblRhYmxlR2V0RGF0YUZpbmlzaChjb2RlOiBzdHJpbmcsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZShjb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnM6IGFueTtcbiAgICBpZiAodGhpcy5fdGFibGVHZXREYXRhRmluaXNoW2NvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUdldERhdGFGaW5pc2hbY29kZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHt9O1xuICAgICAgdGhpcy5fdGFibGVHZXREYXRhRmluaXNoW2NvZGVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnNbR0VUX0RBVEFfQUNUSU9OXSA9IHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25FdmVudDogYW55KSB7XG4gICAgdGhpcy5ub3RpZnlGb3JtQWN0aXZpdHkoKTtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb25Db2RlKSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IGFjdGlvbiA9IHRhYmxlT2JqZWN0LmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgICBpZiAoIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICBjb25zdCB0YWJsZUFjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgYWN0aW9uLFxuICAgICAgdGFibGVDb2RlLFxuICAgICAgYWN0aW9uQ29kZSxcbiAgICB9O1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlQWN0aW9uc1N0YXJ0W3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzOiBhbnlbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcHJvcGVydGllcyB9ID0gdGFibGVBY3Rpb25NZXRob2Q7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSBjYWxsYmFjayh0YWJsZUFjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiAoY3VyciAhPT0gZmFsc2UpKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25EZXRhaWw6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIGFjdGlvbiwgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgbGV0IHNlcnZlckVycm9yID0gZmFsc2U7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGFjdGlvbi5iYWNrZW5kKSB7XG4gICAgICBjb25zdCBhY3Rpb25TdWJqZWN0ID0ge1xuICAgICAgICB0YWJsZUNvZGUsXG4gICAgICAgIGFjdGlvblR5cGU6IEdMT0JBTF9BQ1RJT04sXG4gICAgICAgIGFjdGlvbkNvZGVcbiAgICAgIH07XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy50YWJsZUFjdGlvbiwgYWN0aW9uU3ViamVjdCk7XG4gICAgICBzZXJ2ZXJFcnJvciA9ICEhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5maW5pc2hUYWJsZUdsb2JhbEFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0LCBzZXJ2ZXJFcnJvcik7XG4gICAgaWYgKCFzZXJ2ZXJFcnJvcikge1xuICAgICAgYWN0aW9uLm5ld1N0YXRlICYmIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX3RhYmxlU2VydmVyRXJyb3IubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSA9IHRoaXMuX3RhYmxlU2VydmVyRXJyb3JbaW5kZXhdO1xuICAgICAgICBjYWxsYmFjayh0YWJsZU9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRhYmxlT2JqZWN0LmZyZWVXYWl0aW5nKCk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hUYWJsZUdsb2JhbEFjdGlvbih0YWJsZUFjdGlvbkRldGFpbDogYW55LCBhY3Rpb25SZXN1bHQsIHNlcnZlckVycm9yID0gZmFsc2UpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zRmluaXNoW3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzOiBhbnlbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcHJvcGVydGllcyB9ID0gdGFibGVBY3Rpb25NZXRob2Q7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlT25FcnJvciA9IHByb3BlcnRpZXM/LmNvbnRpbnVlT25FcnJvciA/PyBmYWxzZTtcbiAgICAgICAgaWYgKCFzZXJ2ZXJFcnJvciB8fCBjb250aW51ZU9uRXJyb3IpIHtcbiAgICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNhbGxiYWNrKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVBY3Rpb24odGFibGVBY3Rpb25FdmVudDogYW55KSB7XG4gICAgdGhpcy5ub3RpZnlGb3JtQWN0aXZpdHkoKTtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSwgYWN0aW9uRGV0YWlsIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbkNvZGUpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgeyByZWNvcmRJZCwgcmVjb3JkRGF0YSB9ID0gYWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IGFjdGlvbiA9IHRhYmxlT2JqZWN0LmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgICBpZiAoIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICBjb25zdCB0YWJsZUFjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgYWN0aW9uLFxuICAgICAgdGFibGVDb2RlLFxuICAgICAgYWN0aW9uQ29kZSxcbiAgICAgIHJlY29yZElkLFxuICAgICAgcmVjb3JkRGF0YVxuICAgIH07XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zU3RhcnRbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0gPSB0YWJsZUFjdGlvbk1ldGhvZDtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IGNhbGxiYWNrKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIChjdXJyICE9PSBmYWxzZSkpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlcnZlckFjdGlvbih0YWJsZUFjdGlvbkRldGFpbDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZU9iamVjdCwgYWN0aW9uLCB0YWJsZUNvZGUsIGFjdGlvbkNvZGUsIHJlY29yZElkLCByZWNvcmREYXRhIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgbGV0IHNlcnZlckVycm9yID0gZmFsc2U7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGFjdGlvbi5iYWNrZW5kKSB7XG4gICAgICBjb25zdCBhY3Rpb25TdWJqZWN0ID0ge1xuICAgICAgICB0YWJsZUNvZGUsXG4gICAgICAgIGFjdGlvblR5cGU6IHRoaXMuZm9ybUNvbmZpZz8udGFibGVBY3Rpb25zLmlubGluZSxcbiAgICAgICAgYWN0aW9uQ29kZSxcbiAgICAgICAgdGFibGVSZWNvcmRJZDogcmVjb3JkSWQsXG4gICAgICAgIHRhYmxlUmVjb3JkRGF0YTogcmVjb3JkRGF0YVxuICAgICAgfTtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnRhYmxlQWN0aW9uLCBhY3Rpb25TdWJqZWN0KTtcbiAgICAgIHNlcnZlckVycm9yID0gISF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmZpbmlzaFRhYmxlQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQsIHNlcnZlckVycm9yKTtcbiAgICBpZiAoIXNlcnZlckVycm9yKSB7XG4gICAgICBhY3Rpb24ubmV3U3RhdGUgJiYgdGhpcy5jaGFuZ2VTdGF0ZShhY3Rpb24ubmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCk7XG4gICAgfVxuICAgIHRhYmxlT2JqZWN0LmZyZWVXYWl0aW5nKCk7XG4gIH1cblxuICBjb21wbGV0ZUlubGluZUFjdGlvbih0YWJsZUFjdGlvbjogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRUYWJsZVNlcnZlckFjdGlvbih0YWJsZUFjdGlvbik7XG4gIH1cblxuICBhc3luYyBmaW5pc2hUYWJsZUFjdGlvbih0YWJsZUFjdGlvbkRldGFpbDogYW55LCBhY3Rpb25SZXN1bHQsIHNlcnZlckVycm9yID0gZmFsc2UpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zRmluaXNoW3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzOiBhbnlbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcHJvcGVydGllcyB9ID0gdGFibGVBY3Rpb25NZXRob2Q7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlT25FcnJvciA9IHByb3BlcnRpZXM/LmNvbnRpbnVlT25FcnJvciA/PyBmYWxzZTtcbiAgICAgICAgaWYgKCFzZXJ2ZXJFcnJvciB8fCBjb250aW51ZU9uRXJyb3IpIHtcbiAgICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNhbGxiYWNrKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVSZWNvcmRTZWxlY3Rpb24odGFibGVBY3Rpb25FdmVudDogYW55KSB7XG4gICAgdGhpcy5ub3RpZnlGb3JtQWN0aXZpdHkoKTtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uRGV0YWlsIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgeyByZWNvcmRJZCwgcmVjb3JkRGF0YSB9ID0gYWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlU2VsZWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICByZWNvcmRJZCxcbiAgICAgIHJlY29yZERhdGFcbiAgICB9O1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlU2VsZWN0aW9uc1N0YXJ0W3RhYmxlQ29kZV07XG4gICAgaWYgKHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlU2VsZWN0aW9uTWV0aG9kIG9mIHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0gPSB0YWJsZVNlbGVjdGlvbk1ldGhvZDtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IGNhbGxiYWNrKHRhYmxlU2VsZWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIChjdXJyICE9PSBmYWxzZSkpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJSZWNvcmRTZWxlY3Rpb24odGFibGVTZWxlY3Rpb25EZXRhaWwpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlcnZlclJlY29yZFNlbGVjdGlvbih0YWJsZVNlbGVjdGlvbkRldGFpbDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZU9iamVjdCwgdGFibGVDb2RlLCByZWNvcmRJZCwgcmVjb3JkRGF0YSB9ID0gdGFibGVTZWxlY3Rpb25EZXRhaWw7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgc2VydmVyRXJyb3IgPSBmYWxzZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAodGFibGVPYmplY3Quc2VsZWN0aW9uQmFja2VuZCkge1xuICAgICAgY29uc3QgYWN0aW9uU3ViamVjdDogYW55ID0ge1xuICAgICAgICB0YWJsZUNvZGUsXG4gICAgICAgIGFjdGlvblR5cGU6IHRoaXMuZm9ybUNvbmZpZz8udGFibGVBY3Rpb25zLnJvd1NlbGVjdGlvbixcbiAgICAgICAgYWN0aW9uQ29kZTogbnVsbCxcbiAgICAgICAgdGFibGVSZWNvcmRJZDogcmVjb3JkSWQsXG4gICAgICAgIHRhYmxlUmVjb3JkRGF0YTogcmVjb3JkRGF0YVxuICAgICAgfTtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnRhYmxlQWN0aW9uLCBhY3Rpb25TdWJqZWN0KTtcbiAgICAgIHNlcnZlckVycm9yID0gISF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmZpbmlzaFRhYmxlUmVjb3JkU2VsZWN0aW9uKHRhYmxlU2VsZWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQsIHNlcnZlckVycm9yKTtcbiAgICBpZiAoc2VydmVyRXJyb3IpIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlUmVjb3JkU2VsZWN0aW9uKHRhYmxlU2VsZWN0aW9uRGV0YWlsOiBhbnksIGFjdGlvblJlc3VsdCwgc2VydmVyRXJyb3IgPSBmYWxzZSkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlIH0gPSB0YWJsZVNlbGVjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZVNlbGVjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBpZiAodGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlczogYW55W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVTZWxlY3Rpb25NZXRob2Qgb2YgdGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSA9IHRhYmxlU2VsZWN0aW9uTWV0aG9kO1xuICAgICAgICBjb25zdCBjb250aW51ZU9uRXJyb3IgPSBwcm9wZXJ0aWVzPy5jb250aW51ZU9uRXJyb3IgPz8gZmFsc2U7XG4gICAgICAgIGlmICghc2VydmVyRXJyb3IgfHwgY29udGludWVPbkVycm9yKSB7XG4gICAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjYWxsYmFjayh0YWJsZVNlbGVjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRXZlbnQ6IGFueSkge1xuICAgIHRoaXMubm90aWZ5Rm9ybUFjdGl2aXR5KCk7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUsIGFjdGlvbkRldGFpbCB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb25Db2RlKSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHsgc2VsZWN0ZWRSZWNvcmRzIH0gPSBhY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgYWN0aW9uID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHRhYmxlQWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICBhY3Rpb24sXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgc2VsZWN0ZWRSZWNvcmRzXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNTdGFydFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlczogYW55W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHByb3BlcnRpZXMgfSA9IHRhYmxlQWN0aW9uTWV0aG9kO1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gY2FsbGJhY2sodGFibGVBY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgKGN1cnIgIT09IGZhbHNlKSksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlclNlbGVjdGlvbkFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCBhY3Rpb24sIHRhYmxlQ29kZSwgYWN0aW9uQ29kZSwgc2VsZWN0ZWRSZWNvcmRzIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgbGV0IHNlcnZlckVycm9yID0gZmFsc2U7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGFjdGlvbi5iYWNrZW5kKSB7XG4gICAgICBjb25zdCBhY3Rpb25TdWJqZWN0ID0ge1xuICAgICAgICB0YWJsZUNvZGUsXG4gICAgICAgIGFjdGlvblR5cGU6IHRoaXMuZm9ybUNvbmZpZz8udGFibGVBY3Rpb25zLnNlbGVjdGlvbixcbiAgICAgICAgYWN0aW9uQ29kZSxcbiAgICAgICAgc2VsZWN0ZWRSZWNvcmRzXG4gICAgICB9O1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgICAucmVxdWVzdEZvcm1BY3Rpb24oZm9ybUFjdGlvbnMudGFibGVBY3Rpb24sIGFjdGlvblN1YmplY3QpO1xuICAgICAgc2VydmVyRXJyb3IgPSAhIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuZmluaXNoVGFibGVTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCwgc2VydmVyRXJyb3IpO1xuICAgIGlmICghc2VydmVyRXJyb3IpIHtcbiAgICAgIGFjdGlvbi5uZXdTdGF0ZSAmJiB0aGlzLmNoYW5nZVN0YXRlKGFjdGlvbi5uZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnksIGFjdGlvblJlc3VsdCwgc2VydmVyRXJyb3IgPSBmYWxzZSkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0gPSB0YWJsZUFjdGlvbk1ldGhvZDtcbiAgICAgICAgY29uc3QgY29udGludWVPbkVycm9yID0gcHJvcGVydGllcz8uY29udGludWVPbkVycm9yID8/IGZhbHNlO1xuICAgICAgICBpZiAoIXNlcnZlckVycm9yIHx8IGNvbnRpbnVlT25FcnJvcikge1xuICAgICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2FsbGJhY2sodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZUdldERhdGEodGFibGVBY3Rpb25FdmVudDogYW55KSB7XG4gICAgdGhpcy5ub3RpZnlGb3JtQWN0aXZpdHkoKTtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgdGFibGVDb2RlXG4gICAgfTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUdldERhdGFTdGFydFt0YWJsZUNvZGVdO1xuICAgIGlmICh0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzOiBhbnlbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcHJvcGVydGllcyB9ID0gdGFibGVBY3Rpb25NZXRob2Q7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSBjYWxsYmFjayh0YWJsZUFjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiAoY3VyciAhPT0gZmFsc2UpKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyR2V0RGF0YSh0YWJsZUFjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyR2V0RGF0YSh0YWJsZUFjdGlvbkRldGFpbDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZU9iamVjdCwgdGFibGVDb2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgc2VydmVyRXJyb3IgPSBmYWxzZTtcbiAgICBjb25zdCBhY3Rpb25TdWJqZWN0ID0geyB0YWJsZUNvZGUgfTtcbiAgICBjb25zdCBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAucmVxdWVzdEZvcm1BY3Rpb24oZm9ybUFjdGlvbnMuZ2V0VGFibGVEYXRhLCBhY3Rpb25TdWJqZWN0KTtcbiAgICBzZXJ2ZXJFcnJvciA9ICEhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICBhd2FpdCB0aGlzLmZpbmlzaFRhYmxlR2V0RGF0YSh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0LCBzZXJ2ZXJFcnJvcik7XG4gICAgaWYgKHNlcnZlckVycm9yKSB7XG4gICAgICB0aGlzLmRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCk7XG4gICAgfVxuICAgIHRhYmxlT2JqZWN0LmZyZWVXYWl0aW5nKCk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hUYWJsZUdldERhdGEodGFibGVBY3Rpb25EZXRhaWw6IGFueSwgYWN0aW9uUmVzdWx0LCBzZXJ2ZXJFcnJvciA9IGZhbHNlKSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIHRhYmxlQWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zRmluaXNoW3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbdGFibGVBY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBwcm9wZXJ0aWVzIH0gPSB0YWJsZUFjdGlvbk1ldGhvZDtcbiAgICAgICAgY29uc3QgY29udGludWVPbkVycm9yID0gcHJvcGVydGllcz8uY29udGludWVPbkVycm9yID8/IGZhbHNlO1xuICAgICAgICBpZiAoIXNlcnZlckVycm9yIHx8IGNvbnRpbnVlT25FcnJvcikge1xuICAgICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2FsbGJhY2sodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tTZWN0aW9uUmVxdWlyZWRGaWVsZHMoc2VjdGlvbkNvZGU6IHN0cmluZywgcmVxRmllbGRNZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgdGhpcy5jbGVhbkVycm9yRmllbGRzKG51bGwsIHNlY3Rpb25Db2RlKTtcbiAgICBjb25zdCByZXF1aXJlZEZpZWxkTWVzc2FnZSA9IHJlcUZpZWxkTWVzc2FnZSA/PyB0aGlzLmZvcm1Db25maWc/LmZvcm1TdGFuZGFyZEVycm9ycy5yZXF1aXJlZEZpZWxkXG4gICAgY29uc3QgbnVtRXJyb3JzID0gdGhpcy50YWdGaWVsZHNXaXRoRXJyb3IocmVxdWlyZWRGaWVsZE1lc3NhZ2UsIHRoaXMuZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhudWxsLCBzZWN0aW9uQ29kZSkpO1xuICAgIHJldHVybiAobnVtRXJyb3JzID09PSAwKTtcbiAgfVxuXG4gIHZhbGlkYXRlU2VjdGlvbkNvbnNpc3RlbmN5KHNlY3Rpb25Db2RlOiBzdHJpbmcsIHJlcUZpZWxkTWVzc2FnZT86IHN0cmluZykge1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IGNvbXBsZXRlRmllbGRzID0gdGhpcy5jaGVja1NlY3Rpb25SZXF1aXJlZEZpZWxkcyhzZWN0aW9uQ29kZSwgcmVxRmllbGRNZXNzYWdlKTtcbiAgICBpZiAoIWNvbXBsZXRlRmllbGRzKSB7XG4gICAgICB0aGlzLnNldEVycm9yKHRoaXMuZm9ybUNvbmZpZz8uZm9ybVN0YW5kYXJkRXJyb3JzLnR5cGVXYXJuaW5nLFxuICAgICAgICB0aGlzLmZvcm1Db25maWc/LmZvcm1TdGFuZGFyZEVycm9ycy52YWxpZGF0aW9uVGl0bGUsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZz8uZm9ybVN0YW5kYXJkRXJyb3JzLnJlcXVpcmVkRmllbGRzKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xuICAgIGNvbnN0IHJlcXVpcmVkRW1wdHlGaWVsZHM6IGFueVtdID0gdGhpcy5nZXRSZXF1aXJlZEVtcHR5RmllbGRzKG51bGwsIHNlY3Rpb25Db2RlKSA/PyBbXTtcbiAgICBpZiAocmVxdWlyZWRFbXB0eUZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgdmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0RXJyb3IodGhpcy5mb3JtQ29uZmlnPy5mb3JtU3RhbmRhcmRFcnJvcnMudHlwZVdhcm5pbmcsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZz8uZm9ybVN0YW5kYXJkRXJyb3JzLnZhbGlkYXRpb25UaXRsZSxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnPy5mb3JtU3RhbmRhcmRFcnJvcnMucmVxdWlyZWRGaWVsZHMpO1xuICAgICAgdGhpcy50YWdGaWVsZHNXaXRoRXJyb3IodGhpcy5mb3JtQ29uZmlnPy5mb3JtU3RhbmRhcmRFcnJvcnMucmVxdWlyZWRGaWVsZCwgcmVxdWlyZWRFbXB0eUZpZWxkcyk7XG4gICAgICBmb3IgKGNvbnN0IGNvZGUgb2YgcmVxdWlyZWRFbXB0eUZpZWxkcykge1xuICAgICAgICBjb25zdCByZXF1aXJlZEVtcHR5RmllbGQgPSB0aGlzLmdldEZpZWxkKGNvZGUpO1xuICAgICAgICByZXF1aXJlZEVtcHR5RmllbGQ/LmZvY3VzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB2YWxpZGF0aW9uSXNzdWVGaWVsZHM6IGFueVtdID0gdGhpcy5nZXRGaWVsZHNXaXRoVmFsaWRhdGlvbklzc3VlcyhudWxsLFxuICAgICAgc2VjdGlvbkNvZGUpID8/IFtdO1xuICAgIGlmICghdmFsaWRhdGlvbkVycm9yICYmIHZhbGlkYXRpb25Jc3N1ZUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRFcnJvcih0aGlzLmZvcm1Db25maWc/LmZvcm1TdGFuZGFyZEVycm9ycy50eXBlV2FybmluZyxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnPy5mb3JtU3RhbmRhcmRFcnJvcnMudmFsaWRhdGlvblRpdGxlLFxuICAgICAgICB0aGlzLmZvcm1Db25maWc/LmZvcm1TdGFuZGFyZEVycm9ycy52YWxpZGF0aW9uRmllbGRzKTtcbiAgICAgIGZvciAoY29uc3QgY29kZSBvZiB2YWxpZGF0aW9uSXNzdWVGaWVsZHMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbklzc3VlRmllbGQgPSB0aGlzLmdldEZpZWxkKGNvZGUpO1xuICAgICAgICBpZiAodmFsaWRhdGlvbklzc3VlRmllbGQpIHtcbiAgICAgICAgICB2YWxpZGF0aW9uSXNzdWVGaWVsZC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yO1xuICB9XG5cbiAgY29weVRhYmxlUmVjb3JkVG9GaWVsZHModGFibGVPYmo6IGFueSwgbWFwcGluZ1RhYmxlOiBhbnkgPSBudWxsKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlT2JqLnRhYmxlQ29kZSk7XG4gICAgY29uc3QgdGFibGVSZWNvcmQgPSB0YWJsZU9iamVjdD8uZ2V0VGFibGVSZWNvcmQodGFibGVPYmoucmVjb3JkSWQpO1xuICAgIGNvbnN0IGNvbHVtbk5hbWVzID0gdGFibGVPYmplY3Q/LmNvbHVtbk5hbWVzO1xuICAgIGlmICh0YWJsZVJlY29yZCAmJiBjb2x1bW5OYW1lcykge1xuICAgICAgZm9yIChjb25zdCBjb2x1bW5OYW1lIG9mIGNvbHVtbk5hbWVzKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtblZhbHVlID0gdGFibGVSZWNvcmQuZ2V0RmllbGRWYWx1ZShjb2x1bW5OYW1lKSA/PyAnJztcbiAgICAgICAgY29uc3QgY29kZSA9IG1hcHBpbmdUYWJsZT8uW2NvbHVtbk5hbWVdID8/IGNvbHVtbk5hbWU7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gY29kZSA/IHRoaXMuZ2V0RmllbGQoY29kZSkgOiBudWxsO1xuICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICBmaWVsZC5zZXRWYWx1ZShjb2x1bW5WYWx1ZSk7XG4gICAgICAgICAgZmllbGQuaGFzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbm90aWZ5Rm9ybUFjdGl2aXR5KCkge1xuICAgIGlmICh0aGlzLl9ub3RpZnlGb3JtQWN0aXZpdHkpIHtcbiAgICAgIHRoaXMuX2V2ZW50RW1pdGVyLm5leHQoJ2Zvcm1BY3Rpdml0eScsIHsgY29kZTogdGhpcy5mb3JtQ29kZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kb3MgTGVnYWN5IGRlIGNvbXBhdGliaWxpZGFkIGhhY2lhIGF0csOhc1xuICAgKi9cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG5hbWVcbiAgICovXG4gIGdldCBmb3JtQ29kZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5uYW1lID8/ICcnOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBuYW1lXG4gICAqL1xuICBzZXQgZm9ybUNvZGUobmFtZTogc3RyaW5nKSB7IHRoaXMubmFtZSA9IG5hbWU7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGJ1c3lcbiAgICovXG4gIGdldCBpblNlcnZlclByb2Nlc3MoKSB7IHJldHVybiB0aGlzLmJ1c3k7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHN0YXRlXG4gICAqL1xuICBnZXQgY3VycmVudFN0YXRlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnN0YXRlID8/ICcnOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBjaGFuZ2VTdGF0ZVxuICAgKi9cbiAgc2V0IGN1cnJlbnRTdGF0ZShzdGF0ZTogc3RyaW5nKSB7IHRoaXM/LmNoYW5nZVN0YXRlKHN0YXRlKTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb25TZWN0aW9uQWN0aXZhdGlvblxuICAgKi9cbiAgZ2V0IGZvcm1Sb3V0ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fZm9ybVJvdXRlID8/ICcnOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvblNlY3Rpb25BY3RpdmF0aW9uXG4gICAqL1xuICBzZXQgZm9ybVJvdXRlKHJvdXRlOiBzdHJpbmcpIHsgdGhpcy5fZm9ybVJvdXRlID0gcm91dGU7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9uU2VjdGlvbkFjdGl2YXRpb25cbiAgICovXG4gIGFkZFNlY3Rpb25BY3RpdmF0aW9uKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLm9uU2VjdGlvbkFjdGl2YXRpb24oY29kZXMsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb25TZWN0aW9uSW5hY3RpdmF0aW9uXG4gICAqL1xuICBhZGRTZWN0aW9uSW5hY3RpdmF0aW9uKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLm9uU2VjdGlvbkluYWN0aXZhdGlvbihjb2RlcywgY2FsbGJhY2ssIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvbkFjdGlvblN0YXJ0XG4gICAqL1xuICBhZGRBY3Rpb25NZXRob2RTdGFydChjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5vbkFjdGlvblN0YXJ0KGNvZGVzLCBjYWxsYmFjaywgcHJvcGVydGllcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9uQWN0aW9uRmluaXNoXG4gICAqL1xuICBhZGRBY3Rpb25NZXRob2RGaW5pc2goY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMub25BY3Rpb25GaW5pc2goY29kZXMsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb25GaWVsZElucHV0XG4gICAqL1xuICBhZGRGaWVsZElucHV0VmFsaWRhdGlvbihjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5vbkZpZWxkSW5wdXQoY29kZXMsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb25GaWVsZFZhbGlkYXRpb25TdGFydFxuICAgKi9cbiAgYWRkRmllbGRWYWxpZGF0aW9uU3RhcnQoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMub25GaWVsZFZhbGlkYXRpb25TdGFydChjb2RlcywgY2FsbGJhY2ssIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvbkZpZWxkVmFsaWRhdGlvbkZpbmlzaFxuICAgKi9cbiAgYWRkRmllbGRWYWxpZGF0aW9uRmluaXNoKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLm9uRmllbGRWYWxpZGF0aW9uRmluaXNoKGNvZGVzLCBjYWxsYmFjaywgcHJvcGVydGllcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9uVGFibGVBY3Rpb25TdGFydFxuICAgKi9cbiAgYWRkVGFibGVBY3Rpb25TdGFydChjb2RlOiBzdHJpbmcsIGFjdGlvbkNvZGU6IHN0cmluZywgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMub25UYWJsZUFjdGlvblN0YXJ0KGNvZGUsIGFjdGlvbkNvZGUsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb25UYWJsZUFjdGlvbkZpbmlzaFxuICAgKi9cbiAgYWRkVGFibGVBY3Rpb25GaW5pc2goY29kZTogc3RyaW5nLCBhY3Rpb25Db2RlOiBzdHJpbmcsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLm9uVGFibGVBY3Rpb25GaW5pc2goY29kZSwgYWN0aW9uQ29kZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvblRhYmxlU2VsZWN0aW9uU3RhcnRcbiAgICovXG4gIGFkZFRhYmxlU2VsZWN0aW9uU3RhcnQoY29kZTogc3RyaW5nLCBjYWxsYmFjaywgcHJvcGVydGllcyA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5vblRhYmxlU2VsZWN0aW9uU3RhcnQoY29kZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvblRhYmxlU2VsZWN0aW9uRmluaXNoXG4gICAqL1xuICBhZGRUYWJsZVNlbGVjdGlvbkZpbmlzaChjb2RlOiBzdHJpbmcsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLm9uVGFibGVTZWxlY3Rpb25GaW5pc2goY29kZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvblRhYmxlR2V0RGF0YVN0YXJ0XG4gICAqL1xuICBhZGRUYWJsZUdldERhdGFTdGFydChjb2RlOiBzdHJpbmcsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLm9uVGFibGVHZXREYXRhU3RhcnQoY29kZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvblRhYmxlR2V0RGF0YUZpbmlzaFxuICAgKi9cbiAgYWRkVGFibGVHZXREYXRhRmluaXNoKGNvZGU6IHN0cmluZywgY2FsbGJhY2ssIHByb3BlcnRpZXMgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMub25UYWJsZUdldERhdGFGaW5pc2goY29kZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMpO1xuICB9XG59XG4iXX0=
|