barsa-novin-ray-core 2.0.4 → 2.0.7
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.
|
@@ -857,4 +857,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
857
857
|
type: Inject,
|
|
858
858
|
args: [DOCUMENT]
|
|
859
859
|
}] }] });
|
|
860
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL3NlcnZpY2VzL3BvcnRhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxNQUFNLEVBQ04sVUFBVSxFQUVWLGVBQWUsRUFHbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRXJELE9BQU8sRUFBYyxlQUFlLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUcsT0FBTyxFQUNILEdBQUcsRUFDSCxHQUFHLEVBQ0gsU0FBUyxFQUNULFFBQVEsRUFDUixhQUFhLEVBQ2IsUUFBUSxFQUNSLFVBQVUsRUFDVixvQkFBb0IsRUFDcEIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ1QsTUFBTSxnQkFBZ0IsQ0FBQztBQWF4QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHekQsT0FBTyxFQUNILHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsV0FBVyxFQUNkLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7OztBQVcxQyxNQUFNLE9BQU8sYUFBYTtJQXNDdEIsWUFDWSxHQUE0QixFQUM1QixVQUFzQixFQUN0QixVQUFzQixFQUN0QixhQUFpQyxFQUNqQyxRQUFrQixFQUNsQixPQUFlLEVBQ2YsU0FBbUIsRUFDbkIsYUFBa0MsRUFDaEIsU0FBbUI7UUFS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bmVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbmplY3RvcixcbiAgICBOZ01vZHVsZUZhY3RvcnksXG4gICAgVHlwZSxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBvZiwgZnJvbSwgZm9ya0pvaW4sIGZyb21FdmVudCwgU3ViamVjdCwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICB0YXAsXG4gICAgbWFwLFxuICAgIGNvbmNhdE1hcCxcbiAgICBmaW5hbGl6ZSxcbiAgICBwdWJsaXNoUmVwbGF5LFxuICAgIHJlZkNvdW50LFxuICAgIGV4aGF1c3RNYXAsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgc3RhcnRXaXRoLFxuICAgIGRlYm91bmNlVGltZSxcbiAgICBmaWx0ZXJcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIEFiYnJldmF0aW9uRGV2aWNlU2l6ZSxcbiAgICBMb2dpblJlc3VsdCxcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIE1vRm9yUmVwb3J0TW9kZWwsXG4gICAgUGFnZURhdGFNb2RlbCxcbiAgICBQb3J0YWxEYXRhTW9kZWwsXG4gICAgUmVwb3J0TW9kZWxcbn0gZnJvbSAnLi4vYWJzdHJhY3QtY2xhc3Nlcy9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gJy4vbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFyc2FBcGkgfSBmcm9tICcuLi9hYnN0cmFjdC1jbGFzc2VzL2JhcnNhLWFwaSc7XG5pbXBvcnQgeyBCYXJzYURpYWxvZ1NlcnZpY2UgfSBmcm9tICcuL2JhcnNhLWRpYWxvZy5zZXJ2aWNlJztcblxuaW1wb3J0IHtcbiAgICBFeGVjdXRlRHluYW1pY0NvbW1hbmQsXG4gICAgZ2V0Q29tcG9uZW50RGVmaW5lZCxcbiAgICBnZXREZXZpY2VJc01vYmlsZSxcbiAgICBnZXREZXZpY2VJc1RhYmxldCxcbiAgICBnZXRIZWFkZXJWYWx1ZSxcbiAgICBnZXRVbmlxdWVJZFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUG9ydGFsUGFnZVJlc29sdmVyIH0gZnJvbSAnLi4vcmVzb2x2ZXJzL3BvcnRhbC1wYWdlLnJlc29sdmVyJztcbmltcG9ydCB7IEF1dGhHdWFyZCB9IGZyb20gJy4uL2F1dGgtZ3VhcmQnO1xuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuL2R5bmFtaWMtY29tcG9uZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuXG5kZWNsYXJlIGxldCBBamF4SGVscGVyOiBhbnk7XG5kZWNsYXJlIGxldCBBamF4SGVscGVyMjogYW55O1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBvcnRhbFNlcnZpY2Uge1xuICAgIHB1YmxpYyBvZmZzZXRUb3AgPSAwO1xuXG4gICAgbG9naW5Mb2FkaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgbG9hZGVkID0gZmFsc2U7XG4gICAgZm9ybVBhbmVsczogYW55ID0ge307XG4gICAgY2FjaGVkSW1hZ2VzOiBhbnkgPSB7fTtcbiAgICBkYXRlVGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICBkZWZhdWx0Um91dGU6IHN0cmluZztcbiAgICBjYWNoZWRQYWdlRGF0YTogeyBba2V5OiBzdHJpbmddOiBPYnNlcnZhYmxlPFBhZ2VEYXRhTW9kZWw+IH0gPSB7fTtcbiAgICBwYWdlczogUGFnZURhdGFNb2RlbFtdID0gW107XG4gICAgcnRsU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB1c2VyTG9nZ2VkSW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGRpY3Rpb25hcnk6IHsgW2tleTogc3RyaW5nXTogQmVoYXZpb3JTdWJqZWN0PGFueT4gfSA9IHt9O1xuICAgIHBvcnRhbERhdGFTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBvcnRhbERhdGFNb2RlbCB8IG51bGw+KG51bGwpO1xuICAgIHBvcnRhbFNldHRpbmdzJDogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsPjtcbiAgICBwb3J0YWxEYXRhJDogT2JzZXJ2YWJsZTxQb3J0YWxEYXRhTW9kZWwgfCBudWxsPjtcbiAgICBkZXZpY2VTaXplJDogT2JzZXJ2YWJsZTxBYmJyZXZhdGlvbkRldmljZVNpemU+O1xuICAgIHJ0bCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgZGlyVmFsdWUkOiBPYnNlcnZhYmxlPCdydGwnIHwgJ2x0cic+O1xuICAgIHJvdXRlSW5pdGlhbGl6ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIF9pc0Fub251bW91c1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgX3B1c2hBY3Rpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IG5vdGlmaWNhdGlvblRhZzogc3RyaW5nOyBhY3Rpb246IHN0cmluZyB9IHwgbnVsbD4obnVsbCk7XG4gICAgcHJpdmF0ZSBfZGV2aWNlU2l6ZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWJicmV2YXRpb25EZXZpY2VTaXplPih0aGlzLl9pbml0YWxpemVEZXZpY2VTaXplKCkpO1xuICAgIHByaXZhdGUgX2xvZ2dlZEluU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSByb3V0ZUluaXRpYWxpemVkU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBkYXRlVGV4dFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gICAgcHJpdmF0ZSBfbmF2aWdhdGlvblN0YXJ0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TmF2aWdhdGlvblN0YXJ0IHwgbnVsbD4obnVsbCk7XG4gICAgcHJpdmF0ZSBfbmF2aWdhdGlvbkVuZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5hdmlnYXRpb25FbmQgfCBudWxsPihudWxsKTtcbiAgICBwcml2YXRlIF91c2VyUG9ydGFsU2V0dGluZ3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWNvcmQ8c3RyaW5nLCBNZXRhb2JqZWN0RGF0YU1vZGVsPj4oe30pO1xuICAgIHByaXZhdGUgX2Nzc1VybFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2FmZVJlc291cmNlVXJsIHwgbnVsbD4obnVsbCk7XG4gICAgcHJpdmF0ZSBfY3NzQ3VzdG9tVXJsU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYWZlUmVzb3VyY2VVcmwgfCBudWxsPihudWxsKTtcbiAgICBwcml2YXRlIF9zZWFyY2hUZXJtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gICAgcHJpdmF0ZSBfd2luZG93UmVzaXplJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBfZGV2aWNlTGFuZHNjYXBlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oIXdpbmRvdy5tYXRjaE1lZGlhKCcob3JpZW50YXRpb246IHBvcnRyYWl0KScpLm1hdGNoZXMpO1xuICAgIHByaXZhdGUgX3N0YW5kYWxvbmUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih3aW5kb3cubWF0Y2hNZWRpYSgnKGRpc3BsYXktbW9kZTogc3RhbmRhbG9uZSknKS5tYXRjaGVzKTtcbiAgICBwcml2YXRlIF9kb2N1bWVudFZpc2liaWxpdHljaGFuZ2UkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRjbTogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXBpU2VydmljZTogQXBpU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IEJhcnNhRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb21waWxlcjogQ29tcGlsZXIsXG4gICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIF9sb2NhdGlvbjogTG9jYXRpb24sXG4gICAgICAgIHByaXZhdGUgX2xvY2FsU3RvcmFnZTogTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50XG4gICAgKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLl9pbml0TGFuZHNjYXBlKCk7XG4gICAgICAgIHRoaXMuX2luaXRTdGFuZGFsb25lKCk7XG4gICAgICAgIHRoaXMuX2luaXRWaXNpYmlsaXR5Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuX2luaXRQdXNoQWN0aW9ucygpO1xuICAgIH1cblxuICAgIGdldCB1c2VyTG9nZ2VkSW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2dnZWRJblNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgcHVzaEFjdGlvbiQoKTogT2JzZXJ2YWJsZTx7IG5vdGlmaWNhdGlvblRhZzogc3RyaW5nOyBhY3Rpb246IHN0cmluZyB9IHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaEFjdGlvbiQuYXNPYnNlcnZhYmxlKCkucGlwZSgpO1xuICAgIH1cbiAgICBnZXQgZG9jdW1lbnRWaXNpYmlsaXR5Y2hhbmdlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50VmlzaWJpbGl0eWNoYW5nZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCBpc1N0YW5kYWxvbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFuZGFsb25lJC5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgc3RhbmRhbG9uZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFuZGFsb25lJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IGxhbmRzY2FwZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2VMYW5kc2NhcGUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgd2luZG93UmVzaXplJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpbmRvd1Jlc2l6ZSQuYXNPYnNlcnZhYmxlKCkucGlwZShkZWJvdW5jZVRpbWUoMzAwKSk7XG4gICAgfVxuICAgIGdldCBwb3J0YWxEYXRhKCk6IFBvcnRhbERhdGFNb2RlbCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3J0YWxEYXRhU291cmNlLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBzZWFyY2hUZXJtJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoVGVybSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCBjc3NVcmwkKCk6IE9ic2VydmFibGU8U2FmZVJlc291cmNlVXJsIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3NzVXJsU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgY3NzQ3VzdG9tVXJsJCgpOiBPYnNlcnZhYmxlPFNhZmVSZXNvdXJjZVVybCB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nzc0N1c3RvbVVybFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IHVzZXJQb3J0YWxTZXR0aW5ncygpOiBSZWNvcmQ8c3RyaW5nLCBNZXRhb2JqZWN0RGF0YU1vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyUG9ydGFsU2V0dGluZ3MkLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGdldCB1c2VyUG9ydGFsU2V0dGluZ3MkKCk6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgTWV0YW9iamVjdERhdGFNb2RlbD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJQb3J0YWxTZXR0aW5ncyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCBkZXZpY2VTaXplKCk6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2VTaXplU291cmNlLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBpc0Fub255bW91cyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0Fub251bW91c1NvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IG5hdmlnYXRpb25FbmQkKCk6IE9ic2VydmFibGU8TmF2aWdhdGlvbkVuZCB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25FbmQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgbmF2aWdhdGlvblN0YXJ0JCgpOiBPYnNlcnZhYmxlPE5hdmlnYXRpb25TdGFydCB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25TdGFydCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWRNbyhpZDogc3RyaW5nLCB0eXBlZGVmSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UubG9hZFBvcnRhbFBhZ2VEYXRhKGlkLCB0eXBlZGVmSWQpO1xuICAgIH1cbiAgICBwdXNoQWN0aW9uTmV4dChwdXNoQWN0aW9uOiB7IG5vdGlmaWNhdGlvblRhZzsgYWN0aW9uIH0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3B1c2hBY3Rpb24nLCBKU09OLnN0cmluZ2lmeShwdXNoQWN0aW9uKSk7XG4gICAgICAgIHRoaXMuX3B1c2hBY3Rpb24kLm5leHQocHVzaEFjdGlvbik7XG4gICAgfVxuICAgIHNldFNlYXJjaFRlcm0odGVybTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlYXJjaFRlcm0kLm5leHQodGVybSk7XG4gICAgfVxuICAgIHdpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fd2luZG93UmVzaXplJC5uZXh0KCk7XG4gICAgfVxuICAgIG5hdmlhdGlvbkVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uRW5kJC5uZXh0KGV2ZW50KTtcbiAgICB9XG4gICAgbmF2aWF0aW9uU3RhcnQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uU3RhcnQkLm5leHQoZXZlbnQpO1xuICAgIH1cbiAgICBzZXRVc2VyUG9ydGFsU2V0dGluZ3ModXNlclBvcnRhbFNldHRpbmdzOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fdXNlclBvcnRhbFNldHRpbmdzJC5nZXRWYWx1ZSgpO1xuICAgICAgICBpZiAodXNlclBvcnRhbFNldHRpbmdzLiRUeXBlRGVmTmFtZSkge1xuICAgICAgICAgICAgdmFsdWVbdXNlclBvcnRhbFNldHRpbmdzLiRUeXBlRGVmTmFtZV0gPSB1c2VyUG9ydGFsU2V0dGluZ3M7XG4gICAgICAgICAgICB0aGlzLl91c2VyUG9ydGFsU2V0dGluZ3MkLm5leHQoeyAuLi52YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRUaGVtZSh0aGVtZVVybDogU2FmZVJlc291cmNlVXJsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Nzc1VybFNvdXJjZS5uZXh0KHRoZW1lVXJsKTtcbiAgICAgICAgdGhpcy5fY3NzQ3VzdG9tVXJsU291cmNlLm5leHQodGhlbWVVcmwpO1xuICAgIH1cbiAgICBzZXREYXRhKGtleSwgZGF0YSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGljdGlvbmFyeVtrZXldKSB7XG4gICAgICAgICAgICB0aGlzLmRpY3Rpb25hcnlba2V5XSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihkYXRhKTtcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbmFyeVtrZXldLm5leHQoZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvbGRWYWwgPSB0aGlzLmRpY3Rpb25hcnlba2V5XS5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKG9sZFZhbCAhPT0gZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGljdGlvbmFyeVtrZXldLm5leHQoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0RGF0YShrZXksIGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGlmICghdGhpcy5kaWN0aW9uYXJ5W2tleV0pIHtcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbmFyeVtrZXldID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGljdGlvbmFyeVtrZXldLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXREYXRhU3luYzxUPihrZXksIGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbCk6IFQgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpY3Rpb25hcnlba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJ5W2tleV0uZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgY3JlYXRlRm9yUmVwb3J0KG5hdkl0ZW0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBCYXJzYUFwaS5VbC5VbHZNYWluQ3RybHIuQ3JlYXRlRm9yUmVwb3J0KHt9LCBuYXZJdGVtLCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJlbmRlclVsdk1haW5VaShcbiAgICAgICAgbmF2SXRlbSxcbiAgICAgICAgdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIGlzUmVwb3J0UGFnZTogYm9vbGVhbiA9IGZhbHNlXG4gICAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRm9yUmVwb3J0KG5hdkl0ZW0pLnBpcGUoXG4gICAgICAgICAgICBleGhhdXN0TWFwKCh1bHZNYWluQ3RybHIpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRVbHZNYWluVWlDb21wb25lbnQodWx2TWFpbkN0cmxyLkFkYXB0ZXIuQ29udHJvbCwgaW5qZWN0b3IsIGlzUmVwb3J0UGFnZSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFwKCh1bHZNYW5pVWlDb21wb25lbnQpID0+IHZjci5pbnNlcnQodWx2TWFuaVVpQ29tcG9uZW50Lmhvc3RWaWV3KSksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB1bHZNYWluQ3RybHIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbiAgICBnZXRVbHZNYWluVWlDb21wb25lbnQoY3VzdG9tVWx2TWFpblVpLCBpbmplY3RvcjogSW5qZWN0b3IsIGlzUmVwb3J0UGFnZSk6IE9ic2VydmFibGU8Q29tcG9uZW50UmVmPGFueT4+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tVWlTZXR0aW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY3VzdG9tVWx2TWFpblVpLlNldHRpbmcsICdDdXN0b21VaScsIG51bGwpO1xuICAgICAgICBjb25zdCB7IG1vZHVsZU5hbWUsIG1vZHVsZVBhdGgsIGNvbXBvbmVudE5hbWUsIHNlbGVjdG9yIH0gPSBnZXRDb21wb25lbnREZWZpbmVkKFxuICAgICAgICAgICAgY3VzdG9tVWx2TWFpblVpLFxuICAgICAgICAgICAgY3VzdG9tVWlTZXR0aW5nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudChtb2R1bGVOYW1lLCBtb2R1bGVQYXRoLCBjb21wb25lbnROYW1lLCBzZWxlY3RvciwgaW5qZWN0b3IpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGNvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlID0gY29tcG9uZW50Lmluc3RhbmNlO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmlkID0gY3VzdG9tVWx2TWFpblVpLmlkO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNvbnRleHQgPSBjdXN0b21VbHZNYWluVWk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaXNSZXBvcnRQYWdlID0gaXNSZXBvcnRQYWdlO1xuICAgICAgICAgICAgICAgIGN1c3RvbVVsdk1haW5VaS5jb250cm9sVWkgPSBjb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXZpY2VTaXplJCA9IHRoaXMuX2RldmljZVNpemVTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMucG9ydGFsRGF0YSQgPSB0aGlzLnBvcnRhbERhdGFTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMucnRsJCA9IHRoaXMucnRsU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLnVzZXJMb2dnZWRJbiQgPSB0aGlzLl9sb2dnZWRJblNvdXJjZVxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZShtYXAoKGlzTG9nZ2VkSW4pID0+IGlzTG9nZ2VkSW4gJiYgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc0Fub255bW91cyA9PT0gZmFsc2UpKTtcbiAgICAgICAgdGhpcy5kaXJWYWx1ZSQgPSB0aGlzLnJ0bCQucGlwZShtYXAoKGlzUnRsKSA9PiAoaXNSdGwgPyAncnRsJyA6ICdsdHInKSkpO1xuICAgICAgICB0aGlzLnJvdXRlSW5pdGlhbGl6ZWQkID0gdGhpcy5yb3V0ZUluaXRpYWxpemVkU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgICAgIHRoaXMuX3N0YW5kYWxvbmUkLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgoYykgPT4ge1xuICAgICAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3N0YW5kYWxvbmUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdub1N0YW5kYWxvbmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2RldmljZUxhbmRzY2FwZSQuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICAgICAgICBpZiAoYykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnbGFuZHNjYXBlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9kZXZpY2VTaXplU291cmNlLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgoYykgPT4ge1xuICAgICAgICAgICAgaWYgKGMgPT09ICdzJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnc21hbGxkZXZpY2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGF0ZVRleHQkID0gdGhpcy5kYXRlVGV4dFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5wb3J0YWxTZXR0aW5ncyQgPSB0aGlzLnBvcnRhbERhdGFTb3VyY2VcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUobWFwKChwb3J0YWxEYXRhKSA9PiAocG9ydGFsRGF0YSA/IHBvcnRhbERhdGEuUG9ydGFsU2V0dGluZ3MgOiAoe30gYXMgYW55KSkpKTtcbiAgICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgICAgICAucGlwZShzdGFydFdpdGgobnVsbCksIGRlYm91bmNlVGltZSgxMDAwKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl93aW5kb3dSZXNpemUkLm5leHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXREZXZpY2VTaXplKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgX3NldERldmljZVNpemUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRldmljZVNpemUgPSB0aGlzLl9pbml0YWxpemVEZXZpY2VTaXplKCk7XG4gICAgICAgIHRoaXMuX2RldmljZVNpemVTb3VyY2UubmV4dChkZXZpY2VTaXplKTtcbiAgICB9XG4gICAgX2luaXRhbGl6ZURldmljZVNpemUoKTogQWJicmV2YXRpb25EZXZpY2VTaXplIHtcbiAgICAgICAgY29uc3QgX2lzbW9iaWxlID0gZ2V0RGV2aWNlSXNNb2JpbGUoKTtcbiAgICAgICAgY29uc3QgX2lzVGFibGV0ID0gZ2V0RGV2aWNlSXNUYWJsZXQoKTtcbiAgICAgICAgbGV0IF93aW5kb1dTaXplOiBBYmJyZXZhdGlvbkRldmljZVNpemUgPSAncyc7XG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSA2MDApIHtcbiAgICAgICAgICAgIF93aW5kb1dTaXplID0gJ3MnO1xuICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5pbm5lcldpZHRoID4gNjAwICYmIHdpbmRvdy5pbm5lcldpZHRoIDw9IDk5Mikge1xuICAgICAgICAgICAgX3dpbmRvV1NpemUgPSAnbSc7XG4gICAgICAgIH0gZWxzZSBpZiAod2luZG93LmlubmVyV2lkdGggPiA5OTIgJiYgd2luZG93LmlubmVyV2lkdGggPD0gMTIwMCkge1xuICAgICAgICAgICAgX3dpbmRvV1NpemUgPSAnbCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfd2luZG9XU2l6ZSA9ICd4bCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9pc21vYmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuICdzJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2lzVGFibGV0ICYmIF93aW5kb1dTaXplICE9PSAnbCcgJiYgX3dpbmRvV1NpemUgIT09ICd4bCcpIHtcbiAgICAgICAgICAgIHJldHVybiAnbSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF93aW5kb1dTaXplO1xuICAgIH1cbiAgICBjb21waWxlTW9kdWxlKGRlcGVuZGVuY3k6IExpYnJhcnlEZXBlbmVjeSk6IE9ic2VydmFibGU8TmdNb2R1bGVGYWN0b3J5PGFueT4+IHtcbiAgICAgICAgY29uc3QgbW9kdWxlJCA9IHRoaXMuZ2V0TW9kdWxlKGRlcGVuZGVuY3kpO1xuICAgICAgICByZXR1cm4gbW9kdWxlJC5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKChtb2R1bGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlRmFjdG9yeSA9IHRoaXMuZ2V0TmdNb2R1bGVGYWN0b3J5KG1vZHVsZXMsIGRlcGVuZGVuY3kubmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKG1vZHVsZUZhY3RvcnkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZ2V0TW9kdWxlKGRlcGVuZGVuY3k6IExpYnJhcnlEZXBlbmVjeSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwga2ViYWJOYW1lLCB1bWQsIGV4cG9ydEFzIH0gPSBkZXBlbmRlbmN5O1xuICAgICAgICBjb25zdCBiYXNlID0gYC9hc3NldHMvbW9kdWxlcy8ke2tlYmFiTmFtZX0vYnVuZGxlc2A7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLmFiYztcbiAgICAgICAgY29uc3QgcGF0aCA9IGAke2Jhc2V9LyR7a2ViYWJOYW1lfS51bWQuanM/dD0ke2RhdGV9YDtcbiAgICAgICAgcmV0dXJuIG9mKHRydWUpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZXMgPSB0aGlzLmdldFJlZ2lzdGVyZWRNb2R1bGVzKHVtZCwgZXhwb3J0QXMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihtb2R1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEpzJChwYXRoKS5waXBlKG1hcCgoKSA9PiB0aGlzLmdldFJlZ2lzdGVyZWRNb2R1bGVzKHVtZCwgZXhwb3J0QXMsIG5hbWUpKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNldFZhbHVlT25PYmplY3QocGF0aCwgaW5kZXgsIG1vZHVsZXMsIG9iamVjdCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzcGxpdGVkID0gcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCBwcm9wID0gc3BsaXRlZFtpbmRleF07XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0W3Byb3BdID09PSB0eXBlb2YgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBvYmplY3RbcHJvcF0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPT09IHNwbGl0ZWQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgb2JqZWN0W3Byb3BdID0gbW9kdWxlcztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFZhbHVlT25PYmplY3QocGF0aCwgaW5kZXggKyAxLCBtb2R1bGVzLCBvYmplY3RbcHJvcF0pO1xuICAgIH1cblxuICAgIGdldENvbXBvbmVudChcbiAgICAgICAgbW9kdWxlTmFtZTogc3RyaW5nLFxuICAgICAgICBtb2R1bGVQYXRoOiBzdHJpbmcsXG4gICAgICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgICAgICAgc2VsZWN0b3I6IHN0cmluZyxcbiAgICAgICAgcGFyZW50SW5qZWN0b3I6IEluamVjdG9yXG4gICAgKTogT2JzZXJ2YWJsZTxDb21wb25lbnRSZWY8YW55Pj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kY20uZ2V0Q29tcG9uZW50QnlTZWxlY3RvcihzZWxlY3RvciwgbW9kdWxlTmFtZSwgcGFyZW50SW5qZWN0b3IpO1xuICAgIH1cbiAgICBsb2FkSnMkKHBhdGgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAgIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9qYXZhc2NyaXB0Jyk7XG4gICAgICAgICAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJywgcGF0aCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShwYXRoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIFJlcG9ydEV4ZWN1dGUocmVwb3J0TmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxNb0ZvclJlcG9ydE1vZGVsPiB7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMuUmVwb3J0RXhlY3V0ZVByb21pc2UocmVwb3J0TmFtZSkpO1xuICAgIH1cbiAgICBSZXBvcnRFeGVjdXRlUHJvbWlzZShyZXBvcnROYW1lOiBzdHJpbmcpOiBQcm9taXNlPE1vRm9yUmVwb3J0TW9kZWw+IHtcbiAgICAgICAgY29uc3QgdWx2UGFyYW1zID0ge1xuICAgICAgICAgICAgRmxhZ3M6IHtcbiAgICAgICAgICAgICAgICBEYXRhOiAnVHJ1ZScsXG4gICAgICAgICAgICAgICAgRXh0cmE6ICdGYWxzZScsXG4gICAgICAgICAgICAgICAgU2VhcmNoOiAnRmFsc2UnLFxuICAgICAgICAgICAgICAgIFZpZXc6ICdGYWxzZSdcbiAgICAgICAgICAgICAgICAvLyBHZW5lcmFsOlwiRmFsc2VcIiwgLy8gdWx2bWFpbmN0cmwgZG9lcyBub3QgY3JhZXRlIHVpIGNvbnRyb2wgcmFpc2UgZXJyb3JcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSZXBvcnROYW1lOiByZXBvcnROYW1lLFxuICAgICAgICAgICAgVXNhZ2VFbnVtOiAnU3lzdGVtQ29udGFpbmVyJ1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8TW9Gb3JSZXBvcnRNb2RlbD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgQmFyc2FBcGkuQncuRXhlY3V0ZVJlcG9ydChcbiAgICAgICAgICAgICAgICB7IHVsdlBhcmFtcyB9LFxuICAgICAgICAgICAgICAgIChyZXN1bHQ6IFJlcG9ydE1vZGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LkRhdGEpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYWRkRm9ybVBhbmVsQ3RybHIoaWQsIGZvcm1wYW5lbEN0cmxyOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtUGFuZWxzW2lkXSA9IGZvcm1wYW5lbEN0cmxyO1xuICAgIH1cbiAgICBzZXRVc2VyTG9naW5TdGF0dXMoc3RhdHVzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xvZ2dlZEluU291cmNlLm5leHQoc3RhdHVzKTtcbiAgICB9XG4gICAgZXh0cmFjdEFsbFBhZ2VzKHBvcnRhbERhdGE6IFBvcnRhbERhdGFNb2RlbCB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFwb3J0YWxEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcG9ydGFsRGF0YS5DaGlsZFBhZ2VMaXN0Lk1vRGF0YUxpc3QuZm9yRWFjaCgocGFnZURhdGEpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGRQYWdlcyhwYWdlRGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBleHRyYWN0QWxsUGFnZXNfT2xkKHBvcnRhbERhdGE6IFBvcnRhbERhdGFNb2RlbCB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFwb3J0YWxEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLl9yb3V0ZXIuY29uZmlnO1xuICAgICAgICBwb3J0YWxEYXRhLkNoaWxkUGFnZUxpc3QuTW9EYXRhTGlzdC5mb3JFYWNoKChwYWdlRGF0YSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IHBhZ2VEYXRhLlJvdXRlLnJlcGxhY2UoJy8nLCAnJyk7XG4gICAgICAgICAgICBjb25maWcucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVJvdXRlKHBhZ2VEYXRhLCBwYXRoLCBwYWdlRGF0YS5IYXNBdXRob3JpemUsIHBhZ2VEYXRhLlBhZ2VNb2R1bGU/LiRDYXB0aW9uLCBudWxsLCBudWxsKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChwYWdlRGF0YS5Jc0RlZmF1bHRSb3V0ZSB8fCBwYWdlRGF0YS5Jc0RlZmF1bHRSb3V0ZSA9PT0gJ1RydWUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Um91dGUgPSBwYXRoO1xuICAgICAgICAgICAgICAgIGNvbmZpZy5wdXNoKHRoaXMuY3JlYXRlUm91dGUocGFnZURhdGEsICcnLCBmYWxzZSwgcG9ydGFsRGF0YS5QYWdlTW9kdWxlPy4kQ2FwdGlvbiwgcGF0aCwgbnVsbCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkUGFnZXMocGFnZURhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcm91dGVyLnJlc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICAgIGlmICh0aGlzLl9sb2NhdGlvbi5wYXRoKCkgPT09ICcnKSB7XG4gICAgICAgICAgICAvLyB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZGVmYXVsdFJvdXRlXSk7XG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWycnXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcy5yb3V0ZUluaXRpYWxpemVkKCk7XG4gICAgfVxuICAgIHNzb0xvZ2luKCk6IHZvaWQge1xuICAgICAgICBBamF4SGVscGVyLkFqYXhSZXF1ZXN0KFxuICAgICAgICAgICAgJy9hcGkvYmFzZS9zc29sb2dpbicsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBhbGVydCgnZXJyb3IgaW4gc3NvIGxvZ2luLicpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgc3NvTG9nb3V0KCk6IHZvaWQge1xuICAgICAgICBBamF4SGVscGVyLkFqYXhSZXF1ZXN0KFxuICAgICAgICAgICAgJy9hcGkvYmFzZS9zc29sb2dvdXQnLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYWxlcnQoJ2Vycm9yIGluIHNzbyBsb2dvdXQuJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgIH1cbiAgICBhZGRDaGlsZFBhZ2VzKHBhZ2VEYXRhOiBQYWdlRGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFnZXMucHVzaChwYWdlRGF0YSk7XG4gICAgICAgIGlmICghcGFnZURhdGEuQ2hpbGRQYWdlTGlzdD8uTW9EYXRhTGlzdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcGFnZURhdGEuQ2hpbGRQYWdlTGlzdC5Nb0RhdGFMaXN0LmZvckVhY2goKGNoaWxkUGFnZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZFBhZ2VzKGNoaWxkUGFnZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIGNyZWF0ZVJvdXRlKHBhZ2VEYXRhLCBwYXRoLCBoYXNBdXRob3JpemVkLCBtb2R1bGVOYW1lLCByZWRpcmVjdFRvLCBpc0R5bmFtaWNSb3V0ZSk6IFJvdXRlIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjcmVhdGVSb3V0ZTIoXG4gICAgICAgIHBhZ2VEYXRhLFxuICAgICAgICBwYXRoLFxuICAgICAgICBoYXNBdXRob3JpemVkLFxuICAgICAgICBtb2R1bGVOYW1lLFxuICAgICAgICByZWRpcmVjdFRvOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICAgICAgaXNEeW5hbWljUm91dGU6IGJvb2xlYW4gPSBmYWxzZVxuICAgICk6IFJvdXRlIHtcbiAgICAgICAgbGV0IG1vZHVsZVBhdGg6IHN0cmluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShtb2R1bGVOYW1lKTtcbiAgICAgICAgY29uc3QgdW1kID0gbW9kdWxlTmFtZTtcbiAgICAgICAgbW9kdWxlUGF0aCA9IG1vZHVsZVBhdGguc3Vic3RyaW5nKDEsIG1vZHVsZVBhdGgubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZHluYW1pY1JvdXRlOiBSb3V0ZSA9IHt9O1xuICAgICAgICBkeW5hbWljUm91dGUucGF0aCA9IHBhdGg7XG4gICAgICAgIGR5bmFtaWNSb3V0ZS5kYXRhID0geyBwYWdlRGF0YSB9O1xuICAgICAgICBpZiAoIWlzRHluYW1pY1JvdXRlKSB7XG4gICAgICAgICAgICBkeW5hbWljUm91dGUucmVzb2x2ZSA9IHtcbiAgICAgICAgICAgICAgICBwYWdlRGF0YTogUG9ydGFsUGFnZVJlc29sdmVyXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoID09PSAnJykge1xuICAgICAgICAgICAgZHluYW1pY1JvdXRlLnBhdGhNYXRjaCA9ICdmdWxsJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVkaXJlY3RUbykge1xuICAgICAgICAgICAgZHluYW1pY1JvdXRlLnJlZGlyZWN0VG8gPSByZWRpcmVjdFRvO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhhc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgICAgICAgICBkeW5hbWljUm91dGUuY2FuQWN0aXZhdGUgPSBbQXV0aEd1YXJkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGR5bmFtaWNSb3V0ZS5sb2FkQ2hpbGRyZW4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzOiBMaWJyYXJ5RGVwZW5lY3lbXSA9IEpTT04ucGFyc2UocGFnZURhdGEuRGVwZW5kZW5jaWVzKTsgLy8gZXZhbChwYWdlRGF0YS5EZXBlbmRlbmNpZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VMaWJyYXJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBtb2R1bGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBrZWJhYk5hbWU6IG1vZHVsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHVtZCxcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0QXM6IFttb2R1bGVOYW1lXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzJCA9IGZyb20oZGVwZW5kZW5jaWVzKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBjb25jYXRNYXAoKGRlcGVuZGVuY3k6IExpYnJhcnlEZXBlbmVjeSkgPT4gdGhpcy5jb21waWxlTW9kdWxlKGRlcGVuZGVuY3kpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKFtkZXBlbmRlbmNpZXMkXSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuZ2V0TW9kdWxlKHBhZ2VMaWJyYXJ5KSksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgobW9kdWxlcykgPT4gbW9kdWxlc1ttb2R1bGVOYW1lICsgJ01vZHVsZSddKSxcbiAgICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMucm91dGVJbml0aWFsaXplZCgpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGR5bmFtaWNSb3V0ZTtcbiAgICB9XG4gICAgcm91dGVJbml0aWFsaXplZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3V0ZUluaXRpYWxpemVkU291cmNlLm5leHQodHJ1ZSk7XG4gICAgfVxuICAgIHB1YmxpYyBsb2dpbkJ5QW5vbnltb3VzKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLmxvZ2luTG9hZGluZy5uZXh0KHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmxvZ2luUG9ydGFsKCkucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVzdWx0OiBMb2dpblJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmRlYnVnKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShCYXJzYUFwaS5Mb2dpbkFjdGlvbi50b2tlbjJTdG9yYWdlS2V5LCByZXN1bHQuZGF0YS5zdGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dpbkxvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0UGFnZURhdGEodXJsOiBzdHJpbmcsIGlzUm9vdDogYm9vbGVhbik6IE9ic2VydmFibGU8UGFnZURhdGFNb2RlbCB8IG51bGw+IHtcbiAgICAgICAgaWYgKGlzUm9vdCB8fCB1cmwgPT09ICcnIHx8IHVybCA9PT0gJy8nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3J0YWxEYXRhJDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpID4gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHIoMCwgdXJsLmluZGV4T2YoJz8nKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2FjaGVkUGFnZURhdGFbdXJsXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUGFnZURhdGFbdXJsXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWdlRGF0YSA9IHRoaXMuZmluZFBhZ2VCeVJvdXRlKHVybCk7XG5cbiAgICAgICAgdGhpcy5jYWNoZWRQYWdlRGF0YVt1cmxdID0gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAgICAgICAubG9hZFBvcnRhbFBhZ2VEYXRhKHBhZ2VEYXRhPy5JZCwgdGhpcy5wb3J0YWxEYXRhU291cmNlLmdldFZhbHVlKCk/LkNoaWxkUGFnZUxpc3QuVHlwZURlZklkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChwYWdlTW8pID0+IHBhZ2VNby5EYXRhLk1vKSxcbiAgICAgICAgICAgICAgICB0YXAoKHBhZ2VNbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkUm91dGUocGFnZU1vLCBwYWdlTW8uQ2hpbGRQYWdlTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGRQYWdlcyhwYWdlTW8pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHB1Ymxpc2hSZXBsYXkoMSksXG4gICAgICAgICAgICAgICAgcmVmQ291bnQoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgLy8gdGhpcy5jYWNoZWRQYWdlRGF0YVt1cmxdID0gdGhpcy5wb3J0YWxEYXRhJC5waXBlKFxuICAgICAgICAvLyAgIGZpbHRlcigocG9ydGFsRGF0YSkgPT4gcG9ydGFsRGF0YSAhPSBudWxsKSxcbiAgICAgICAgLy8gICBtYXAoKHBvcnRhbERhdGEpID0+ICksXG4gICAgICAgIC8vICAgY29uY2F0TWFwKChwYWdlRGF0YSkgPT4ge1xuICAgICAgICAvLyAgICAgcmV0dXJuXG4gICAgICAgIC8vICAgfSksXG5cbiAgICAgICAgLy8gICB0YXAocGFnZURhdGE9Pnt9KVxuICAgICAgICAvLyApO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYWdlRGF0YVt1cmxdO1xuICAgIH1cbiAgICBwdWJsaWMgcmVzb2x2ZURhdGEocm91dGVQYWdlRGF0YSk6IE9ic2VydmFibGU8UGFnZURhdGFNb2RlbCB8IG51bGw+IHtcbiAgICAgICAgLy8gY29uc3QgcGFnZURhdGEgPSB0aGlzLnBhZ2VzLmZpbmQoKGMpID0+IGMuUm91dGUgPT09IHJvdXRlUGFnZURhdGEuUm91dGUgJiYgYy5Nb2R1bGUgPT09IHJvdXRlUGFnZURhdGEuTW9kdWxlKTtcbiAgICAgICAgY29uc3QgcGFnZURhdGEgPSB0aGlzLnBhZ2VzLmZpbmQoKGMpID0+IGMuUm91dGUgPT09IHJvdXRlUGFnZURhdGEuUm91dGUpO1xuICAgICAgICBpZiAoIXBhZ2VEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSBwYWdlRGF0YS5JZDtcblxuICAgICAgICBpZiAodGhpcy5jYWNoZWRQYWdlRGF0YVtpZF0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlZFBhZ2VEYXRhW2lkXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhY2hlZFBhZ2VEYXRhW2lkXSA9IHRoaXMuYXBpU2VydmljZVxuICAgICAgICAgICAgLmxvYWRQb3J0YWxQYWdlRGF0YShpZCwgdGhpcy5wb3J0YWxEYXRhU291cmNlLmdldFZhbHVlKCk/LkNoaWxkUGFnZUxpc3QuVHlwZURlZklkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChwYWdlTW8pID0+IHBhZ2VNby5EYXRhLk1vKSxcbiAgICAgICAgICAgICAgICB0YXAoKHBhZ2VNbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkUm91dGUocGFnZU1vLCBwYWdlTW8uQ2hpbGRQYWdlTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGRQYWdlcyhwYWdlTW8pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHB1Ymxpc2hSZXBsYXkoMSksXG4gICAgICAgICAgICAgICAgcmVmQ291bnQoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgLy8gdGhpcy5jYWNoZWRQYWdlRGF0YVt1cmxdID0gdGhpcy5wb3J0YWxEYXRhJC5waXBlKFxuICAgICAgICAvLyAgIGZpbHRlcigocG9ydGFsRGF0YSkgPT4gcG9ydGFsRGF0YSAhPSBudWxsKSxcbiAgICAgICAgLy8gICBtYXAoKHBvcnRhbERhdGEpID0+ICksXG4gICAgICAgIC8vICAgY29uY2F0TWFwKChwYWdlRGF0YSkgPT4ge1xuICAgICAgICAvLyAgICAgcmV0dXJuXG4gICAgICAgIC8vICAgfSksXG5cbiAgICAgICAgLy8gICB0YXAocGFnZURhdGE9Pnt9KVxuICAgICAgICAvLyApO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYWdlRGF0YVtpZF07XG4gICAgfVxuXG4gICAgYWRkQ2hpbGRSb3V0ZShwYWdlTW86IE1ldGFvYmplY3REYXRhTW9kZWwsIENoaWxkUGFnZUxpc3Q6IE1vRm9yUmVwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhZGRDaGlsZFJvdXRlX09sZChwYWdlTW86IE1ldGFvYmplY3REYXRhTW9kZWwsIENoaWxkUGFnZUxpc3Q6IE1vRm9yUmVwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFDaGlsZFBhZ2VMaXN0Py5Nb0RhdGFMaXN0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX3JvdXRlci5jb25maWc7XG4gICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYWdlTW8uUm91dGUucmVwbGFjZSgnLycsICcnKTtcbiAgICAgICAgY29uc3QgcGFyZW50Um91dGUgPSBjb25maWcuZmluZCgoYykgPT4gKGMucGF0aCA9IHBhcmVudFBhdGgpKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW46IFJvdXRlW10gPSBbXTtcbiAgICAgICAgaWYgKHBhcmVudFJvdXRlKSB7XG4gICAgICAgICAgICBDaGlsZFBhZ2VMaXN0Lk1vRGF0YUxpc3QuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gY2hpbGQuUm91dGUucmVwbGFjZSgnLycsICcnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJvdXRlID0gdGhpcy5jcmVhdGVSb3V0ZShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLkhhc0F1dGhvcml6ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuUGFnZU1vZHVsZT8uJENhcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGRyb3V0ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuXG4gICAgICAgICAgICAocGFyZW50Um91dGUgYXMgYW55KS5fbG9hZGVkQ29uZmlnLnJvdXRlc1swXS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIucmVzZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkUG9ydGFsRGF0YV9PbGQxKCk6IE9ic2VydmFibGU8UG9ydGFsRGF0YU1vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UubG9hZFBvcnRhbChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbElkLCBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbFR5cGVEZWZJZCkucGlwZShcbiAgICAgICAgICAgIHRhcCgocG9ydGFsU2V0dGluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcnRhbERhdGEgPSBwb3J0YWxTZXR0aW5nLkRhdGEuTW87XG4gICAgICAgICAgICAgICAgdGhpcy5leHRyYWN0QWxsUGFnZXMocG9ydGFsRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3J0YWxEYXRhU291cmNlLm5leHQocG9ydGFsRGF0YSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiBmcm9tKHRoaXMubG9hZFN5c3RlbSgpKSksXG4gICAgICAgICAgICB0YXAoKGFsbCkgPT4gdGhpcy5kYXRlVGV4dFNvdXJjZS5uZXh0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuRGF0ZVRleHQpKVxuICAgICAgICApO1xuICAgIH1cbiAgICBwdWJsaWMgbG9hZFBvcnRhbERhdGFTeW5jX09sZDIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvcnRhbFNldHRpbmcgPSB0aGlzLmFwaVNlcnZpY2UubG9hZFBvcnRhbFN5bmMoXG4gICAgICAgICAgICBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbElkLFxuICAgICAgICAgICAgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Qb3J0YWxUeXBlRGVmSWRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcG9ydGFsRGF0YSA9IHBvcnRhbFNldHRpbmcuRGF0YS5NbztcblxuICAgICAgICB0aGlzLmV4dHJhY3RBbGxQYWdlcyhwb3J0YWxEYXRhKTtcblxuICAgICAgICB0aGlzLnBvcnRhbERhdGFTb3VyY2UubmV4dChwb3J0YWxEYXRhKTtcblxuICAgICAgICB0aGlzLmxvYWRTeXN0ZW0oKTtcblxuICAgICAgICB0aGlzLmRhdGVUZXh0U291cmNlLm5leHQoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5EYXRlVGV4dCk7XG4gICAgfVxuICAgIHB1YmxpYyBsb2FkUG9ydGFsRGF0YVN5bmMoKTogdm9pZCB7XG4gICAgICAgIGlmIChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhPy5lcnJvcj8udXNlck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb3J0YWxTZXR0aW5nU3RyID0gQmFyc2FBcGkuQncuUnVuQmxNZXRob2QoJ0dldFBvcnRhbCcsIEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuUG9ydGFsSWQpO1xuICAgICAgICBjb25zdCBwb3J0YWxTZXR0aW5nID0gQmFyc2FBcGkuRXh0LmRlY29kZShwb3J0YWxTZXR0aW5nU3RyKTtcbiAgICAgICAgY29uc3QgcG9ydGFsRGF0YTogUGFnZURhdGFNb2RlbCA9IHBvcnRhbFNldHRpbmc7XG4gICAgICAgIGlmIChwb3J0YWxEYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0UGFnZSA9IHBvcnRhbERhdGEuQ2hpbGRQYWdlTGlzdC5Nb0RhdGFMaXN0LmZpbmQoKGMpID0+IGMuSXNEZWZhdWx0Um91dGUgPT09ICdUcnVlJyk7XG4gICAgICAgICAgICBsZXQgY29uZmlnUm91dGUgPSB0aGlzLl9yb3V0ZXIuY29uZmlnO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlUGFnZWQ6IFJvdXRlW10gPSBbXTtcbiAgICAgICAgICAgIGNvbmZpZ1JvdXRlLmZvckVhY2goKGMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm91dGUgPSAnLycgKyBjLnBhdGg7XG4gICAgICAgICAgICAgICAgaWYgKGMucGF0aCAhPT0gJycgJiYgcG9ydGFsRGF0YS5DaGlsZFBhZ2VMaXN0Lk1vRGF0YUxpc3QuZmluZEluZGV4KChkKSA9PiBkLlJvdXRlID09PSByb3V0ZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVBhZ2VkLnB1c2goYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBwYXRoVG9SZW1vdmUgPSByZW1vdmVQYWdlZC5tYXAoKGQpID0+IGQucGF0aCk7XG4gICAgICAgICAgICBjb25maWdSb3V0ZSA9IGNvbmZpZ1JvdXRlLmZpbHRlcigoYykgPT4gcGF0aFRvUmVtb3ZlLmluZGV4T2YoYy5wYXRoKSA9PT0gLTEpO1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRQYWdlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFBhZ2VSb3V0ZSA9IGRlZmF1bHRQYWdlLlJvdXRlLnJlcGxhY2UoJy8nLCAnJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFBhdGggPSBjb25maWdSb3V0ZS5maW5kKChjKSA9PiBjLnBhdGggPT09ICcnKTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0UGF0aCAmJiAoZGVmYXVsdFBhdGgucmVkaXJlY3RUbyA9IGRlZmF1bHRQYWdlUm91dGUpO1xuICAgICAgICAgICAgICAgIGNvbmZpZ1JvdXRlLnB1c2goeyBwYXRoOiAnKionLCByZWRpcmVjdFRvOiBkZWZhdWx0UGFnZVJvdXRlIH0pO1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IG5vdEZvdW5kUGF0aCA9IGNvbmZpZ1JvdXRlLmZpbmQoKGMpID0+IGMucGF0aCA9PT0gJyoqJyk7XG4gICAgICAgICAgICAgICAgLy8gbm90Rm91bmRQYXRoICYmIChub3RGb3VuZFBhdGgucmVkaXJlY3RUbyA9IGRlZmF1bHRQYWdlLlJvdXRlLnJlcGxhY2UoJy8nLCAnJykpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLnJlc2V0Q29uZmlnKGNvbmZpZ1JvdXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4dHJhY3RBbGxQYWdlcyhwb3J0YWxEYXRhIGFzIFBvcnRhbERhdGFNb2RlbCk7XG5cbiAgICAgICAgdGhpcy5wb3J0YWxEYXRhU291cmNlLm5leHQocG9ydGFsRGF0YSBhcyBQb3J0YWxEYXRhTW9kZWwpO1xuXG4gICAgICAgIHRoaXMuZGF0ZVRleHRTb3VyY2UubmV4dChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkRhdGVUZXh0KTtcbiAgICB9XG4gICAgcHVibGljIFNob3dGb3JtKGU6IHsgbW86IE1ldGFvYmplY3REYXRhTW9kZWw7IG5hbWE6IHN0cmluZzsgYWZ0ZXJSZWFkeT86IChlOiBhbnkpID0+IHZvaWQgfSk6IHZvaWQge1xuICAgICAgICBCYXJzYUFwaS5Cdy5Gb3JtLlNob3coe1xuICAgICAgICAgICAgTW86IGUubW8sXG4gICAgICAgICAgICBNb0NvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBWaWV3TmFtZTogZS5uYW1hXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRXZlbnRIYW5kbGVyczoge1xuICAgICAgICAgICAgICAgIEFmdGVyUmVhZHk6IGZ1bmN0aW9uIChzZW5kZXIsIGVlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vZG8gc29tZXRoaW5nIGhlcmVcbiAgICAgICAgICAgICAgICAgICAgZS5hZnRlclJlYWR5Py4oZWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgbG9naW5Sb3V0ZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9ydGFsRGF0YSQucGlwZShcbiAgICAgICAgICAgIG1hcCgocG9ydGFsRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ2luUGFnZSA9IHBvcnRhbERhdGE/LkNoaWxkUGFnZUxpc3QuTW9EYXRhTGlzdC5maW5kKChjKSA9PiBjLklzTG9naW5Sb3V0ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2luUGFnZT8uUm91dGUgfHwgJ2xvZ2luJztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIHB1YmxpYyBFeGVjdXRlTm90aWZpY2F0aW9uQWN0aW9uKGlkOiBzdHJpbmcsIGFjdGlvblRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XG4gICAgICAgICAgICBQYXJhbWV0ZXJzOiBbaWQsIGFjdGlvblRpdGxlXSxcbiAgICAgICAgICAgIE1ldGhvZDogJ0V4ZWN1dGVOb3RpZmljYXRpb25BY3Rpb24nLFxuICAgICAgICAgICAgU3VjY2Vzc0ZuOiAoZToge1xuICAgICAgICAgICAgICAgIE1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsO1xuICAgICAgICAgICAgICAgIER5bmFtaWNDb21tYW5kSWQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICBTaG93Rm9ybVNldHRpbmc6IHsgTW9JZDogc3RyaW5nOyBWaWV3TmFtZTogc3RyaW5nIH07XG4gICAgICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlUHVzaEFjdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmIChlLkR5bmFtaWNDb21tYW5kSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgRXhlY3V0ZUR5bmFtaWNDb21tYW5kKHsgSWQ6IGUuRHluYW1pY0NvbW1hbmRJZCB9LCBlLk1vKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUuU2hvd0Zvcm1TZXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgTW9JZCwgVmlld05hbWUgfSA9IGUuU2hvd0Zvcm1TZXR0aW5nO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IEJhcnNhQXBpLkJ3LkZvcm0uU2hvdyh7IE1vSWQsIE1vQ29udGV4dDogeyBWaWV3TmFtZSB9IH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRmFpbEZuOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVB1c2hBY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdWJsaWMgbG9hZFVzZXJQb3J0YWxTZXR0aW5nKCk6IHZvaWQge1xuICAgICAgICBpZiAoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YT8uZXJyb3I/LnVzZXJNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdWx2UGFyYW1zID0ge1xuICAgICAgICAgICAgRmxhZ3M6IHtcbiAgICAgICAgICAgICAgICBEYXRhOiAnVHJ1ZScsXG4gICAgICAgICAgICAgICAgRXh0cmE6ICdGYWxzZScsXG4gICAgICAgICAgICAgICAgU2VhcmNoOiAnRmFsc2UnLFxuICAgICAgICAgICAgICAgIFZpZXc6ICdGYWxzZSdcbiAgICAgICAgICAgICAgICAvLyBHZW5lcmFsOlwiRmFsc2VcIiwgLy8gdWx2bWFpbmN0cmwgZG9lcyBub3QgY3JhZXRlIHVpIGNvbnRyb2wgcmFpc2UgZXJyb3JcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSZXBvcnROYW1lOiAnX9iq2YbYuNmK2YXYp9iqX9m+2KfZitmHX9m+2YjYsdiq2KfZhCcsXG4gICAgICAgICAgICBVc2FnZUVudW06ICdTeXN0ZW1Db250YWluZXInXG4gICAgICAgIH07XG4gICAgICAgIEJhcnNhQXBpLkJ3LkV4ZWN1dGVSZXBvcnQoXG4gICAgICAgICAgICB7IHVsdlBhcmFtcyB9LFxuICAgICAgICAgICAgKHJlc3VsdDogUmVwb3J0TW9kZWwpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2xpc3QgPSByZXN1bHQuRGF0YS5Nb0RhdGFMaXN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJQb3J0YWxTZXR0aW5nOiBSZWNvcmQ8c3RyaW5nLCBNZXRhb2JqZWN0RGF0YU1vZGVsPiA9IHt9O1xuICAgICAgICAgICAgICAgIG1vbGlzdC5mb3JFYWNoKChtbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobW8uSW5oZXJpdGFuY2UgJiYgbW8uSW5oZXJpdGFuY2UuJFR5cGVEZWZOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyUG9ydGFsU2V0dGluZ1ttby5Jbmhlcml0YW5jZS4kVHlwZURlZk5hbWVdID0gbW8uSW5oZXJpdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyUG9ydGFsU2V0dGluZ3MkLm5leHQodXNlclBvcnRhbFNldHRpbmcpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgLy8gQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XG4gICAgICAgIC8vICAgICBQYXJhbWV0ZXJzOiBbXSxcbiAgICAgICAgLy8gICAgIE1ldGhvZDogJ0dldFVzZXJQb3J0YWxTZXR0aW5ncycsXG4gICAgICAgIC8vICAgICBTdWNjZXNzRm46ICh1c2VyUG9ydGFsU2V0dGluZzogTWV0YW9iamVjdERhdGFNb2RlbCkgPT4ge1xuICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgLy8gICAgIEZhaWxGbjogKGUpID0+IHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoZSk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0pO1xuICAgIH1cbiAgICBsb2FkU2VydmVyU3RhcnR1cERhdGEoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhamF4SGVscGVyID0gdHlwZW9mIEFqYXhIZWxwZXIyID09PSAndW5kZWZpbmVkJyA/IEFqYXhIZWxwZXIgOiBBamF4SGVscGVyMjtcbiAgICAgICAgICAgIGFqYXhIZWxwZXIuQWpheFJlcXVlc3QoXG4gICAgICAgICAgICAgICAgJy9hcGkvYmFzZS9TZXJ2ZXJTdGFydHVwRGF0YScsXG4gICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhVGV4dCA9IHJlc3BvbnNlLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVRleHQgPSBkYXRhVGV4dC5yZXBsYWNlKC8nL2csICdcIicpO1xuICAgICAgICAgICAgICAgICAgICBkYXRhVGV4dCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlJlcGxhY2VBcmFiaWNDaGFyY2h0ZXIoZGF0YVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBCYXJzYUFwaS5Mb2dpbkZvcm0uUG9ydGFsSW5pdGlhbGl6ZShkYXRhVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc0Fub255bW91cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhPy5lcnJvcj8udXNlck1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXJzYUFwaS5Cdy5Nc2cuRXJyb3IoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YT8uZXJyb3I/LnVzZXJNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFyc2FBcGkuQncuTXNnLkVycm9yKCfYp9mF2qnYp9mGINmI2LHZiNivINio2Kcg2qnYp9ix2KjYsSDZvtmI2LHYqtin2YQg2YjYrNmI2K8g2YbYr9in2LHYry4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzU2VydmljZURlc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX3JvdXRlci5jb25maWc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbMF0ucmVkaXJlY3RUbyA9ICdzZXJ2aWNlZGVzayc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JvdXRlci5yZXNldENvbmZpZyhjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luaXRBZnRlckxvZ2luRm9ybURhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ2Vycm9yIGluIGdldCBzZXJ2ZXIgc3RhcnR1cCBkYXRhLicpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobnVsbCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBTaG93Rm9ybVBhbmVsQ29udHJvbChcbiAgICAgICAgZm9ybXBhbmVsQ3RybHI6IGFueSxcbiAgICAgICAgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgZGlhbG9nQ29tcG9uZW50OiBUeXBlPGFueT4sXG4gICAgICAgIGlzUGFnZTogYm9vbGVhbixcbiAgICAgICAgdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBpc1JlbG9hZDogYm9vbGVhbiA9IGZhbHNlXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghZm9ybXBhbmVsQ3RybHIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZm9ybSBwYW5lbCBjb250cm9sZXIgaXMgdW5kZWZpbmVkIScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vID0gZm9ybXBhbmVsQ3RybHIuTW87XG4gICAgICAgIGNvbnN0IGhlYWRlckxheW91dCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGZvcm1wYW5lbEN0cmxyLCAnU2V0dGluZy5WaWV3LkhlYWRlckxheW91dCcsIG51bGwpO1xuICAgICAgICBsZXQgaXNNb2RhbCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGZvcm1wYW5lbEN0cmxyLCAnU2V0dGluZy5WaWV3LkV4dHJhSnNvblByb3AuTW9kYWwnLCBmYWxzZSk7XG4gICAgICAgIGlzTW9kYWwgPVxuICAgICAgICAgICAgaXNNb2RhbCB8fFxuICAgICAgICAgICAgQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoZm9ybXBhbmVsQ3RybHIsICdTZXR0aW5nLlZpZXcuQ3VzdG9tVWkuUGFyYW1ldGVycy5Jc01vZGFsJywgZmFsc2UpO1xuICAgICAgICBjb25zdCBtb2RhbFNldHRpbmcgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcbiAgICAgICAgICAgIGZvcm1wYW5lbEN0cmxyLFxuICAgICAgICAgICAgJ1NldHRpbmcuVmlldy5DdXN0b21VaS5QYXJhbWV0ZXJzLk1vZGFsU2V0dGluZycsXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtb2RhbFNldHRpbmcpIHtcbiAgICAgICAgICAgIGlzTW9kYWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1wYW5lbEN0cmxyLlNldHRpbmcuSXNNb2RhbCA9IGlzTW9kYWw7XG4gICAgICAgIGZvcm1wYW5lbEN0cmxyLklzTW9kYWwgPSBpc01vZGFsO1xuICAgICAgICBjb25zdCBicmVhZENydW1iID0gZ2V0SGVhZGVyVmFsdWUoaGVhZGVyTGF5b3V0Py5CcmVhZENydW1iKTtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7XG4gICAgICAgICAgICBpZDogbW8uJFN0YXRlID09PSAnTmV3JyA/ICcwJyA6IG1vLklkLFxuICAgICAgICAgICAgdHlpZDogbW8uJFR5cGVEZWZJZCxcbiAgICAgICAgICAgIHR5Y3A6IG1vLiRDYXB0aW9uID8gbW8uJENhcHRpb24gOiBudWxsLFxuICAgICAgICAgICAgcmVwaWQ6IG1vLiRSZXBvcnRJZCxcbiAgICAgICAgICAgIHZpZDogZm9ybXBhbmVsQ3RybHI/LlNldHRpbmc/LlZpZXc/LlR5cGVWaWV3SWQsXG4gICAgICAgICAgICBiYzogYnJlYWRDcnVtYiA/IGJyZWFkQ3J1bWIgOiBtby4kU3RhdGUgPT09ICdOZXcnID8gbW8uJFR5cGVEZWZOYW1lIDogbW8uJENhcHRpb25cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaWQgPSBnZXRVbmlxdWVJZCg0KTtcbiAgICAgICAgdGhpcy5hZGRGb3JtUGFuZWxDdHJscihpZCwgZm9ybXBhbmVsQ3RybHIpO1xuICAgICAgICBpZiAoaXNNb2RhbCkge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dGb3JtKFxuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICBmb3JtcGFuZWxDdHJsclxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdmNyXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB7IGZvcm1QYW5lbEN0cmxySWQ6IGlkIH07XG4gICAgICAgICAgICBpZiAoaXNQYWdlKSB7XG4gICAgICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAnZm9ybScsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluOiBbJ3Nob3cnLCB7IC4uLnF1ZXJ5UGFyYW1zLCBmb3JtUGFuZWxDdHJscklkOiBpZCwgaXNGaXJzdDogdHJ1ZSB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiBhY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogaXNSZWxvYWRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZShcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3BvcHVwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsZXRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW46IFsnc2hvdycsIHsgLi4ucXVlcnlQYXJhbXMsIGZvcm1QYW5lbEN0cmxySWQ6IGlkIH1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiBhY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ3ByZXNlcnZlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogaXNSZWxvYWRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGxvYWRTeXN0ZW0oaWQ6IG51bWJlciA9IDApOiBQcm9taXNlPFBvcnRhbERhdGFNb2RlbD4ge1xuICAgICAgICBpZiAoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YT8uZXJyb3I/LnVzZXJNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YT8uZXJyb3I/LnVzZXJNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5fbG9hZFN5c3RlbShcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcml2YXRlIF9yZW1vdmVQdXNoQWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwdXNoQWN0aW9uU3RyID0gdGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1c2hBY3Rpb24nKTtcbiAgICAgICAgaWYgKHB1c2hBY3Rpb25TdHIpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmUoJ3B1c2hBY3Rpb24nKTtcbiAgICAgICAgICAgIGNvbnN0IHB1c2hBY3Rpb24gPSBKU09OLnBhcnNlKHB1c2hBY3Rpb25TdHIpO1xuICAgICAgICAgICAgdGhpcy5fcHVzaEFjdGlvbiQubmV4dChwdXNoQWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIF9pbml0QWZ0ZXJMb2dpbkZvcm1EYXRhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJ0bFNvdXJjZS5uZXh0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNSdGwpO1xuICAgICAgICB0aGlzLl9pc0Fub251bW91c1NvdXJjZS5uZXh0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNBbm9ueW1vdXMpO1xuICAgICAgICB0aGlzLnNldFVzZXJMb2dpblN0YXR1cyhCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzVXNlckxvZ2dlZEluKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VkSW5Tb3VyY2UubmV4dCh0aGlzLl9sb2dnZWRJblNvdXJjZS5nZXRWYWx1ZSgpICYmIEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNBbm9ueW1vdXMgPT09IGZhbHNlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5pdFZpc2liaWxpdHlDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAndmlzaWJsZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudFZpc2liaWxpdHljaGFuZ2UkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudFZpc2liaWxpdHljaGFuZ2UkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbml0U3RhbmRhbG9uZSgpOiB2b2lkIHtcbiAgICAgICAgd2luZG93Lm1hdGNoTWVkaWEoJyhkaXNwbGF5LW1vZGU6IHN0YW5kYWxvbmUpJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzTWF0Y2ggPSBlLm1hdGNoZXM7XG5cbiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhbmRhbG9uZSQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhbmRhbG9uZSQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbml0UHVzaEFjdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMudXNlckxvZ2dlZEluJCwgdGhpcy5wdXNoQWN0aW9uJF0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAvLyB3aXRoTGF0ZXN0RnJvbSh0aGlzLl9wb3J0YWxTZXJ2aWNlLnB1c2hBY3Rpb24kKSxcbiAgICAgICAgICAgICAgICAvLyBmaWx0ZXIoKFt1c2VyTG9nZ2VkaW4sIGFjdGlvbl0pID0+IHVzZXJMb2dnZWRpbilcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKFt1c2VyTG9nZ2VkaW4sIHB1c2hBY3Rpb25dKSA9PiB1c2VyTG9nZ2VkaW4pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChbdXNlckxvZ2dlZGluLCBwdXNoQWN0aW9uXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwdXNoQWN0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5FeGVjdXRlTm90aWZpY2F0aW9uQWN0aW9uKHB1c2hBY3Rpb24ubm90aWZpY2F0aW9uVGFnLCBwdXNoQWN0aW9uLmFjdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2luaXRMYW5kc2NhcGUoKTogdm9pZCB7XG4gICAgICAgIHdpbmRvdy5tYXRjaE1lZGlhKCcob3JpZW50YXRpb246IHBvcnRyYWl0KScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc01hdGNoID0gZS5tYXRjaGVzO1xuXG4gICAgICAgICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RldmljZUxhbmRzY2FwZSQubmV4dChmYWxzZSk7IC8vIHBvcnRyYWl0XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RldmljZUxhbmRzY2FwZSQubmV4dCh0cnVlKTsgLy8gbGFuZHNjYXBlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcml2YXRlIGZpbmRQYWdlQnlSb3V0ZSh1cmw6IHN0cmluZyk6IFBhZ2VEYXRhTW9kZWwgfCBudWxsIHtcbiAgICAgICAgY29uc3QgZmluZGVkUGFnZSA9IHRoaXMucGFnZXMuZmluZCgoYykgPT4gYy5Sb3V0ZSA9PT0gdXJsKTtcbiAgICAgICAgcmV0dXJuIGZpbmRlZFBhZ2UgfHwgbnVsbDtcbiAgICB9XG4gICAgcHJpdmF0ZSBnZXROZ01vZHVsZUZhY3RvcnkobW9kdWxlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgbW9kdWxlTmFtZTogc3RyaW5nKTogTmdNb2R1bGVGYWN0b3J5PGFueT4ge1xuICAgICAgICBjb25zdCBtb2R1bGVDbGFzcyA9IG1vZHVsZXNbbW9kdWxlTmFtZSArICdNb2R1bGUnXTtcbiAgICAgICAgbGV0IG1vZHVsZUZhY3Rvcnk6IE5nTW9kdWxlRmFjdG9yeTxhbnk+O1xuICAgICAgICBpZiAobW9kdWxlQ2xhc3MgaW5zdGFuY2VvZiBOZ01vZHVsZUZhY3RvcnkpIHtcbiAgICAgICAgICAgIG1vZHVsZUZhY3RvcnkgPSBtb2R1bGVDbGFzcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBpbGVkID0gdGhpcy5jb21waWxlci5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMobW9kdWxlQ2xhc3MpO1xuICAgICAgICAgICAgbW9kdWxlRmFjdG9yeSA9IGNvbXBpbGVkLm5nTW9kdWxlRmFjdG9yeTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9kdWxlRmFjdG9yeTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlZ2lzdGVyZWRNb2R1bGVzKHVtZDogc3RyaW5nLCBleHBvcnRBczogc3RyaW5nW10sIG1vZHVsZU5hbWU6IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgICAgICBsZXQgbW9kdWxlcztcbiAgICAgICAgaWYgKHVtZCAhPT0gJycpIHtcbiAgICAgICAgICAgIG1vZHVsZXMgPSB3aW5kb3c7XG4gICAgICAgICAgICB1bWQuc3BsaXQoJy4nKS5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGVzICE9PSB0eXBlb2YgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZXMgPSBtb2R1bGVzW2NdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kdWxlcyA9IHdpbmRvd1ttb2R1bGVOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhwb3J0QXMubGVuZ3RoID4gMCAmJiBtb2R1bGVzKSB7XG4gICAgICAgICAgICBleHBvcnRBcy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZU9uT2JqZWN0KGMsIDAsIG1vZHVsZXMsIHdpbmRvdyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9kdWxlcztcbiAgICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIExpYnJhcnlEZXBlbmVjeSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGtlYmFiTmFtZTogc3RyaW5nO1xuICAgIHVtZDogc3RyaW5nO1xuICAgIGV4cG9ydEFzOiBzdHJpbmdbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWRDcnVtYkluZm8ge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlO1xufVxuIl19
|
|
860
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL3NlcnZpY2VzL3BvcnRhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxNQUFNLEVBQ04sVUFBVSxFQUVWLGVBQWUsRUFHbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRXJELE9BQU8sRUFBYyxlQUFlLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUcsT0FBTyxFQUNILEdBQUcsRUFDSCxHQUFHLEVBQ0gsU0FBUyxFQUNULFFBQVEsRUFDUixhQUFhLEVBQ2IsUUFBUSxFQUNSLFVBQVUsRUFDVixvQkFBb0IsRUFDcEIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ1QsTUFBTSxnQkFBZ0IsQ0FBQztBQWF4QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHekQsT0FBTyxFQUNILHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsV0FBVyxFQUNkLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7OztBQVcxQyxNQUFNLE9BQU8sYUFBYTtJQXNDdEIsWUFDWSxHQUE0QixFQUM1QixVQUFzQixFQUN0QixVQUFzQixFQUN0QixhQUFpQyxFQUNqQyxRQUFrQixFQUNsQixPQUFlLEVBQ2YsU0FBbUIsRUFDbkIsYUFBa0MsRUFDaEIsU0FBbUI7UUFS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b21wb25lbnRSZWYsXHJcbiAgICBJbmplY3QsXHJcbiAgICBJbmplY3RhYmxlLFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBOZ01vZHVsZUZhY3RvcnksXHJcbiAgICBUeXBlLFxyXG4gICAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBET0NVTUVOVCwgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBvZiwgZnJvbSwgZm9ya0pvaW4sIGZyb21FdmVudCwgU3ViamVjdCwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gICAgdGFwLFxyXG4gICAgbWFwLFxyXG4gICAgY29uY2F0TWFwLFxyXG4gICAgZmluYWxpemUsXHJcbiAgICBwdWJsaXNoUmVwbGF5LFxyXG4gICAgcmVmQ291bnQsXHJcbiAgICBleGhhdXN0TWFwLFxyXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXHJcbiAgICBzdGFydFdpdGgsXHJcbiAgICBkZWJvdW5jZVRpbWUsXHJcbiAgICBmaWx0ZXJcclxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQWJicmV2YXRpb25EZXZpY2VTaXplLFxyXG4gICAgTG9naW5SZXN1bHQsXHJcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgTW9Gb3JSZXBvcnRNb2RlbCxcclxuICAgIFBhZ2VEYXRhTW9kZWwsXHJcbiAgICBQb3J0YWxEYXRhTW9kZWwsXHJcbiAgICBSZXBvcnRNb2RlbFxyXG59IGZyb20gJy4uL2Fic3RyYWN0LWNsYXNzZXMvbW9kZWxzJztcclxuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSAnLi9sb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhcnNhQXBpIH0gZnJvbSAnLi4vYWJzdHJhY3QtY2xhc3Nlcy9iYXJzYS1hcGknO1xyXG5pbXBvcnQgeyBCYXJzYURpYWxvZ1NlcnZpY2UgfSBmcm9tICcuL2JhcnNhLWRpYWxvZy5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgICBFeGVjdXRlRHluYW1pY0NvbW1hbmQsXHJcbiAgICBnZXRDb21wb25lbnREZWZpbmVkLFxyXG4gICAgZ2V0RGV2aWNlSXNNb2JpbGUsXHJcbiAgICBnZXREZXZpY2VJc1RhYmxldCxcclxuICAgIGdldEhlYWRlclZhbHVlLFxyXG4gICAgZ2V0VW5pcXVlSWRcclxufSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBQb3J0YWxQYWdlUmVzb2x2ZXIgfSBmcm9tICcuLi9yZXNvbHZlcnMvcG9ydGFsLXBhZ2UucmVzb2x2ZXInO1xyXG5pbXBvcnQgeyBBdXRoR3VhcmQgfSBmcm9tICcuLi9hdXRoLWd1YXJkJztcclxuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuL2R5bmFtaWMtY29tcG9uZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcclxuXHJcbmRlY2xhcmUgbGV0IEFqYXhIZWxwZXI6IGFueTtcclxuZGVjbGFyZSBsZXQgQWpheEhlbHBlcjI6IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUG9ydGFsU2VydmljZSB7XHJcbiAgICBwdWJsaWMgb2Zmc2V0VG9wID0gMDtcclxuXHJcbiAgICBsb2dpbkxvYWRpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIGxvYWRlZCA9IGZhbHNlO1xyXG4gICAgZm9ybVBhbmVsczogYW55ID0ge307XHJcbiAgICBjYWNoZWRJbWFnZXM6IGFueSA9IHt9O1xyXG4gICAgZGF0ZVRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgICBkZWZhdWx0Um91dGU6IHN0cmluZztcclxuICAgIGNhY2hlZFBhZ2VEYXRhOiB7IFtrZXk6IHN0cmluZ106IE9ic2VydmFibGU8UGFnZURhdGFNb2RlbD4gfSA9IHt9O1xyXG4gICAgcGFnZXM6IFBhZ2VEYXRhTW9kZWxbXSA9IFtdO1xyXG4gICAgcnRsU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcclxuICAgIHVzZXJMb2dnZWRJbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBkaWN0aW9uYXJ5OiB7IFtrZXk6IHN0cmluZ106IEJlaGF2aW9yU3ViamVjdDxhbnk+IH0gPSB7fTtcclxuICAgIHBvcnRhbERhdGFTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBvcnRhbERhdGFNb2RlbCB8IG51bGw+KG51bGwpO1xyXG4gICAgcG9ydGFsU2V0dGluZ3MkOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWw+O1xyXG4gICAgcG9ydGFsRGF0YSQ6IE9ic2VydmFibGU8UG9ydGFsRGF0YU1vZGVsIHwgbnVsbD47XHJcbiAgICBkZXZpY2VTaXplJDogT2JzZXJ2YWJsZTxBYmJyZXZhdGlvbkRldmljZVNpemU+O1xyXG4gICAgcnRsJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIGRpclZhbHVlJDogT2JzZXJ2YWJsZTwncnRsJyB8ICdsdHInPjtcclxuICAgIHJvdXRlSW5pdGlhbGl6ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgX2lzQW5vbnVtb3VzU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcclxuICAgIF9wdXNoQWN0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBub3RpZmljYXRpb25UYWc6IHN0cmluZzsgYWN0aW9uOiBzdHJpbmcgfSB8IG51bGw+KG51bGwpO1xyXG4gICAgcHJpdmF0ZSBfZGV2aWNlU2l6ZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWJicmV2YXRpb25EZXZpY2VTaXplPih0aGlzLl9pbml0YWxpemVEZXZpY2VTaXplKCkpO1xyXG4gICAgcHJpdmF0ZSBfbG9nZ2VkSW5Tb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByaXZhdGUgcm91dGVJbml0aWFsaXplZFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBkYXRlVGV4dFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgICBwcml2YXRlIF9uYXZpZ2F0aW9uU3RhcnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOYXZpZ2F0aW9uU3RhcnQgfCBudWxsPihudWxsKTtcclxuICAgIHByaXZhdGUgX25hdmlnYXRpb25FbmQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOYXZpZ2F0aW9uRW5kIHwgbnVsbD4obnVsbCk7XHJcbiAgICBwcml2YXRlIF91c2VyUG9ydGFsU2V0dGluZ3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWNvcmQ8c3RyaW5nLCBNZXRhb2JqZWN0RGF0YU1vZGVsPj4oe30pO1xyXG4gICAgcHJpdmF0ZSBfY3NzVXJsU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYWZlUmVzb3VyY2VVcmwgfCBudWxsPihudWxsKTtcclxuICAgIHByaXZhdGUgX2Nzc0N1c3RvbVVybFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2FmZVJlc291cmNlVXJsIHwgbnVsbD4obnVsbCk7XHJcbiAgICBwcml2YXRlIF9zZWFyY2hUZXJtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgICBwcml2YXRlIF93aW5kb3dSZXNpemUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX2RldmljZUxhbmRzY2FwZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KCF3aW5kb3cubWF0Y2hNZWRpYSgnKG9yaWVudGF0aW9uOiBwb3J0cmFpdCknKS5tYXRjaGVzKTtcclxuICAgIHByaXZhdGUgX3N0YW5kYWxvbmUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih3aW5kb3cubWF0Y2hNZWRpYSgnKGRpc3BsYXktbW9kZTogc3RhbmRhbG9uZSknKS5tYXRjaGVzKTtcclxuICAgIHByaXZhdGUgX2RvY3VtZW50VmlzaWJpbGl0eWNoYW5nZSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZGNtOiBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGFwaVNlcnZpY2U6IEFwaVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogQmFyc2FEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY29tcGlsZXI6IENvbXBpbGVyLFxyXG4gICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgX2xvY2F0aW9uOiBMb2NhdGlvbixcclxuICAgICAgICBwcml2YXRlIF9sb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50XHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcclxuICAgICAgICB0aGlzLl9pbml0TGFuZHNjYXBlKCk7XHJcbiAgICAgICAgdGhpcy5faW5pdFN0YW5kYWxvbmUoKTtcclxuICAgICAgICB0aGlzLl9pbml0VmlzaWJpbGl0eUNoYW5nZSgpO1xyXG4gICAgICAgIHRoaXMuX2luaXRQdXNoQWN0aW9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB1c2VyTG9nZ2VkSW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvZ2dlZEluU291cmNlLmdldFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgcHVzaEFjdGlvbiQoKTogT2JzZXJ2YWJsZTx7IG5vdGlmaWNhdGlvblRhZzogc3RyaW5nOyBhY3Rpb246IHN0cmluZyB9IHwgbnVsbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoQWN0aW9uJC5hc09ic2VydmFibGUoKS5waXBlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgZG9jdW1lbnRWaXNpYmlsaXR5Y2hhbmdlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnRWaXNpYmlsaXR5Y2hhbmdlJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIGdldCBpc1N0YW5kYWxvbmUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YW5kYWxvbmUkLmdldFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgc3RhbmRhbG9uZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YW5kYWxvbmUkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGxhbmRzY2FwZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZUxhbmRzY2FwZSQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgd2luZG93UmVzaXplJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93UmVzaXplJC5hc09ic2VydmFibGUoKS5waXBlKGRlYm91bmNlVGltZSgzMDApKTtcclxuICAgIH1cclxuICAgIGdldCBwb3J0YWxEYXRhKCk6IFBvcnRhbERhdGFNb2RlbCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvcnRhbERhdGFTb3VyY2UuZ2V0VmFsdWUoKTtcclxuICAgIH1cclxuICAgIGdldCBzZWFyY2hUZXJtJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hUZXJtJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIGdldCBjc3NVcmwkKCk6IE9ic2VydmFibGU8U2FmZVJlc291cmNlVXJsIHwgbnVsbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jc3NVcmxTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgY3NzQ3VzdG9tVXJsJCgpOiBPYnNlcnZhYmxlPFNhZmVSZXNvdXJjZVVybCB8IG51bGw+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3NzQ3VzdG9tVXJsU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHVzZXJQb3J0YWxTZXR0aW5ncygpOiBSZWNvcmQ8c3RyaW5nLCBNZXRhb2JqZWN0RGF0YU1vZGVsPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJQb3J0YWxTZXR0aW5ncyQuZ2V0VmFsdWUoKTtcclxuICAgIH1cclxuICAgIGdldCB1c2VyUG9ydGFsU2V0dGluZ3MkKCk6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgTWV0YW9iamVjdERhdGFNb2RlbD4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclBvcnRhbFNldHRpbmdzJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIGdldCBkZXZpY2VTaXplKCk6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZVNpemVTb3VyY2UuZ2V0VmFsdWUoKTtcclxuICAgIH1cclxuICAgIGdldCBpc0Fub255bW91cyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQW5vbnVtb3VzU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IG5hdmlnYXRpb25FbmQkKCk6IE9ic2VydmFibGU8TmF2aWdhdGlvbkVuZCB8IG51bGw+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvbkVuZCQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgbmF2aWdhdGlvblN0YXJ0JCgpOiBPYnNlcnZhYmxlPE5hdmlnYXRpb25TdGFydCB8IG51bGw+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvblN0YXJ0JC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZE1vKGlkOiBzdHJpbmcsIHR5cGVkZWZJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmxvYWRQb3J0YWxQYWdlRGF0YShpZCwgdHlwZWRlZklkKTtcclxuICAgIH1cclxuICAgIHB1c2hBY3Rpb25OZXh0KHB1c2hBY3Rpb246IHsgbm90aWZpY2F0aW9uVGFnOyBhY3Rpb24gfSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKCdwdXNoQWN0aW9uJywgSlNPTi5zdHJpbmdpZnkocHVzaEFjdGlvbikpO1xyXG4gICAgICAgIHRoaXMuX3B1c2hBY3Rpb24kLm5leHQocHVzaEFjdGlvbik7XHJcbiAgICB9XHJcbiAgICBzZXRTZWFyY2hUZXJtKHRlcm06IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NlYXJjaFRlcm0kLm5leHQodGVybSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3dSZXNpemUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fd2luZG93UmVzaXplJC5uZXh0KCk7XHJcbiAgICB9XHJcbiAgICBuYXZpYXRpb25FbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uRW5kJC5uZXh0KGV2ZW50KTtcclxuICAgIH1cclxuICAgIG5hdmlhdGlvblN0YXJ0KGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uU3RhcnQkLm5leHQoZXZlbnQpO1xyXG4gICAgfVxyXG4gICAgc2V0VXNlclBvcnRhbFNldHRpbmdzKHVzZXJQb3J0YWxTZXR0aW5nczogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fdXNlclBvcnRhbFNldHRpbmdzJC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgIGlmICh1c2VyUG9ydGFsU2V0dGluZ3MuJFR5cGVEZWZOYW1lKSB7XHJcbiAgICAgICAgICAgIHZhbHVlW3VzZXJQb3J0YWxTZXR0aW5ncy4kVHlwZURlZk5hbWVdID0gdXNlclBvcnRhbFNldHRpbmdzO1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyUG9ydGFsU2V0dGluZ3MkLm5leHQoeyAuLi52YWx1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXRUaGVtZSh0aGVtZVVybDogU2FmZVJlc291cmNlVXJsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY3NzVXJsU291cmNlLm5leHQodGhlbWVVcmwpO1xyXG4gICAgICAgIHRoaXMuX2Nzc0N1c3RvbVVybFNvdXJjZS5uZXh0KHRoZW1lVXJsKTtcclxuICAgIH1cclxuICAgIHNldERhdGEoa2V5LCBkYXRhKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRpY3Rpb25hcnlba2V5XSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpY3Rpb25hcnlba2V5XSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihkYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9uYXJ5W2tleV0ubmV4dChkYXRhKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBvbGRWYWwgPSB0aGlzLmRpY3Rpb25hcnlba2V5XS5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAob2xkVmFsICE9PSBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpY3Rpb25hcnlba2V5XS5uZXh0KGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0RGF0YShrZXksIGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRpY3Rpb25hcnlba2V5XSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpY3Rpb25hcnlba2V5XSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihkZWZhdWx0VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJ5W2tleV0uYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBnZXREYXRhU3luYzxUPihrZXksIGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbCk6IFQgfCBudWxsIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGljdGlvbmFyeVtrZXldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmRpY3Rpb25hcnlba2V5XS5nZXRWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlRm9yUmVwb3J0KG5hdkl0ZW0pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tKFxyXG4gICAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBCYXJzYUFwaS5VbC5VbHZNYWluQ3RybHIuQ3JlYXRlRm9yUmVwb3J0KHt9LCBuYXZJdGVtLCAoZXJyLCByZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcmVuZGVyVWx2TWFpblVpKFxyXG4gICAgICAgIG5hdkl0ZW0sXHJcbiAgICAgICAgdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBpc1JlcG9ydFBhZ2U6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVGb3JSZXBvcnQobmF2SXRlbSkucGlwZShcclxuICAgICAgICAgICAgZXhoYXVzdE1hcCgodWx2TWFpbkN0cmxyKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRVbHZNYWluVWlDb21wb25lbnQodWx2TWFpbkN0cmxyLkFkYXB0ZXIuQ29udHJvbCwgaW5qZWN0b3IsIGlzUmVwb3J0UGFnZSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICB0YXAoKHVsdk1hbmlVaUNvbXBvbmVudCkgPT4gdmNyLmluc2VydCh1bHZNYW5pVWlDb21wb25lbnQuaG9zdFZpZXcpKSxcclxuICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdWx2TWFpbkN0cmxyKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGdldFVsdk1haW5VaUNvbXBvbmVudChjdXN0b21VbHZNYWluVWksIGluamVjdG9yOiBJbmplY3RvciwgaXNSZXBvcnRQYWdlKTogT2JzZXJ2YWJsZTxDb21wb25lbnRSZWY8YW55Pj4ge1xyXG4gICAgICAgIGNvbnN0IGN1c3RvbVVpU2V0dGluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGN1c3RvbVVsdk1haW5VaS5TZXR0aW5nLCAnQ3VzdG9tVWknLCBudWxsKTtcclxuICAgICAgICBjb25zdCB7IG1vZHVsZU5hbWUsIG1vZHVsZVBhdGgsIGNvbXBvbmVudE5hbWUsIHNlbGVjdG9yIH0gPSBnZXRDb21wb25lbnREZWZpbmVkKFxyXG4gICAgICAgICAgICBjdXN0b21VbHZNYWluVWksXHJcbiAgICAgICAgICAgIGN1c3RvbVVpU2V0dGluZ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50KG1vZHVsZU5hbWUsIG1vZHVsZVBhdGgsIGNvbXBvbmVudE5hbWUsIHNlbGVjdG9yLCBpbmplY3RvcikucGlwZShcclxuICAgICAgICAgICAgbWFwKChjb21wb25lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlID0gY29tcG9uZW50Lmluc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaWQgPSBjdXN0b21VbHZNYWluVWkuaWQ7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5jb250ZXh0ID0gY3VzdG9tVWx2TWFpblVpO1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaXNSZXBvcnRQYWdlID0gaXNSZXBvcnRQYWdlO1xyXG4gICAgICAgICAgICAgICAgY3VzdG9tVWx2TWFpblVpLmNvbnRyb2xVaSA9IGNvbXBvbmVudEluc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRldmljZVNpemUkID0gdGhpcy5fZGV2aWNlU2l6ZVNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgICAgICB0aGlzLnBvcnRhbERhdGEkID0gdGhpcy5wb3J0YWxEYXRhU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMucnRsJCA9IHRoaXMucnRsU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMudXNlckxvZ2dlZEluJCA9IHRoaXMuX2xvZ2dlZEluU291cmNlXHJcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxyXG4gICAgICAgICAgICAucGlwZShtYXAoKGlzTG9nZ2VkSW4pID0+IGlzTG9nZ2VkSW4gJiYgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc0Fub255bW91cyA9PT0gZmFsc2UpKTtcclxuICAgICAgICB0aGlzLmRpclZhbHVlJCA9IHRoaXMucnRsJC5waXBlKG1hcCgoaXNSdGwpID0+IChpc1J0bCA/ICdydGwnIDogJ2x0cicpKSk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZUluaXRpYWxpemVkJCA9IHRoaXMucm91dGVJbml0aWFsaXplZFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xyXG4gICAgICAgIHRoaXMuX3N0YW5kYWxvbmUkLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgoYykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdzdGFuZGFsb25lJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ25vU3RhbmRhbG9uZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fZGV2aWNlTGFuZHNjYXBlJC5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKGMpID0+IHtcclxuICAgICAgICAgICAgaWYgKGMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnbGFuZHNjYXBlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9kZXZpY2VTaXplU291cmNlLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgoYykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYyA9PT0gJ3MnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3NtYWxsZGV2aWNlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmRhdGVUZXh0JCA9IHRoaXMuZGF0ZVRleHRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5wb3J0YWxTZXR0aW5ncyQgPSB0aGlzLnBvcnRhbERhdGFTb3VyY2VcclxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXHJcbiAgICAgICAgICAgIC5waXBlKG1hcCgocG9ydGFsRGF0YSkgPT4gKHBvcnRhbERhdGEgPyBwb3J0YWxEYXRhLlBvcnRhbFNldHRpbmdzIDogKHt9IGFzIGFueSkpKSk7XHJcbiAgICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXHJcbiAgICAgICAgICAgIC5waXBlKHN0YXJ0V2l0aChudWxsKSwgZGVib3VuY2VUaW1lKDEwMDApKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93aW5kb3dSZXNpemUkLm5leHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldERldmljZVNpemUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2V0RGV2aWNlU2l6ZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkZXZpY2VTaXplID0gdGhpcy5faW5pdGFsaXplRGV2aWNlU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuX2RldmljZVNpemVTb3VyY2UubmV4dChkZXZpY2VTaXplKTtcclxuICAgIH1cclxuICAgIF9pbml0YWxpemVEZXZpY2VTaXplKCk6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZSB7XHJcbiAgICAgICAgY29uc3QgX2lzbW9iaWxlID0gZ2V0RGV2aWNlSXNNb2JpbGUoKTtcclxuICAgICAgICBjb25zdCBfaXNUYWJsZXQgPSBnZXREZXZpY2VJc1RhYmxldCgpO1xyXG4gICAgICAgIGxldCBfd2luZG9XU2l6ZTogQWJicmV2YXRpb25EZXZpY2VTaXplID0gJ3MnO1xyXG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSA2MDApIHtcclxuICAgICAgICAgICAgX3dpbmRvV1NpemUgPSAncyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDYwMCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8PSA5OTIpIHtcclxuICAgICAgICAgICAgX3dpbmRvV1NpemUgPSAnbSc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDk5MiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8PSAxMjAwKSB7XHJcbiAgICAgICAgICAgIF93aW5kb1dTaXplID0gJ2wnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIF93aW5kb1dTaXplID0gJ3hsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKF9pc21vYmlsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3MnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoX2lzVGFibGV0ICYmIF93aW5kb1dTaXplICE9PSAnbCcgJiYgX3dpbmRvV1NpemUgIT09ICd4bCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdtJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF93aW5kb1dTaXplO1xyXG4gICAgfVxyXG4gICAgY29tcGlsZU1vZHVsZShkZXBlbmRlbmN5OiBMaWJyYXJ5RGVwZW5lY3kpOiBPYnNlcnZhYmxlPE5nTW9kdWxlRmFjdG9yeTxhbnk+PiB7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlJCA9IHRoaXMuZ2V0TW9kdWxlKGRlcGVuZGVuY3kpO1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUkLnBpcGUoXHJcbiAgICAgICAgICAgIGNvbmNhdE1hcCgobW9kdWxlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlRmFjdG9yeSA9IHRoaXMuZ2V0TmdNb2R1bGVGYWN0b3J5KG1vZHVsZXMsIGRlcGVuZGVuY3kubmFtZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YobW9kdWxlRmFjdG9yeSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGdldE1vZHVsZShkZXBlbmRlbmN5OiBMaWJyYXJ5RGVwZW5lY3kpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHsgbmFtZSwga2ViYWJOYW1lLCB1bWQsIGV4cG9ydEFzIH0gPSBkZXBlbmRlbmN5O1xyXG4gICAgICAgIGNvbnN0IGJhc2UgPSBgL2Fzc2V0cy9tb2R1bGVzLyR7a2ViYWJOYW1lfS9idW5kbGVzYDtcclxuICAgICAgICBjb25zdCBkYXRlID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5hYmM7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IGAke2Jhc2V9LyR7a2ViYWJOYW1lfS51bWQuanM/dD0ke2RhdGV9YDtcclxuICAgICAgICByZXR1cm4gb2YodHJ1ZSkucGlwZShcclxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZXMgPSB0aGlzLmdldFJlZ2lzdGVyZWRNb2R1bGVzKHVtZCwgZXhwb3J0QXMsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobW9kdWxlcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkSnMkKHBhdGgpLnBpcGUobWFwKCgpID0+IHRoaXMuZ2V0UmVnaXN0ZXJlZE1vZHVsZXModW1kLCBleHBvcnRBcywgbmFtZSkpKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlT25PYmplY3QocGF0aCwgaW5kZXgsIG1vZHVsZXMsIG9iamVjdCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNwbGl0ZWQgPSBwYXRoLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgY29uc3QgcHJvcCA9IHNwbGl0ZWRbaW5kZXhdO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0W3Byb3BdID09PSB0eXBlb2YgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIG9iamVjdFtwcm9wXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kZXggPT09IHNwbGl0ZWQubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICBvYmplY3RbcHJvcF0gPSBtb2R1bGVzO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVPbk9iamVjdChwYXRoLCBpbmRleCArIDEsIG1vZHVsZXMsIG9iamVjdFtwcm9wXSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29tcG9uZW50KFxyXG4gICAgICAgIG1vZHVsZU5hbWU6IHN0cmluZyxcclxuICAgICAgICBtb2R1bGVQYXRoOiBzdHJpbmcsXHJcbiAgICAgICAgY29tcG9uZW50TmFtZTogc3RyaW5nLFxyXG4gICAgICAgIHNlbGVjdG9yOiBzdHJpbmcsXHJcbiAgICAgICAgcGFyZW50SW5qZWN0b3I6IEluamVjdG9yXHJcbiAgICApOiBPYnNlcnZhYmxlPENvbXBvbmVudFJlZjxhbnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGNtLmdldENvbXBvbmVudEJ5U2VsZWN0b3Ioc2VsZWN0b3IsIG1vZHVsZU5hbWUsIHBhcmVudEluamVjdG9yKTtcclxuICAgIH1cclxuICAgIGxvYWRKcyQocGF0aCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb20oXHJcbiAgICAgICAgICAgIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICAgICAgICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpO1xyXG4gICAgICAgICAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJywgcGF0aCk7XHJcbiAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB9LCA1MDAwKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIFJlcG9ydEV4ZWN1dGUocmVwb3J0TmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxNb0ZvclJlcG9ydE1vZGVsPiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5SZXBvcnRFeGVjdXRlUHJvbWlzZShyZXBvcnROYW1lKSk7XHJcbiAgICB9XHJcbiAgICBSZXBvcnRFeGVjdXRlUHJvbWlzZShyZXBvcnROYW1lOiBzdHJpbmcpOiBQcm9taXNlPE1vRm9yUmVwb3J0TW9kZWw+IHtcclxuICAgICAgICBjb25zdCB1bHZQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIEZsYWdzOiB7XHJcbiAgICAgICAgICAgICAgICBEYXRhOiAnVHJ1ZScsXHJcbiAgICAgICAgICAgICAgICBFeHRyYTogJ0ZhbHNlJyxcclxuICAgICAgICAgICAgICAgIFNlYXJjaDogJ0ZhbHNlJyxcclxuICAgICAgICAgICAgICAgIFZpZXc6ICdGYWxzZSdcclxuICAgICAgICAgICAgICAgIC8vIEdlbmVyYWw6XCJGYWxzZVwiLCAvLyB1bHZtYWluY3RybCBkb2VzIG5vdCBjcmFldGUgdWkgY29udHJvbCByYWlzZSBlcnJvclxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBSZXBvcnROYW1lOiByZXBvcnROYW1lLFxyXG4gICAgICAgICAgICBVc2FnZUVudW06ICdTeXN0ZW1Db250YWluZXInXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8TW9Gb3JSZXBvcnRNb2RlbD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBCYXJzYUFwaS5Cdy5FeGVjdXRlUmVwb3J0KFxyXG4gICAgICAgICAgICAgICAgeyB1bHZQYXJhbXMgfSxcclxuICAgICAgICAgICAgICAgIChyZXN1bHQ6IFJlcG9ydE1vZGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYWRkRm9ybVBhbmVsQ3RybHIoaWQsIGZvcm1wYW5lbEN0cmxyOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1QYW5lbHNbaWRdID0gZm9ybXBhbmVsQ3RybHI7XHJcbiAgICB9XHJcbiAgICBzZXRVc2VyTG9naW5TdGF0dXMoc3RhdHVzOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbG9nZ2VkSW5Tb3VyY2UubmV4dChzdGF0dXMpO1xyXG4gICAgfVxyXG4gICAgZXh0cmFjdEFsbFBhZ2VzKHBvcnRhbERhdGE6IFBvcnRhbERhdGFNb2RlbCB8IG51bGwpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXBvcnRhbERhdGEpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwb3J0YWxEYXRhLkNoaWxkUGFnZUxpc3QuTW9EYXRhTGlzdC5mb3JFYWNoKChwYWdlRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkUGFnZXMocGFnZURhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZXh0cmFjdEFsbFBhZ2VzX09sZChwb3J0YWxEYXRhOiBQb3J0YWxEYXRhTW9kZWwgfCBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFwb3J0YWxEYXRhKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX3JvdXRlci5jb25maWc7XHJcbiAgICAgICAgcG9ydGFsRGF0YS5DaGlsZFBhZ2VMaXN0Lk1vRGF0YUxpc3QuZm9yRWFjaCgocGFnZURhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcGF0aCA9IHBhZ2VEYXRhLlJvdXRlLnJlcGxhY2UoJy8nLCAnJyk7XHJcbiAgICAgICAgICAgIGNvbmZpZy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVSb3V0ZShwYWdlRGF0YSwgcGF0aCwgcGFnZURhdGEuSGFzQXV0aG9yaXplLCBwYWdlRGF0YS5QYWdlTW9kdWxlPy4kQ2FwdGlvbiwgbnVsbCwgbnVsbClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHBhZ2VEYXRhLklzRGVmYXVsdFJvdXRlIHx8IHBhZ2VEYXRhLklzRGVmYXVsdFJvdXRlID09PSAnVHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFJvdXRlID0gcGF0aDtcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5wdXNoKHRoaXMuY3JlYXRlUm91dGUocGFnZURhdGEsICcnLCBmYWxzZSwgcG9ydGFsRGF0YS5QYWdlTW9kdWxlPy4kQ2FwdGlvbiwgcGF0aCwgbnVsbCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkUGFnZXMocGFnZURhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX3JvdXRlci5yZXNldENvbmZpZyhjb25maWcpO1xyXG4gICAgICAgIGlmICh0aGlzLl9sb2NhdGlvbi5wYXRoKCkgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbdGhpcy5kZWZhdWx0Um91dGVdKTtcclxuICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnJ10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGlzLnJvdXRlSW5pdGlhbGl6ZWQoKTtcclxuICAgIH1cclxuICAgIHNzb0xvZ2luKCk6IHZvaWQge1xyXG4gICAgICAgIEFqYXhIZWxwZXIuQWpheFJlcXVlc3QoXHJcbiAgICAgICAgICAgICcvYXBpL2Jhc2Uvc3NvbG9naW4nLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBmYWxzZSxcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnZXJyb3IgaW4gc3NvIGxvZ2luLicpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBudWxsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHNzb0xvZ291dCgpOiB2b2lkIHtcclxuICAgICAgICBBamF4SGVscGVyLkFqYXhSZXF1ZXN0KFxyXG4gICAgICAgICAgICAnL2FwaS9iYXNlL3Nzb2xvZ291dCcsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdlcnJvciBpbiBzc28gbG9nb3V0LicpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBudWxsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGFkZENoaWxkUGFnZXMocGFnZURhdGE6IFBhZ2VEYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhZ2VzLnB1c2gocGFnZURhdGEpO1xyXG4gICAgICAgIGlmICghcGFnZURhdGEuQ2hpbGRQYWdlTGlzdD8uTW9EYXRhTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFnZURhdGEuQ2hpbGRQYWdlTGlzdC5Nb0RhdGFMaXN0LmZvckVhY2goKGNoaWxkUGFnZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkUGFnZXMoY2hpbGRQYWdlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qIGVzbGludC1kaXNhYmxlICovXHJcbiAgICBjcmVhdGVSb3V0ZShwYWdlRGF0YSwgcGF0aCwgaGFzQXV0aG9yaXplZCwgbW9kdWxlTmFtZSwgcmVkaXJlY3RUbywgaXNEeW5hbWljUm91dGUpOiBSb3V0ZSB7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgY3JlYXRlUm91dGUyKFxyXG4gICAgICAgIHBhZ2VEYXRhLFxyXG4gICAgICAgIHBhdGgsXHJcbiAgICAgICAgaGFzQXV0aG9yaXplZCxcclxuICAgICAgICBtb2R1bGVOYW1lLFxyXG4gICAgICAgIHJlZGlyZWN0VG86IHN0cmluZyB8IG51bGwgPSBudWxsLFxyXG4gICAgICAgIGlzRHluYW1pY1JvdXRlOiBib29sZWFuID0gZmFsc2VcclxuICAgICk6IFJvdXRlIHtcclxuICAgICAgICBsZXQgbW9kdWxlUGF0aDogc3RyaW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuR2V0S2ViYWJDYXNlKG1vZHVsZU5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHVtZCA9IG1vZHVsZU5hbWU7XHJcbiAgICAgICAgbW9kdWxlUGF0aCA9IG1vZHVsZVBhdGguc3Vic3RyaW5nKDEsIG1vZHVsZVBhdGgubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBkeW5hbWljUm91dGU6IFJvdXRlID0ge307XHJcbiAgICAgICAgZHluYW1pY1JvdXRlLnBhdGggPSBwYXRoO1xyXG4gICAgICAgIGR5bmFtaWNSb3V0ZS5kYXRhID0geyBwYWdlRGF0YSB9O1xyXG4gICAgICAgIGlmICghaXNEeW5hbWljUm91dGUpIHtcclxuICAgICAgICAgICAgZHluYW1pY1JvdXRlLnJlc29sdmUgPSB7XHJcbiAgICAgICAgICAgICAgICBwYWdlRGF0YTogUG9ydGFsUGFnZVJlc29sdmVyXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXRoID09PSAnJykge1xyXG4gICAgICAgICAgICBkeW5hbWljUm91dGUucGF0aE1hdGNoID0gJ2Z1bGwnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVkaXJlY3RUbykge1xyXG4gICAgICAgICAgICBkeW5hbWljUm91dGUucmVkaXJlY3RUbyA9IHJlZGlyZWN0VG87XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGhhc0F1dGhvcml6ZWQpIHtcclxuICAgICAgICAgICAgICAgIGR5bmFtaWNSb3V0ZS5jYW5BY3RpdmF0ZSA9IFtBdXRoR3VhcmRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGR5bmFtaWNSb3V0ZS5sb2FkQ2hpbGRyZW4gPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXM6IExpYnJhcnlEZXBlbmVjeVtdID0gSlNPTi5wYXJzZShwYWdlRGF0YS5EZXBlbmRlbmNpZXMpOyAvLyBldmFsKHBhZ2VEYXRhLkRlcGVuZGVuY2llcyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlTGlicmFyeSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBtb2R1bGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGtlYmFiTmFtZTogbW9kdWxlUGF0aCxcclxuICAgICAgICAgICAgICAgICAgICB1bWQsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0QXM6IFttb2R1bGVOYW1lXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyQgPSBmcm9tKGRlcGVuZGVuY2llcykucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBjb25jYXRNYXAoKGRlcGVuZGVuY3k6IExpYnJhcnlEZXBlbmVjeSkgPT4gdGhpcy5jb21waWxlTW9kdWxlKGRlcGVuZGVuY3kpKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JrSm9pbihbZGVwZW5kZW5jaWVzJF0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuZ2V0TW9kdWxlKHBhZ2VMaWJyYXJ5KSksXHJcbiAgICAgICAgICAgICAgICAgICAgbWFwKChtb2R1bGVzKSA9PiBtb2R1bGVzW21vZHVsZU5hbWUgKyAnTW9kdWxlJ10pLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnJvdXRlSW5pdGlhbGl6ZWQoKSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZHluYW1pY1JvdXRlO1xyXG4gICAgfVxyXG4gICAgcm91dGVJbml0aWFsaXplZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJvdXRlSW5pdGlhbGl6ZWRTb3VyY2UubmV4dCh0cnVlKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBsb2dpbkJ5QW5vbnltb3VzKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHRoaXMubG9naW5Mb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5sb2dpblBvcnRhbCgpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgocmVzdWx0OiBMb2dpblJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5kZWJ1ZyhyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShCYXJzYUFwaS5Mb2dpbkFjdGlvbi50b2tlbjJTdG9yYWdlS2V5LCByZXN1bHQuZGF0YS5zdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2luTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldFBhZ2VEYXRhKHVybDogc3RyaW5nLCBpc1Jvb3Q6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPFBhZ2VEYXRhTW9kZWwgfCBudWxsPiB7XHJcbiAgICAgICAgaWYgKGlzUm9vdCB8fCB1cmwgPT09ICcnIHx8IHVybCA9PT0gJy8nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvcnRhbERhdGEkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCc/JykgPiAtMSkge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyKDAsIHVybC5pbmRleE9mKCc/JykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jYWNoZWRQYWdlRGF0YVt1cmxdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlZFBhZ2VEYXRhW3VybF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhZ2VEYXRhID0gdGhpcy5maW5kUGFnZUJ5Um91dGUodXJsKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYWNoZWRQYWdlRGF0YVt1cmxdID0gdGhpcy5hcGlTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5sb2FkUG9ydGFsUGFnZURhdGEocGFnZURhdGE/LklkLCB0aGlzLnBvcnRhbERhdGFTb3VyY2UuZ2V0VmFsdWUoKT8uQ2hpbGRQYWdlTGlzdC5UeXBlRGVmSWQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChwYWdlTW8pID0+IHBhZ2VNby5EYXRhLk1vKSxcclxuICAgICAgICAgICAgICAgIHRhcCgocGFnZU1vKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGlsZFJvdXRlKHBhZ2VNbywgcGFnZU1vLkNoaWxkUGFnZUxpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGRQYWdlcyhwYWdlTW8pO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBwdWJsaXNoUmVwbGF5KDEpLFxyXG4gICAgICAgICAgICAgICAgcmVmQ291bnQoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIC8vIHRoaXMuY2FjaGVkUGFnZURhdGFbdXJsXSA9IHRoaXMucG9ydGFsRGF0YSQucGlwZShcclxuICAgICAgICAvLyAgIGZpbHRlcigocG9ydGFsRGF0YSkgPT4gcG9ydGFsRGF0YSAhPSBudWxsKSxcclxuICAgICAgICAvLyAgIG1hcCgocG9ydGFsRGF0YSkgPT4gKSxcclxuICAgICAgICAvLyAgIGNvbmNhdE1hcCgocGFnZURhdGEpID0+IHtcclxuICAgICAgICAvLyAgICAgcmV0dXJuXHJcbiAgICAgICAgLy8gICB9KSxcclxuXHJcbiAgICAgICAgLy8gICB0YXAocGFnZURhdGE9Pnt9KVxyXG4gICAgICAgIC8vICk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUGFnZURhdGFbdXJsXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZXNvbHZlRGF0YShyb3V0ZVBhZ2VEYXRhKTogT2JzZXJ2YWJsZTxQYWdlRGF0YU1vZGVsIHwgbnVsbD4ge1xyXG4gICAgICAgIC8vIGNvbnN0IHBhZ2VEYXRhID0gdGhpcy5wYWdlcy5maW5kKChjKSA9PiBjLlJvdXRlID09PSByb3V0ZVBhZ2VEYXRhLlJvdXRlICYmIGMuTW9kdWxlID09PSByb3V0ZVBhZ2VEYXRhLk1vZHVsZSk7XHJcbiAgICAgICAgY29uc3QgcGFnZURhdGEgPSB0aGlzLnBhZ2VzLmZpbmQoKGMpID0+IGMuUm91dGUgPT09IHJvdXRlUGFnZURhdGEuUm91dGUpO1xyXG4gICAgICAgIGlmICghcGFnZURhdGEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpZCA9IHBhZ2VEYXRhLklkO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jYWNoZWRQYWdlRGF0YVtpZF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUGFnZURhdGFbaWRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhY2hlZFBhZ2VEYXRhW2lkXSA9IHRoaXMuYXBpU2VydmljZVxyXG4gICAgICAgICAgICAubG9hZFBvcnRhbFBhZ2VEYXRhKGlkLCB0aGlzLnBvcnRhbERhdGFTb3VyY2UuZ2V0VmFsdWUoKT8uQ2hpbGRQYWdlTGlzdC5UeXBlRGVmSWQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChwYWdlTW8pID0+IHBhZ2VNby5EYXRhLk1vKSxcclxuICAgICAgICAgICAgICAgIHRhcCgocGFnZU1vKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGlsZFJvdXRlKHBhZ2VNbywgcGFnZU1vLkNoaWxkUGFnZUxpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGRQYWdlcyhwYWdlTW8pO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBwdWJsaXNoUmVwbGF5KDEpLFxyXG4gICAgICAgICAgICAgICAgcmVmQ291bnQoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIC8vIHRoaXMuY2FjaGVkUGFnZURhdGFbdXJsXSA9IHRoaXMucG9ydGFsRGF0YSQucGlwZShcclxuICAgICAgICAvLyAgIGZpbHRlcigocG9ydGFsRGF0YSkgPT4gcG9ydGFsRGF0YSAhPSBudWxsKSxcclxuICAgICAgICAvLyAgIG1hcCgocG9ydGFsRGF0YSkgPT4gKSxcclxuICAgICAgICAvLyAgIGNvbmNhdE1hcCgocGFnZURhdGEpID0+IHtcclxuICAgICAgICAvLyAgICAgcmV0dXJuXHJcbiAgICAgICAgLy8gICB9KSxcclxuXHJcbiAgICAgICAgLy8gICB0YXAocGFnZURhdGE9Pnt9KVxyXG4gICAgICAgIC8vICk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUGFnZURhdGFbaWRdO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZENoaWxkUm91dGUocGFnZU1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBDaGlsZFBhZ2VMaXN0OiBNb0ZvclJlcG9ydE1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgYWRkQ2hpbGRSb3V0ZV9PbGQocGFnZU1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBDaGlsZFBhZ2VMaXN0OiBNb0ZvclJlcG9ydE1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFDaGlsZFBhZ2VMaXN0Py5Nb0RhdGFMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5fcm91dGVyLmNvbmZpZztcclxuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gcGFnZU1vLlJvdXRlLnJlcGxhY2UoJy8nLCAnJyk7XHJcbiAgICAgICAgY29uc3QgcGFyZW50Um91dGUgPSBjb25maWcuZmluZCgoYykgPT4gKGMucGF0aCA9IHBhcmVudFBhdGgpKTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbjogUm91dGVbXSA9IFtdO1xyXG4gICAgICAgIGlmIChwYXJlbnRSb3V0ZSkge1xyXG4gICAgICAgICAgICBDaGlsZFBhZ2VMaXN0Lk1vRGF0YUxpc3QuZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBjaGlsZC5Sb3V0ZS5yZXBsYWNlKCcvJywgJycpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyb3V0ZSA9IHRoaXMuY3JlYXRlUm91dGUoXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZC5IYXNBdXRob3JpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuUGFnZU1vZHVsZT8uJENhcHRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZHJvdXRlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIGRlYnVnZ2VyO1xyXG5cclxuICAgICAgICAgICAgKHBhcmVudFJvdXRlIGFzIGFueSkuX2xvYWRlZENvbmZpZy5yb3V0ZXNbMF0uY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3JvdXRlci5yZXNldENvbmZpZyhjb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZFBvcnRhbERhdGFfT2xkMSgpOiBPYnNlcnZhYmxlPFBvcnRhbERhdGFNb2RlbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UubG9hZFBvcnRhbChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbElkLCBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbFR5cGVEZWZJZCkucGlwZShcclxuICAgICAgICAgICAgdGFwKChwb3J0YWxTZXR0aW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0YWxEYXRhID0gcG9ydGFsU2V0dGluZy5EYXRhLk1vO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHRyYWN0QWxsUGFnZXMocG9ydGFsRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcnRhbERhdGFTb3VyY2UubmV4dChwb3J0YWxEYXRhKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiBmcm9tKHRoaXMubG9hZFN5c3RlbSgpKSksXHJcbiAgICAgICAgICAgIHRhcCgoYWxsKSA9PiB0aGlzLmRhdGVUZXh0U291cmNlLm5leHQoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5EYXRlVGV4dCkpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBsb2FkUG9ydGFsRGF0YVN5bmNfT2xkMigpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBwb3J0YWxTZXR0aW5nID0gdGhpcy5hcGlTZXJ2aWNlLmxvYWRQb3J0YWxTeW5jKFxyXG4gICAgICAgICAgICBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbElkLFxyXG4gICAgICAgICAgICBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbFR5cGVEZWZJZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcG9ydGFsRGF0YSA9IHBvcnRhbFNldHRpbmcuRGF0YS5NbztcclxuXHJcbiAgICAgICAgdGhpcy5leHRyYWN0QWxsUGFnZXMocG9ydGFsRGF0YSk7XHJcblxyXG4gICAgICAgIHRoaXMucG9ydGFsRGF0YVNvdXJjZS5uZXh0KHBvcnRhbERhdGEpO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRTeXN0ZW0oKTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRlVGV4dFNvdXJjZS5uZXh0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuRGF0ZVRleHQpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGxvYWRQb3J0YWxEYXRhU3luYygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YT8uZXJyb3I/LnVzZXJNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcG9ydGFsU2V0dGluZ1N0ciA9IEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kKCdHZXRQb3J0YWwnLCBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbElkKTtcclxuICAgICAgICBjb25zdCBwb3J0YWxTZXR0aW5nID0gQmFyc2FBcGkuRXh0LmRlY29kZShwb3J0YWxTZXR0aW5nU3RyKTtcclxuICAgICAgICBjb25zdCBwb3J0YWxEYXRhOiBQYWdlRGF0YU1vZGVsID0gcG9ydGFsU2V0dGluZztcclxuICAgICAgICBpZiAocG9ydGFsRGF0YSkge1xyXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0UGFnZSA9IHBvcnRhbERhdGEuQ2hpbGRQYWdlTGlzdC5Nb0RhdGFMaXN0LmZpbmQoKGMpID0+IGMuSXNEZWZhdWx0Um91dGUgPT09ICdUcnVlJyk7XHJcbiAgICAgICAgICAgIGxldCBjb25maWdSb3V0ZSA9IHRoaXMuX3JvdXRlci5jb25maWc7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZVBhZ2VkOiBSb3V0ZVtdID0gW107XHJcbiAgICAgICAgICAgIGNvbmZpZ1JvdXRlLmZvckVhY2goKGMsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3V0ZSA9ICcvJyArIGMucGF0aDtcclxuICAgICAgICAgICAgICAgIGlmIChjLnBhdGggIT09ICcnICYmIHBvcnRhbERhdGEuQ2hpbGRQYWdlTGlzdC5Nb0RhdGFMaXN0LmZpbmRJbmRleCgoZCkgPT4gZC5Sb3V0ZSA9PT0gcm91dGUpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVBhZ2VkLnB1c2goYyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCBwYXRoVG9SZW1vdmUgPSByZW1vdmVQYWdlZC5tYXAoKGQpID0+IGQucGF0aCk7XHJcbiAgICAgICAgICAgIGNvbmZpZ1JvdXRlID0gY29uZmlnUm91dGUuZmlsdGVyKChjKSA9PiBwYXRoVG9SZW1vdmUuaW5kZXhPZihjLnBhdGgpID09PSAtMSk7XHJcbiAgICAgICAgICAgIGlmIChkZWZhdWx0UGFnZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFBhZ2VSb3V0ZSA9IGRlZmF1bHRQYWdlLlJvdXRlLnJlcGxhY2UoJy8nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0UGF0aCA9IGNvbmZpZ1JvdXRlLmZpbmQoKGMpID0+IGMucGF0aCA9PT0gJycpO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdFBhdGggJiYgKGRlZmF1bHRQYXRoLnJlZGlyZWN0VG8gPSBkZWZhdWx0UGFnZVJvdXRlKTtcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1JvdXRlLnB1c2goeyBwYXRoOiAnKionLCByZWRpcmVjdFRvOiBkZWZhdWx0UGFnZVJvdXRlIH0pO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc3Qgbm90Rm91bmRQYXRoID0gY29uZmlnUm91dGUuZmluZCgoYykgPT4gYy5wYXRoID09PSAnKionKTtcclxuICAgICAgICAgICAgICAgIC8vIG5vdEZvdW5kUGF0aCAmJiAobm90Rm91bmRQYXRoLnJlZGlyZWN0VG8gPSBkZWZhdWx0UGFnZS5Sb3V0ZS5yZXBsYWNlKCcvJywgJycpKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yb3V0ZXIucmVzZXRDb25maWcoY29uZmlnUm91dGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXh0cmFjdEFsbFBhZ2VzKHBvcnRhbERhdGEgYXMgUG9ydGFsRGF0YU1vZGVsKTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3J0YWxEYXRhU291cmNlLm5leHQocG9ydGFsRGF0YSBhcyBQb3J0YWxEYXRhTW9kZWwpO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGVUZXh0U291cmNlLm5leHQoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5EYXRlVGV4dCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgU2hvd0Zvcm0oZTogeyBtbzogTWV0YW9iamVjdERhdGFNb2RlbDsgbmFtYTogc3RyaW5nOyBhZnRlclJlYWR5PzogKGU6IGFueSkgPT4gdm9pZCB9KTogdm9pZCB7XHJcbiAgICAgICAgQmFyc2FBcGkuQncuRm9ybS5TaG93KHtcclxuICAgICAgICAgICAgTW86IGUubW8sXHJcbiAgICAgICAgICAgIE1vQ29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgVmlld05hbWU6IGUubmFtYVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBFdmVudEhhbmRsZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBBZnRlclJlYWR5OiBmdW5jdGlvbiAoc2VuZGVyLCBlZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vZG8gc29tZXRoaW5nIGhlcmVcclxuICAgICAgICAgICAgICAgICAgICBlLmFmdGVyUmVhZHk/LihlZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgbG9naW5Sb3V0ZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3J0YWxEYXRhJC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKHBvcnRhbERhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ2luUGFnZSA9IHBvcnRhbERhdGE/LkNoaWxkUGFnZUxpc3QuTW9EYXRhTGlzdC5maW5kKChjKSA9PiBjLklzTG9naW5Sb3V0ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9naW5QYWdlPy5Sb3V0ZSB8fCAnbG9naW4nO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgRXhlY3V0ZU5vdGlmaWNhdGlvbkFjdGlvbihpZDogc3RyaW5nLCBhY3Rpb25UaXRsZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFtpZCwgYWN0aW9uVGl0bGVdLFxyXG4gICAgICAgICAgICBNZXRob2Q6ICdFeGVjdXRlTm90aWZpY2F0aW9uQWN0aW9uJyxcclxuICAgICAgICAgICAgU3VjY2Vzc0ZuOiAoZToge1xyXG4gICAgICAgICAgICAgICAgTW86IE1ldGFvYmplY3REYXRhTW9kZWw7XHJcbiAgICAgICAgICAgICAgICBEeW5hbWljQ29tbWFuZElkOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBTaG93Rm9ybVNldHRpbmc6IHsgTW9JZDogc3RyaW5nOyBWaWV3TmFtZTogc3RyaW5nIH07XHJcbiAgICAgICAgICAgIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVB1c2hBY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIGlmIChlLkR5bmFtaWNDb21tYW5kSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBFeGVjdXRlRHluYW1pY0NvbW1hbmQoeyBJZDogZS5EeW5hbWljQ29tbWFuZElkIH0sIGUuTW8pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLlNob3dGb3JtU2V0dGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgTW9JZCwgVmlld05hbWUgfSA9IGUuU2hvd0Zvcm1TZXR0aW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gQmFyc2FBcGkuQncuRm9ybS5TaG93KHsgTW9JZCwgTW9Db250ZXh0OiB7IFZpZXdOYW1lIH0gfSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBGYWlsRm46IChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVQdXNoQWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBsb2FkVXNlclBvcnRhbFNldHRpbmcoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKEJhcnNhQXBpLkxvZ2luRm9ybURhdGE/LmVycm9yPy51c2VyTWVzc2FnZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVsdlBhcmFtcyA9IHtcclxuICAgICAgICAgICAgRmxhZ3M6IHtcclxuICAgICAgICAgICAgICAgIERhdGE6ICdUcnVlJyxcclxuICAgICAgICAgICAgICAgIEV4dHJhOiAnRmFsc2UnLFxyXG4gICAgICAgICAgICAgICAgU2VhcmNoOiAnRmFsc2UnLFxyXG4gICAgICAgICAgICAgICAgVmlldzogJ0ZhbHNlJ1xyXG4gICAgICAgICAgICAgICAgLy8gR2VuZXJhbDpcIkZhbHNlXCIsIC8vIHVsdm1haW5jdHJsIGRvZXMgbm90IGNyYWV0ZSB1aSBjb250cm9sIHJhaXNlIGVycm9yXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFJlcG9ydE5hbWU6ICdf2KrZhti42YrZhdin2Kpf2b7Yp9mK2Ydf2b7ZiNix2KrYp9mEJyxcclxuICAgICAgICAgICAgVXNhZ2VFbnVtOiAnU3lzdGVtQ29udGFpbmVyJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgQmFyc2FBcGkuQncuRXhlY3V0ZVJlcG9ydChcclxuICAgICAgICAgICAgeyB1bHZQYXJhbXMgfSxcclxuICAgICAgICAgICAgKHJlc3VsdDogUmVwb3J0TW9kZWwpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vbGlzdCA9IHJlc3VsdC5EYXRhLk1vRGF0YUxpc3Q7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyUG9ydGFsU2V0dGluZzogUmVjb3JkPHN0cmluZywgTWV0YW9iamVjdERhdGFNb2RlbD4gPSB7fTtcclxuICAgICAgICAgICAgICAgIG1vbGlzdC5mb3JFYWNoKChtbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtby5Jbmhlcml0YW5jZSAmJiBtby5Jbmhlcml0YW5jZS4kVHlwZURlZk5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlclBvcnRhbFNldHRpbmdbbW8uSW5oZXJpdGFuY2UuJFR5cGVEZWZOYW1lXSA9IG1vLkluaGVyaXRhbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXNlclBvcnRhbFNldHRpbmdzJC5uZXh0KHVzZXJQb3J0YWxTZXR0aW5nKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xyXG4gICAgICAgIC8vICAgICBQYXJhbWV0ZXJzOiBbXSxcclxuICAgICAgICAvLyAgICAgTWV0aG9kOiAnR2V0VXNlclBvcnRhbFNldHRpbmdzJyxcclxuICAgICAgICAvLyAgICAgU3VjY2Vzc0ZuOiAodXNlclBvcnRhbFNldHRpbmc6IE1ldGFvYmplY3REYXRhTW9kZWwpID0+IHtcclxuICAgICAgICAvLyAgICAgfSxcclxuICAgICAgICAvLyAgICAgRmFpbEZuOiAoZSkgPT4ge1xyXG4gICAgICAgIC8vICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKGUpO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICB9XHJcbiAgICBsb2FkU2VydmVyU3RhcnR1cERhdGEoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYWpheEhlbHBlciA9IHR5cGVvZiBBamF4SGVscGVyMiA9PT0gJ3VuZGVmaW5lZCcgPyBBamF4SGVscGVyIDogQWpheEhlbHBlcjI7XHJcbiAgICAgICAgICAgIGFqYXhIZWxwZXIuQWpheFJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAnL2FwaS9iYXNlL1NlcnZlclN0YXJ0dXBEYXRhJyxcclxuICAgICAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YVRleHQgPSByZXNwb25zZS5yZXNwb25zZVRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVRleHQgPSBkYXRhVGV4dC5yZXBsYWNlKC8nL2csICdcIicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUZXh0ID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuUmVwbGFjZUFyYWJpY0NoYXJjaHRlcihkYXRhVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgQmFyc2FBcGkuTG9naW5Gb3JtLlBvcnRhbEluaXRpYWxpemUoZGF0YVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc0Fub255bW91cyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEJhcnNhQXBpLkxvZ2luRm9ybURhdGE/LmVycm9yPy51c2VyTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFyc2FBcGkuQncuTXNnLkVycm9yKEJhcnNhQXBpLkxvZ2luRm9ybURhdGE/LmVycm9yPy51c2VyTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXJzYUFwaS5Cdy5Nc2cuRXJyb3IoJ9in2YXaqdin2YYg2YjYsdmI2K8g2KjYpyDaqdin2LHYqNixINm+2YjYsdiq2KfZhCDZiNis2YjYryDZhtiv2KfYsdivLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc1NlcnZpY2VEZXNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX3JvdXRlci5jb25maWc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1swXS5yZWRpcmVjdFRvID0gJ3NlcnZpY2VkZXNrJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JvdXRlci5yZXNldENvbmZpZyhjb25maWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0QWZ0ZXJMb2dpbkZvcm1EYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ2Vycm9yIGluIGdldCBzZXJ2ZXIgc3RhcnR1cCBkYXRhLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBudWxsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgU2hvd0Zvcm1QYW5lbENvbnRyb2woXHJcbiAgICAgICAgZm9ybXBhbmVsQ3RybHI6IGFueSxcclxuICAgICAgICByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgZGlhbG9nQ29tcG9uZW50OiBUeXBlPGFueT4sXHJcbiAgICAgICAgaXNQYWdlOiBib29sZWFuLFxyXG4gICAgICAgIHZjcjogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICBpc1JlbG9hZDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWZvcm1wYW5lbEN0cmxyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZm9ybSBwYW5lbCBjb250cm9sZXIgaXMgdW5kZWZpbmVkIScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vID0gZm9ybXBhbmVsQ3RybHIuTW87XHJcbiAgICAgICAgY29uc3QgaGVhZGVyTGF5b3V0ID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoZm9ybXBhbmVsQ3RybHIsICdTZXR0aW5nLlZpZXcuSGVhZGVyTGF5b3V0JywgbnVsbCk7XHJcbiAgICAgICAgbGV0IGlzTW9kYWwgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShmb3JtcGFuZWxDdHJsciwgJ1NldHRpbmcuVmlldy5FeHRyYUpzb25Qcm9wLk1vZGFsJywgZmFsc2UpO1xyXG4gICAgICAgIGlzTW9kYWwgPVxyXG4gICAgICAgICAgICBpc01vZGFsIHx8XHJcbiAgICAgICAgICAgIEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGZvcm1wYW5lbEN0cmxyLCAnU2V0dGluZy5WaWV3LkN1c3RvbVVpLlBhcmFtZXRlcnMuSXNNb2RhbCcsIGZhbHNlKTtcclxuICAgICAgICBjb25zdCBtb2RhbFNldHRpbmcgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcclxuICAgICAgICAgICAgZm9ybXBhbmVsQ3RybHIsXHJcbiAgICAgICAgICAgICdTZXR0aW5nLlZpZXcuQ3VzdG9tVWkuUGFyYW1ldGVycy5Nb2RhbFNldHRpbmcnLFxyXG4gICAgICAgICAgICBudWxsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAobW9kYWxTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgIGlzTW9kYWwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3JtcGFuZWxDdHJsci5TZXR0aW5nLklzTW9kYWwgPSBpc01vZGFsO1xyXG4gICAgICAgIGZvcm1wYW5lbEN0cmxyLklzTW9kYWwgPSBpc01vZGFsO1xyXG4gICAgICAgIGNvbnN0IGJyZWFkQ3J1bWIgPSBnZXRIZWFkZXJWYWx1ZShoZWFkZXJMYXlvdXQ/LkJyZWFkQ3J1bWIpO1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge1xyXG4gICAgICAgICAgICBpZDogbW8uJFN0YXRlID09PSAnTmV3JyA/ICcwJyA6IG1vLklkLFxyXG4gICAgICAgICAgICB0eWlkOiBtby4kVHlwZURlZklkLFxyXG4gICAgICAgICAgICB0eWNwOiBtby4kQ2FwdGlvbiA/IG1vLiRDYXB0aW9uIDogbnVsbCxcclxuICAgICAgICAgICAgcmVwaWQ6IG1vLiRSZXBvcnRJZCxcclxuICAgICAgICAgICAgdmlkOiBmb3JtcGFuZWxDdHJscj8uU2V0dGluZz8uVmlldz8uVHlwZVZpZXdJZCxcclxuICAgICAgICAgICAgYmM6IGJyZWFkQ3J1bWIgPyBicmVhZENydW1iIDogbW8uJFN0YXRlID09PSAnTmV3JyA/IG1vLiRUeXBlRGVmTmFtZSA6IG1vLiRDYXB0aW9uXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBpZCA9IGdldFVuaXF1ZUlkKDQpO1xyXG4gICAgICAgIHRoaXMuYWRkRm9ybVBhbmVsQ3RybHIoaWQsIGZvcm1wYW5lbEN0cmxyKTtcclxuICAgICAgICBpZiAoaXNNb2RhbCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0Zvcm0oXHJcbiAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ucXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybXBhbmVsQ3RybHJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB2Y3JcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHsgZm9ybVBhbmVsQ3RybHJJZDogaWQgfTtcclxuICAgICAgICAgICAgaWYgKGlzUGFnZSkge1xyXG4gICAgICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvcm0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsZXRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogWydzaG93JywgeyAuLi5xdWVyeVBhcmFtcywgZm9ybVBhbmVsQ3RybHJJZDogaWQsIGlzRmlyc3Q6IHRydWUgfV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogaXNSZWxvYWRcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3BvcHVwJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW46IFsnc2hvdycsIHsgLi4ucXVlcnlQYXJhbXMsIGZvcm1QYW5lbEN0cmxySWQ6IGlkIH1dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAncHJlc2VydmUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2U6IGlzUmVsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBsb2FkU3lzdGVtKGlkOiBudW1iZXIgPSAwKTogUHJvbWlzZTxQb3J0YWxEYXRhTW9kZWw+IHtcclxuICAgICAgICBpZiAoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YT8uZXJyb3I/LnVzZXJNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhPy5lcnJvcj8udXNlck1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLl9sb2FkU3lzdGVtKFxyXG4gICAgICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3JlbW92ZVB1c2hBY3Rpb24oKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgcHVzaEFjdGlvblN0ciA9IHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKCdwdXNoQWN0aW9uJyk7XHJcbiAgICAgICAgaWYgKHB1c2hBY3Rpb25TdHIpIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZSgncHVzaEFjdGlvbicpO1xyXG4gICAgICAgICAgICBjb25zdCBwdXNoQWN0aW9uID0gSlNPTi5wYXJzZShwdXNoQWN0aW9uU3RyKTtcclxuICAgICAgICAgICAgdGhpcy5fcHVzaEFjdGlvbiQubmV4dChwdXNoQWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9pbml0QWZ0ZXJMb2dpbkZvcm1EYXRhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucnRsU291cmNlLm5leHQoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc1J0bCk7XHJcbiAgICAgICAgdGhpcy5faXNBbm9udW1vdXNTb3VyY2UubmV4dChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzQW5vbnltb3VzKTtcclxuICAgICAgICB0aGlzLnNldFVzZXJMb2dpblN0YXR1cyhCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzVXNlckxvZ2dlZEluKTtcclxuICAgICAgICB0aGlzLl9sb2dnZWRJblNvdXJjZS5uZXh0KHRoaXMuX2xvZ2dlZEluU291cmNlLmdldFZhbHVlKCkgJiYgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc0Fub255bW91cyA9PT0gZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfaW5pdFZpc2liaWxpdHlDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ3Zpc2libGUnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudFZpc2liaWxpdHljaGFuZ2UkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnRWaXNpYmlsaXR5Y2hhbmdlJC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9pbml0U3RhbmRhbG9uZSgpOiB2b2lkIHtcclxuICAgICAgICB3aW5kb3cubWF0Y2hNZWRpYSgnKGRpc3BsYXktbW9kZTogc3RhbmRhbG9uZSknKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpc01hdGNoID0gZS5tYXRjaGVzO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzTWF0Y2gpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YW5kYWxvbmUkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFuZGFsb25lJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfaW5pdFB1c2hBY3Rpb25zKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMudXNlckxvZ2dlZEluJCwgdGhpcy5wdXNoQWN0aW9uJF0pXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgLy8gd2l0aExhdGVzdEZyb20odGhpcy5fcG9ydGFsU2VydmljZS5wdXNoQWN0aW9uJCksXHJcbiAgICAgICAgICAgICAgICAvLyBmaWx0ZXIoKFt1c2VyTG9nZ2VkaW4sIGFjdGlvbl0pID0+IHVzZXJMb2dnZWRpbilcclxuICAgICAgICAgICAgICAgIGZpbHRlcigoW3VzZXJMb2dnZWRpbiwgcHVzaEFjdGlvbl0pID0+IHVzZXJMb2dnZWRpbilcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChbdXNlckxvZ2dlZGluLCBwdXNoQWN0aW9uXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHB1c2hBY3Rpb24gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuRXhlY3V0ZU5vdGlmaWNhdGlvbkFjdGlvbihwdXNoQWN0aW9uLm5vdGlmaWNhdGlvblRhZywgcHVzaEFjdGlvbi5hY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2luaXRMYW5kc2NhcGUoKTogdm9pZCB7XHJcbiAgICAgICAgd2luZG93Lm1hdGNoTWVkaWEoJyhvcmllbnRhdGlvbjogcG9ydHJhaXQpJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNNYXRjaCA9IGUubWF0Y2hlcztcclxuXHJcbiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kZXZpY2VMYW5kc2NhcGUkLm5leHQoZmFsc2UpOyAvLyBwb3J0cmFpdFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNlTGFuZHNjYXBlJC5uZXh0KHRydWUpOyAvLyBsYW5kc2NhcGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBmaW5kUGFnZUJ5Um91dGUodXJsOiBzdHJpbmcpOiBQYWdlRGF0YU1vZGVsIHwgbnVsbCB7XHJcbiAgICAgICAgY29uc3QgZmluZGVkUGFnZSA9IHRoaXMucGFnZXMuZmluZCgoYykgPT4gYy5Sb3V0ZSA9PT0gdXJsKTtcclxuICAgICAgICByZXR1cm4gZmluZGVkUGFnZSB8fCBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXROZ01vZHVsZUZhY3RvcnkobW9kdWxlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgbW9kdWxlTmFtZTogc3RyaW5nKTogTmdNb2R1bGVGYWN0b3J5PGFueT4ge1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZUNsYXNzID0gbW9kdWxlc1ttb2R1bGVOYW1lICsgJ01vZHVsZSddO1xyXG4gICAgICAgIGxldCBtb2R1bGVGYWN0b3J5OiBOZ01vZHVsZUZhY3Rvcnk8YW55PjtcclxuICAgICAgICBpZiAobW9kdWxlQ2xhc3MgaW5zdGFuY2VvZiBOZ01vZHVsZUZhY3RvcnkpIHtcclxuICAgICAgICAgICAgbW9kdWxlRmFjdG9yeSA9IG1vZHVsZUNsYXNzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBpbGVkID0gdGhpcy5jb21waWxlci5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMobW9kdWxlQ2xhc3MpO1xyXG4gICAgICAgICAgICBtb2R1bGVGYWN0b3J5ID0gY29tcGlsZWQubmdNb2R1bGVGYWN0b3J5O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbW9kdWxlRmFjdG9yeTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFJlZ2lzdGVyZWRNb2R1bGVzKHVtZDogc3RyaW5nLCBleHBvcnRBczogc3RyaW5nW10sIG1vZHVsZU5hbWU6IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xyXG4gICAgICAgIGxldCBtb2R1bGVzO1xyXG4gICAgICAgIGlmICh1bWQgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIG1vZHVsZXMgPSB3aW5kb3c7XHJcbiAgICAgICAgICAgIHVtZC5zcGxpdCgnLicpLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlcyAhPT0gdHlwZW9mIHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZXMgPSBtb2R1bGVzW2NdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtb2R1bGVzID0gd2luZG93W21vZHVsZU5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXhwb3J0QXMubGVuZ3RoID4gMCAmJiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGV4cG9ydEFzLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVPbk9iamVjdChjLCAwLCBtb2R1bGVzLCB3aW5kb3cpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZXM7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBMaWJyYXJ5RGVwZW5lY3kge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAga2ViYWJOYW1lOiBzdHJpbmc7XHJcbiAgICB1bWQ6IHN0cmluZztcclxuICAgIGV4cG9ydEFzOiBzdHJpbmdbXTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEJyZWFkQ3J1bWJJbmZvIHtcclxuICAgIGxhYmVsOiBzdHJpbmc7XHJcbiAgICB1cmw6IHN0cmluZztcclxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcclxufVxyXG4iXX0=
|