angular-odata 0.99.5 → 0.100.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/api.mjs +2 -2
- package/esm2020/lib/models/options.mjs +1 -1
- package/esm2020/lib/options.mjs +4 -3
- package/esm2020/lib/resources/query/builder.mjs +3 -6
- package/esm2020/lib/resources/resource.mjs +22 -61
- package/esm2020/lib/resources/responses/options.mjs +1 -2
- package/esm2020/lib/resources/types/entity-set.mjs +1 -1
- package/esm2020/lib/resources/types/function.mjs +8 -1
- package/esm2020/lib/schema/callable.mjs +6 -2
- package/esm2020/lib/schema/enum-type.mjs +2 -2
- package/esm2020/lib/schema/parsers/callable.mjs +3 -2
- package/esm2020/lib/schema/parsers/enum-type.mjs +6 -5
- package/esm2020/lib/schema/parsers/structured-type.mjs +1 -1
- package/esm2020/lib/schema/structured-type.mjs +1 -1
- package/esm2020/lib/types.mjs +1 -1
- package/fesm2015/angular-odata.mjs +46 -75
- package/fesm2015/angular-odata.mjs.map +1 -1
- package/fesm2020/angular-odata.mjs +46 -75
- package/fesm2020/angular-odata.mjs.map +1 -1
- package/lib/models/options.d.ts +4 -4
- package/lib/options.d.ts +4 -4
- package/lib/resources/resource.d.ts +1 -0
- package/lib/resources/responses/options.d.ts +2 -3
- package/lib/resources/types/entity-set.d.ts +1 -1
- package/lib/resources/types/function.d.ts +3 -0
- package/lib/schema/callable.d.ts +4 -4
- package/lib/schema/enum-type.d.ts +4 -4
- package/lib/schema/parsers/callable.d.ts +9 -7
- package/lib/schema/parsers/enum-type.d.ts +7 -5
- package/lib/schema/parsers/structured-type.d.ts +7 -7
- package/lib/schema/structured-type.d.ts +4 -4
- package/lib/types.d.ts +5 -5
- package/package.json +1 -1
package/esm2020/lib/api.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { NEVER } from 'rxjs';
|
|
|
3
3
|
import { catchError, map } from 'rxjs/operators';
|
|
4
4
|
import { ODataInMemoryCache } from './cache/index';
|
|
5
5
|
import { DEFAULT_VERSION } from './constants';
|
|
6
|
-
import { ODataCollection, ODataModel
|
|
6
|
+
import { ODataCollection, ODataModel } from './models/index';
|
|
7
7
|
import { ODataApiOptions } from './options';
|
|
8
8
|
import { ODataActionResource, ODataBatchResource, ODataEntityResource, ODataEntitySetResource, ODataFunctionResource, ODataMetadataResource, ODataNavigationPropertyResource, ODataPathSegments, ODataQueryOptions, ODataResponse, ODataSingletonResource, } from './resources/index';
|
|
9
9
|
import { EDM_PARSERS, ODataSchema, } from './schema';
|
|
@@ -300,4 +300,4 @@ export class ODataApi {
|
|
|
300
300
|
return this.memo.forType.options[type];
|
|
301
301
|
}
|
|
302
302
|
}
|
|
303
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBYyxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFFTCxlQUFlLEVBQ2YsVUFBVSxHQUVYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1QyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsK0JBQStCLEVBQy9CLGlCQUFpQixFQUNqQixpQkFBaUIsRUFFakIsYUFBYSxFQUViLHNCQUFzQixHQUN2QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFDTCxXQUFXLEVBSVgsV0FBVyxHQUVaLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE9BQU8sRUFHTCxXQUFXLEVBRVgsZ0JBQWdCLEdBQ2pCLE1BQU0sU0FBUyxDQUFDO0FBRWpCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFtQm5CLFlBQVksTUFBaUI7UUErSjdCLHVCQUF1QjtRQUN2QixVQUFVO1FBQ0YsU0FBSSxHQWVSO1lBQ0YsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxFQUFFO2dCQUNSLFVBQVUsRUFBRSxFQUFFO2dCQUNkLFFBQVEsRUFBRSxFQUFFO2dCQUNaLFNB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QUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3hDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBSSxJQUFJLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUM3QixFQUFFLEtBQUssU0FBUyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLElBQUk7b0JBQ25FLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUk7b0JBQ2YsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUNqQjtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBcUMsQ0FBQztJQUM3RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBORVZFUiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT0RhdGFDYWNoZSwgT0RhdGFJbk1lbW9yeUNhY2hlIH0gZnJvbSAnLi9jYWNoZS9pbmRleCc7XG5pbXBvcnQgeyBERUZBVUxUX1ZFUlNJT04gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBNb2RlbE9wdGlvbnMsXG4gIE9EYXRhQ29sbGVjdGlvbixcbiAgT0RhdGFNb2RlbCxcbiAgT0RhdGFNb2RlbE9wdGlvbnMsXG59IGZyb20gJy4vbW9kZWxzL2luZGV4JztcbmltcG9ydCB7IE9EYXRhQXBpT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQge1xuICBPRGF0YUFjdGlvblJlc291cmNlLFxuICBPRGF0YUJhdGNoUmVzb3VyY2UsXG4gIE9EYXRhRW50aXR5UmVzb3VyY2UsXG4gIE9EYXRhRW50aXR5U2V0UmVzb3VyY2UsXG4gIE9EYXRhRnVuY3Rpb25SZXNvdXJjZSxcbiAgT0RhdGFNZXRhZGF0YVJlc291cmNlLFxuICBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlLFxuICBPRGF0YVBhdGhTZWdtZW50cyxcbiAgT0RhdGFRdWVyeU9wdGlvbnMsXG4gIE9EYXRhUmVxdWVzdCxcbiAgT0RhdGFSZXNwb25zZSxcbiAgT0RhdGFTZWdtZW50LFxuICBPRGF0YVNpbmdsZXRvblJlc291cmNlLFxufSBmcm9tICcuL3Jlc291cmNlcy9pbmRleCc7XG5pbXBvcnQge1xuICBFRE1fUEFSU0VSUyxcbiAgT0RhdGFDYWxsYWJsZSxcbiAgT0RhdGFFbnRpdHlTZXQsXG4gIE9EYXRhRW51bVR5cGUsXG4gIE9EYXRhU2NoZW1hLFxuICBPRGF0YVN0cnVjdHVyZWRUeXBlLFxufSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQgeyBPRGF0YUVudGl0eVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2VudGl0eSc7XG5pbXBvcnQge1xuICBBcGlDb25maWcsXG4gIEFwaU9wdGlvbnMsXG4gIE5PTkVfUEFSU0VSLFxuICBQYXJzZXIsXG4gIFBhdGhTZWdtZW50TmFtZXMsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEFwaSBhYnN0cmFjdGlvbiBmb3IgY29uc3VtaW5nIE9EYXRhIHNlcnZpY2VzLlxuICovXG5leHBvcnQgY2xhc3MgT0RhdGFBcGkge1xuICByZXF1ZXN0ZXI/OiAocmVxdWVzdDogT0RhdGFSZXF1ZXN0PGFueT4pID0+IE9ic2VydmFibGU8YW55PjtcbiAgc2VydmljZVJvb3RVcmw6IHN0cmluZztcbiAgbWV0YWRhdGFVcmw6IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBkZWZhdWx0OiBib29sZWFuO1xuICBjcmVhdGlvbjogRGF0ZTtcbiAgLy8gT3B0aW9uc1xuICBvcHRpb25zOiBPRGF0YUFwaU9wdGlvbnM7XG4gIC8vIENhY2hlXG4gIGNhY2hlITogT0RhdGFDYWNoZTtcbiAgLy8gRXJyb3IgSGFuZGxlclxuICBlcnJvckhhbmRsZXI/OiAoZXJyb3I6IGFueSwgY2F1Z2h0OiBPYnNlcnZhYmxlPGFueT4pID0+IE9ic2VydmFibGU8bmV2ZXI+O1xuICAvLyBCYXNlIFBhcnNlcnNcbiAgcGFyc2VyczogeyBbdHlwZTogc3RyaW5nXTogUGFyc2VyPGFueT4gfTtcbiAgLy8gU2NoZW1hc1xuICBzY2hlbWFzOiBPRGF0YVNjaGVtYVtdO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQXBpQ29uZmlnKSB7XG4gICAgdGhpcy5zZXJ2aWNlUm9vdFVybCA9IGNvbmZpZy5zZXJ2aWNlUm9vdFVybDtcbiAgICBpZiAodGhpcy5zZXJ2aWNlUm9vdFVybC5pbmRleE9mKCc/JykgIT0gLTEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlICdzZXJ2aWNlUm9vdFVybCcgc2hvdWxkIG5vdCBjb250YWluIHF1ZXJ5IHN0cmluZy4gUGxlYXNlIHVzZSAncGFyYW1zJyB0byBhZGQgZXh0cmEgcGFyYW1ldGVyc1wiXG4gICAgICApO1xuICAgIGlmICghdGhpcy5zZXJ2aWNlUm9vdFVybC5lbmRzV2l0aCgnLycpKSB0aGlzLnNlcnZpY2VSb290VXJsICs9ICcvJztcbiAgICB0aGlzLm1ldGFkYXRhVXJsID0gYCR7dGhpcy5zZXJ2aWNlUm9vdFVybH0kbWV0YWRhdGFgO1xuICAgIHRoaXMubmFtZSA9IGNvbmZpZy5uYW1lO1xuICAgIHRoaXMudmVyc2lvbiA9IGNvbmZpZy52ZXJzaW9uIHx8IERFRkFVTFRfVkVSU0lPTjtcbiAgICB0aGlzLmRlZmF1bHQgPSBjb25maWcuZGVmYXVsdCB8fCBmYWxzZTtcbiAgICB0aGlzLmNyZWF0aW9uID0gY29uZmlnLmNyZWF0aW9uIHx8IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5vcHRpb25zID0gbmV3IE9EYXRhQXBpT3B0aW9ucyhcbiAgICAgIE9iamVjdC5hc3NpZ24oPEFwaU9wdGlvbnM+eyB2ZXJzaW9uOiB0aGlzLnZlcnNpb24gfSwgY29uZmlnLm9wdGlvbnMgfHwge30pXG4gICAgKTtcblxuICAgIHRoaXMuY2FjaGUgPSAoY29uZmlnLmNhY2hlIGFzIE9EYXRhQ2FjaGUpIHx8IG5ldyBPRGF0YUluTWVtb3J5Q2FjaGUoKTtcbiAgICB0aGlzLmVycm9ySGFuZGxlciA9IGNvbmZpZy5lcnJvckhhbmRsZXI7XG5cbiAgICB0aGlzLnBhcnNlcnMgPSBjb25maWcucGFyc2VycyB8fCBFRE1fUEFSU0VSUztcblxuICAgIHRoaXMuc2NoZW1hcyA9IChjb25maWcuc2NoZW1hcyB8fCBbXSkubWFwKFxuICAgICAgKHNjaGVtYSkgPT4gbmV3IE9EYXRhU2NoZW1hKHNjaGVtYSwgdGhpcylcbiAgICApO1xuICB9XG5cbiAgY29uZmlndXJlKFxuICAgIHNldHRpbmdzOiB7XG4gICAgICByZXF1ZXN0ZXI/OiAocmVxdWVzdDogT0RhdGFSZXF1ZXN0PGFueT4pID0+IE9ic2VydmFibGU8YW55PjtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ZXIgPSBzZXR0aW5ncy5yZXF1ZXN0ZXI7XG4gICAgdGhpcy5zY2hlbWFzLmZvckVhY2goKHNjaGVtYSkgPT4ge1xuICAgICAgc2NoZW1hLmNvbmZpZ3VyZSh7XG4gICAgICAgIHBhcnNlckZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMucGFyc2VyRm9yVHlwZSh0eXBlKSxcbiAgICAgICAgZmluZE9wdGlvbnNGb3JUeXBlOiAodHlwZTogc3RyaW5nKSA9PiB0aGlzLmZpbmRPcHRpb25zRm9yVHlwZSh0eXBlKSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZnJvbUpTT048UCwgUj4oanNvbjoge1xuICAgIHNlZ21lbnRzOiBPRGF0YVNlZ21lbnRbXTtcbiAgICBvcHRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgfSk6IE9EYXRhQWN0aW9uUmVzb3VyY2U8UCwgUj4gfCBPRGF0YUZ1bmN0aW9uUmVzb3VyY2U8UCwgUj47XG4gIGZyb21KU09OPEU+KGpzb246IHtcbiAgICBzZWdtZW50czogT0RhdGFTZWdtZW50W107XG4gICAgb3B0aW9uczogeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG4gIH0pOlxuICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxFPlxuICAgIHwgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZTxFPlxuICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxFPlxuICAgIHwgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxFPjtcbiAgZnJvbUpTT04oanNvbjoge1xuICAgIHNlZ21lbnRzOiBPRGF0YVNlZ21lbnRbXTtcbiAgICBvcHRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgfSkge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gbmV3IE9EYXRhUGF0aFNlZ21lbnRzKGpzb24uc2VnbWVudHMpO1xuICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IE9EYXRhUXVlcnlPcHRpb25zKGpzb24ub3B0aW9ucyk7XG4gICAgc3dpdGNoIChzZWdtZW50cy5sYXN0KCk/Lm5hbWUgYXMgUGF0aFNlZ21lbnROYW1lcykge1xuICAgICAgY2FzZSBQYXRoU2VnbWVudE5hbWVzLmVudGl0eVNldDpcbiAgICAgICAgaWYgKHNlZ21lbnRzLmxhc3QoKT8uaGFzS2V5KCkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IE9EYXRhRW50aXR5UmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPRGF0YUVudGl0eVNldFJlc291cmNlKHRoaXMsIHsgc2VnbWVudHMsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMubmF2aWdhdGlvblByb3BlcnR5OlxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuc2luZ2xldG9uOlxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhU2luZ2xldG9uUmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuYWN0aW9uOlxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhQWN0aW9uUmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuZnVuY3Rpb246XG4gICAgICAgIHJldHVybiBuZXcgT0RhdGFGdW5jdGlvblJlc291cmNlKHRoaXMsIHsgc2VnbWVudHMsIHF1ZXJ5IH0pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFJlc291cmNlIGZvciBqc29uJyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBtZXRhZGF0YSByZXNvdXJjZS5cbiAgICogQHJldHVybnMgT0RhdGFNZXRhZGF0YVJlc291cmNlXG4gICAqL1xuICBtZXRhZGF0YSgpOiBPRGF0YU1ldGFkYXRhUmVzb3VyY2Uge1xuICAgIHJldHVybiBPRGF0YU1ldGFkYXRhUmVzb3VyY2UuZmFjdG9yeSh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGJhdGNoIHJlc291cmNlLlxuICAgKiBAcmV0dXJucyBPRGF0YUJhdGNoUmVzb3VyY2VcbiAgICovXG4gIGJhdGNoKCk6IE9EYXRhQmF0Y2hSZXNvdXJjZSB7XG4gICAgcmV0dXJuIE9EYXRhQmF0Y2hSZXNvdXJjZS5mYWN0b3J5KHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgc2luZ2xldG9uIHJlc291cmNlLlxuICAgKiBAcGFyYW0gcGF0aCBOYW1lIG9mIHRoZSBzaW5nbGV0b25cbiAgICogQHJldHVybnNcbiAgICovXG4gIHNpbmdsZXRvbjxUPihwYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbnRpdHlTZXQgPSB0aGlzLmZpbmRFbnRpdHlTZXRCeU5hbWUocGF0aCk7XG4gICAgY29uc3Qgc2NoZW1hID1cbiAgICAgIGVudGl0eVNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KGVudGl0eVNldC5lbnRpdHlUeXBlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gT0RhdGFTaW5nbGV0b25SZXNvdXJjZS5mYWN0b3J5PFQ+KHRoaXMsIHsgcGF0aCwgc2NoZW1hIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuIGVudGl0eSBzZXQgcmVzb3VyY2UuXG4gICAqIEBwYXJhbSBwYXRoIE5hbWUgb2YgdGhlIGVudGl0eSBzZXRcbiAgICogQHJldHVybnNcbiAgICovXG4gIGVudGl0eVNldDxUPihwYXRoOiBzdHJpbmcpOiBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+IHtcbiAgICBjb25zdCBlbnRpdHlTZXQgPSB0aGlzLmZpbmRFbnRpdHlTZXRCeU5hbWUocGF0aCk7XG4gICAgY29uc3Qgc2NoZW1hID1cbiAgICAgIGVudGl0eVNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KGVudGl0eVNldC5lbnRpdHlUeXBlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gT0RhdGFFbnRpdHlTZXRSZXNvdXJjZS5mYWN0b3J5PFQ+KHRoaXMsIHsgcGF0aCwgc2NoZW1hIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuYm91bmQgQWN0aW9uXG4gICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aD9cbiAgICogQHJldHVybnMgT0RhdGFBY3Rpb25SZXNvdXJjZVxuICAgKi9cbiAgYWN0aW9uPFAsIFI+KHBhdGg6IHN0cmluZyk6IE9EYXRhQWN0aW9uUmVzb3VyY2U8UCwgUj4ge1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZmluZENhbGxhYmxlRm9yVHlwZTxSPihwYXRoKTtcbiAgICByZXR1cm4gT0RhdGFBY3Rpb25SZXNvdXJjZS5mYWN0b3J5PFAsIFI+KHRoaXMsIHsgcGF0aCwgc2NoZW1hIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuYm91bmQgRnVuY3Rpb25cbiAgICogQHBhcmFtICB7c3RyaW5nfSBwYXRoP1xuICAgKiBAcmV0dXJucyBPRGF0YUZ1bmN0aW9uUmVzb3VyY2VcbiAgICovXG4gIGZ1bmN0aW9uPFAsIFI+KHBhdGg6IHN0cmluZyk6IE9EYXRhRnVuY3Rpb25SZXNvdXJjZTxQLCBSPiB7XG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5maW5kQ2FsbGFibGVGb3JUeXBlPFI+KHBhdGgpO1xuICAgIHJldHVybiBPRGF0YUZ1bmN0aW9uUmVzb3VyY2UuZmFjdG9yeTxQLCBSPih0aGlzLCB7IHBhdGgsIHNjaGVtYSB9KTtcbiAgfVxuXG4gIHJlcXVlc3QocmVxOiBPRGF0YVJlcXVlc3Q8YW55Pik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHJlcyQgPSB0aGlzLnJlcXVlc3RlciAhPT0gdW5kZWZpbmVkID8gdGhpcy5yZXF1ZXN0ZXIocmVxKSA6IE5FVkVSO1xuICAgIHJlcyQgPSByZXMkLnBpcGUoXG4gICAgICBtYXAoKHJlczogSHR0cEV2ZW50PGFueT4pID0+XG4gICAgICAgIHJlcy50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlXG4gICAgICAgICAgPyBPRGF0YVJlc3BvbnNlLmZyb21IdHRwUmVzcG9uc2U8YW55PihyZXEsIHJlcylcbiAgICAgICAgICA6IHJlc1xuICAgICAgKVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5lcnJvckhhbmRsZXIgIT09IHVuZGVmaW5lZClcbiAgICAgIHJlcyQgPSByZXMkLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlcikpO1xuXG4gICAgcmV0dXJuIHJlcS5vYnNlcnZlID09PSAncmVzcG9uc2UnXG4gICAgICA/IHRoaXMuY2FjaGUuaGFuZGxlUmVxdWVzdChyZXEsIHJlcyQpXG4gICAgICA6IHJlcyQ7XG4gIH1cblxuICAvLyMgcmVnaW9uIEZpbmQgYnkgVHlwZVxuICAvLyBNZW1vaXplXG4gIHByaXZhdGUgbWVtbzoge1xuICAgIGZvclR5cGU6IHtcbiAgICAgIGVudW06IHsgW3R5cGU6IHN0cmluZ106IE9EYXRhRW51bVR5cGU8YW55PiB8IHVuZGVmaW5lZCB9O1xuICAgICAgc3RydWN0dXJlZDogeyBbdHlwZTogc3RyaW5nXTogT0RhdGFTdHJ1Y3R1cmVkVHlwZTxhbnk+IHwgdW5kZWZpbmVkIH07XG4gICAgICBjYWxsYWJsZTogeyBba2V5OiBzdHJpbmddOiBPRGF0YUNhbGxhYmxlPGFueT4gfCB1bmRlZmluZWQgfTtcbiAgICAgIGVudGl0eVNldDogeyBbdHlwZTogc3RyaW5nXTogT0RhdGFFbnRpdHlTZXQgfCB1bmRlZmluZWQgfTtcbiAgICAgIHBhcnNlcjogeyBbdHlwZTogc3RyaW5nXTogUGFyc2VyPGFueT4gfTtcbiAgICAgIG9wdGlvbnM6IHsgW3R5cGU6IHN0cmluZ106IE9EYXRhTW9kZWxPcHRpb25zPGFueT4gfCB1bmRlZmluZWQgfTtcbiAgICB9O1xuICAgIGJ5TmFtZToge1xuICAgICAgZW51bTogeyBbdHlwZTogc3RyaW5nXTogT0RhdGFFbnVtVHlwZTxhbnk+IHwgdW5kZWZpbmVkIH07XG4gICAgICBzdHJ1Y3R1cmVkOiB7IFt0eXBlOiBzdHJpbmddOiBPRGF0YVN0cnVjdHVyZWRUeXBlPGFueT4gfCB1bmRlZmluZWQgfTtcbiAgICAgIGNhbGxhYmxlOiB7IFtrZXk6IHN0cmluZ106IE9EYXRhQ2FsbGFibGU8YW55PiB8IHVuZGVmaW5lZCB9O1xuICAgICAgZW50aXR5U2V0OiB7IFt0eXBlOiBzdHJpbmddOiBPRGF0YUVudGl0eVNldCB8IHVuZGVmaW5lZCB9O1xuICAgIH07XG4gIH0gPSB7XG4gICAgZm9yVHlwZToge1xuICAgICAgZW51bToge30sXG4gICAgICBzdHJ1Y3R1cmVkOiB7fSxcbiAgICAgIGNhbGxhYmxlOiB7fSxcbiAgICAgIGVudGl0eVNldDoge30sXG4gICAgICBwYXJzZXI6IHt9LFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgICBieU5hbWU6IHsgZW51bToge30sIHN0cnVjdHVyZWQ6IHt9LCBjYWxsYWJsZToge30sIGVudGl0eVNldDoge30gfSxcbiAgfTtcblxuICBwcml2YXRlIGZpbmRTY2hlbWFGb3JUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNjaGVtYXMgPSB0aGlzLnNjaGVtYXMuZmlsdGVyKChzKSA9PiBzLmlzTmFtZXNwYWNlT2YodHlwZSkpO1xuICAgIGlmIChzY2hlbWFzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoc2NoZW1hcy5sZW5ndGggPT09IDEpIHJldHVybiBzY2hlbWFzWzBdO1xuICAgIHJldHVybiBzY2hlbWFzXG4gICAgICAuc29ydCgoczEsIHMyKSA9PiBzMS5uYW1lc3BhY2UubGVuZ3RoIC0gczIubmFtZXNwYWNlLmxlbmd0aClcbiAgICAgIC5wb3AoKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRW51bVR5cGVGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZykge1xuICAgIGlmICghKHR5cGUgaW4gdGhpcy5tZW1vLmZvclR5cGUuZW51bSkpXG4gICAgICB0aGlzLm1lbW8uZm9yVHlwZS5lbnVtW3R5cGVdID1cbiAgICAgICAgdGhpcy5maW5kU2NoZW1hRm9yVHlwZSh0eXBlKT8uZmluZEVudW1UeXBlRm9yVHlwZTxUPih0eXBlKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUuZW51bVt0eXBlXSBhcyBPRGF0YUVudW1UeXBlPFQ+IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8VD4odHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCEodHlwZSBpbiB0aGlzLm1lbW8uZm9yVHlwZS5zdHJ1Y3R1cmVkKSlcbiAgICAgIHRoaXMubWVtby5mb3JUeXBlLnN0cnVjdHVyZWRbdHlwZV0gPVxuICAgICAgICB0aGlzLmZpbmRTY2hlbWFGb3JUeXBlKHR5cGUpPy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGUpO1xuICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5zdHJ1Y3R1cmVkW3R5cGVdIGFzXG4gICAgICB8IE9EYXRhU3RydWN0dXJlZFR5cGU8VD5cbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRDYWxsYWJsZUZvclR5cGU8VD4odHlwZTogc3RyaW5nLCBiaW5kaW5nVHlwZT86IHN0cmluZykge1xuICAgIGNvbnN0IGtleSA9IGJpbmRpbmdUeXBlICE9PSB1bmRlZmluZWQgPyBgJHtiaW5kaW5nVHlwZX0vJHt0eXBlfWAgOiB0eXBlO1xuICAgIGlmICghKGtleSBpbiB0aGlzLm1lbW8uZm9yVHlwZS5jYWxsYWJsZSkpXG4gICAgICB0aGlzLm1lbW8uZm9yVHlwZS5jYWxsYWJsZVtrZXldID0gdGhpcy5maW5kU2NoZW1hRm9yVHlwZShcbiAgICAgICAgdHlwZVxuICAgICAgKT8uZmluZENhbGxhYmxlRm9yVHlwZTxUPih0eXBlLCBiaW5kaW5nVHlwZSk7XG4gICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLmNhbGxhYmxlW2tleV0gYXMgT0RhdGFDYWxsYWJsZTxUPiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRW50aXR5U2V0Rm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoISh0eXBlIGluIHRoaXMubWVtby5mb3JUeXBlLmVudGl0eVNldCkpXG4gICAgICB0aGlzLm1lbW8uZm9yVHlwZS5lbnRpdHlTZXRbdHlwZV0gPVxuICAgICAgICB0aGlzLmZpbmRTY2hlbWFGb3JUeXBlKHR5cGUpPy5maW5kRW50aXR5U2V0Rm9yVHlwZSh0eXBlKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0W3R5cGVdIGFzIE9EYXRhRW50aXR5U2V0IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRNb2RlbEZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxhbnk+KHR5cGUpPy5tb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBtb2RlbEZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgbGV0IE1vZGVsID0gdGhpcy5maW5kTW9kZWxGb3JUeXBlKHR5cGUpO1xuICAgIGlmIChNb2RlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBCdWlsZCBBZC1ob2MgbW9kZWxcbiAgICAgIGxldCBzY2hlbWEgPSB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8YW55Pih0eXBlKTtcbiAgICAgIGlmIChzY2hlbWEgPT09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoYE5vIHNjaGVtYSBmb3IgJHt0eXBlfWApO1xuICAgICAgTW9kZWwgPSBjbGFzcyBleHRlbmRzIE9EYXRhTW9kZWw8YW55PiB7fSBhcyB0eXBlb2YgT0RhdGFNb2RlbDtcbiAgICAgIC8vIEJ1aWxkIE1ldGFcbiAgICAgIE1vZGVsLmJ1aWxkTWV0YSh7IHNjaGVtYSB9KTtcbiAgICAgIC8vIENvbmZpZ3VyZVxuICAgICAgTW9kZWwubWV0YS5jb25maWd1cmUoe1xuICAgICAgICBmaW5kT3B0aW9uc0ZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMuZmluZE9wdGlvbnNGb3JUeXBlKHR5cGUpLFxuICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICB9KTtcbiAgICAgIC8vIFN0b3JlIE5ldyBNb2RlbCBmb3IgbmV4dCB0aW1lXG4gICAgICBzY2hlbWEubW9kZWwgPSBNb2RlbDtcbiAgICB9XG4gICAgcmV0dXJuIE1vZGVsO1xuICB9XG5cbiAgcHVibGljIGZpbmRDb2xsZWN0aW9uRm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPGFueT4odHlwZSk/LmNvbGxlY3Rpb247XG4gIH1cblxuICBwdWJsaWMgY29sbGVjdGlvbkZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgbGV0IENvbGxlY3Rpb24gPSB0aGlzLmZpbmRDb2xsZWN0aW9uRm9yVHlwZSh0eXBlKTtcbiAgICBpZiAoQ29sbGVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgc2NoZW1hID0gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPGFueT4odHlwZSk7XG4gICAgICBpZiAoc2NoZW1hID09PSB1bmRlZmluZWQpIHRocm93IEVycm9yKCcnKTtcbiAgICAgIENvbGxlY3Rpb24gPSBjbGFzcyBleHRlbmRzIE9EYXRhQ29sbGVjdGlvbjxcbiAgICAgICAgYW55LFxuICAgICAgICBPRGF0YU1vZGVsPGFueT5cbiAgICAgID4ge30gYXMgdHlwZW9mIE9EYXRhQ29sbGVjdGlvbjtcbiAgICAgIENvbGxlY3Rpb24ubW9kZWwgPSB0aGlzLm1vZGVsRm9yVHlwZSh0eXBlKTtcbiAgICAgIC8vIFN0b3JlIE5ldyBDb2xsZWN0aW9uIGZvciBuZXh0IHRpbWVcbiAgICAgIHNjaGVtYS5jb2xsZWN0aW9uID0gQ29sbGVjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIENvbGxlY3Rpb247XG4gIH1cblxuICBwdWJsaWMgZmluZFNlcnZpY2VGb3JUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRFbnRpdHlTZXRGb3JUeXBlKHR5cGUpPy5zZXJ2aWNlIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUVudGl0eVNlcnZpY2VcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnRpdHlTZXRGb3JFbnRpdHlUeXBlKGVudGl0eVR5cGU6IHN0cmluZykge1xuICAgIGlmICghKGVudGl0eVR5cGUgaW4gdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0KSlcbiAgICAgIHRoaXMubWVtby5mb3JUeXBlLmVudGl0eVNldFtlbnRpdHlUeXBlXSA9IHRoaXMuc2NoZW1hc1xuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgIChhY2MsIHNjaGVtYSkgPT4gWy4uLmFjYywgLi4uc2NoZW1hLmVudGl0eVNldHNdLFxuICAgICAgICAgIDxPRGF0YUVudGl0eVNldFtdPltdXG4gICAgICAgIClcbiAgICAgICAgLmZpbmQoKGUpID0+IGUuZW50aXR5VHlwZSA9PT0gZW50aXR5VHlwZSk7XG4gICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLmVudGl0eVNldFtlbnRpdHlUeXBlXSBhc1xuICAgICAgfCBPRGF0YUVudGl0eVNldFxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZFNlcnZpY2VGb3JFbnRpdHlUeXBlKGVudGl0eVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRFbnRpdHlTZXRGb3JFbnRpdHlUeXBlKGVudGl0eVR5cGUpPy5zZXJ2aWNlIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUVudGl0eVNlcnZpY2VcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnVtVHlwZUJ5TmFtZTxUPihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMubWVtby5ieU5hbWUuZW51bSkpXG4gICAgICB0aGlzLm1lbW8uYnlOYW1lLmVudW1bbmFtZV0gPSB0aGlzLnNjaGVtYXNcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBzY2hlbWEpID0+IFsuLi5hY2MsIC4uLnNjaGVtYS5lbnVtc10sXG4gICAgICAgICAgPE9EYXRhRW51bVR5cGU8VD5bXT5bXVxuICAgICAgICApXG4gICAgICAgIC5maW5kKChlKSA9PiBlLm5hbWUgPT09IG5hbWUpO1xuICAgIHJldHVybiB0aGlzLm1lbW8uYnlOYW1lLmVudW1bbmFtZV0gYXMgT0RhdGFFbnVtVHlwZTxUPiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kU3RydWN0dXJlZFR5cGVCeU5hbWU8VD4obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCEobmFtZSBpbiB0aGlzLm1lbW8uYnlOYW1lLnN0cnVjdHVyZWQpKVxuICAgICAgdGhpcy5tZW1vLmJ5TmFtZS5zdHJ1Y3R1cmVkW25hbWVdID0gdGhpcy5zY2hlbWFzXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuZW50aXRpZXNdLFxuICAgICAgICAgIDxPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+W10+W11cbiAgICAgICAgKVxuICAgICAgICAuZmluZCgoZSkgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmJ5TmFtZS5zdHJ1Y3R1cmVkW25hbWVdIGFzXG4gICAgICB8IE9EYXRhU3RydWN0dXJlZFR5cGU8VD5cbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRDYWxsYWJsZUJ5TmFtZTxUPihuYW1lOiBzdHJpbmcsIGJpbmRpbmdUeXBlPzogc3RyaW5nKSB7XG4gICAgY29uc3Qga2V5ID0gYmluZGluZ1R5cGUgIT09IHVuZGVmaW5lZCA/IGAke2JpbmRpbmdUeXBlfS8ke25hbWV9YCA6IG5hbWU7XG4gICAgaWYgKCEoa2V5IGluIHRoaXMubWVtby5ieU5hbWUuY2FsbGFibGUpKVxuICAgICAgdGhpcy5tZW1vLmJ5TmFtZS5jYWxsYWJsZVtrZXldID0gdGhpcy5zY2hlbWFzXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuY2FsbGFibGVzXSxcbiAgICAgICAgICA8T0RhdGFDYWxsYWJsZTxUPltdPltdXG4gICAgICAgIClcbiAgICAgICAgLmZpbmQoXG4gICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICBjLm5hbWUgPT09IG5hbWUgJiZcbiAgICAgICAgICAgIChiaW5kaW5nVHlwZSA9PT0gdW5kZWZpbmVkIHx8IGMuYmluZGluZygpPy50eXBlID09PSBiaW5kaW5nVHlwZSlcbiAgICAgICAgKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmJ5TmFtZS5jYWxsYWJsZVtrZXldIGFzIE9EYXRhQ2FsbGFibGU8VD4gfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZEVudGl0eVNldEJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMubWVtby5ieU5hbWUuZW50aXR5U2V0KSlcbiAgICAgIHRoaXMubWVtby5ieU5hbWUuZW50aXR5U2V0W25hbWVdID0gdGhpcy5zY2hlbWFzXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuZW50aXR5U2V0c10sXG4gICAgICAgICAgPE9EYXRhRW50aXR5U2V0W10+W11cbiAgICAgICAgKVxuICAgICAgICAuZmluZCgoZSkgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmJ5TmFtZS5lbnRpdHlTZXRbbmFtZV0gYXMgT0RhdGFFbnRpdHlTZXQgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZE1vZGVsQnlOYW1lKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUJ5TmFtZTxhbnk+KG5hbWUpPy5tb2RlbCBhc1xuICAgICAgfCB0eXBlb2YgT0RhdGFNb2RlbFxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZENvbGxlY3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlQnlOYW1lPGFueT4obmFtZSk/LmNvbGxlY3Rpb24gYXNcbiAgICAgIHwgdHlwZW9mIE9EYXRhQ29sbGVjdGlvblxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZFNlcnZpY2VCeU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZEVudGl0eVNldEJ5TmFtZShuYW1lKT8uc2VydmljZSBhc1xuICAgICAgfCB0eXBlb2YgT0RhdGFFbnRpdHlTZXJ2aWNlXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBwYXJzZXJGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZywgYmluZGluZ1R5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSBiaW5kaW5nVHlwZSAhPT0gdW5kZWZpbmVkID8gYCR7YmluZGluZ1R5cGV9LyR7dHlwZX1gIDogdHlwZTtcbiAgICBpZiAoIShrZXkgaW4gdGhpcy5tZW1vLmZvclR5cGUucGFyc2VyKSkge1xuICAgICAgaWYgKHR5cGUgaW4gdGhpcy5wYXJzZXJzKSB7XG4gICAgICAgIC8vIEVkbSwgQmFzZSBQYXJzZXJzXG4gICAgICAgIHRoaXMubWVtby5mb3JUeXBlLnBhcnNlcltrZXldID0gdGhpcy5wYXJzZXJzW3R5cGVdIGFzIFBhcnNlcjxUPjtcbiAgICAgIH0gZWxzZSBpZiAoIXR5cGUuc3RhcnRzV2l0aCgnRWRtLicpKSB7XG4gICAgICAgIC8vIEVudW1UeXBlLCBDb21wbGV4VHlwZSBhbmQgRW50aXR5VHlwZSBQYXJzZXJzXG4gICAgICAgIGxldCB2YWx1ZSA9XG4gICAgICAgICAgdGhpcy5maW5kQ2FsbGFibGVGb3JUeXBlPFQ+KHR5cGUsIGJpbmRpbmdUeXBlKSB8fFxuICAgICAgICAgIHRoaXMuZmluZEVudW1UeXBlRm9yVHlwZTxUPih0eXBlKSB8fFxuICAgICAgICAgIHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxUPih0eXBlKTtcbiAgICAgICAgdGhpcy5tZW1vLmZvclR5cGUucGFyc2VyW2tleV0gPSB2YWx1ZT8ucGFyc2VyIGFzIFBhcnNlcjxUPjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vbmUgUGFyc2VyXG4gICAgICAgIHRoaXMubWVtby5mb3JUeXBlLnBhcnNlcltrZXldID0gTk9ORV9QQVJTRVI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5wYXJzZXJba2V5XSBhcyBQYXJzZXI8VD47XG4gIH1cblxuICBwdWJsaWMgZmluZE9wdGlvbnNGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZykge1xuICAgIC8vIFN0cnVjdXRyZWQgT3B0aW9uc1xuICAgIGlmICghKHR5cGUgaW4gdGhpcy5tZW1vLmZvclR5cGUub3B0aW9ucykpIHtcbiAgICAgIGxldCBzdCA9IHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxUPih0eXBlKTtcbiAgICAgIHRoaXMubWVtby5mb3JUeXBlLm9wdGlvbnNbdHlwZV0gPVxuICAgICAgICBzdCAhPT0gdW5kZWZpbmVkICYmIHN0Lm1vZGVsICE9PSB1bmRlZmluZWQgJiYgc3QubW9kZWw/Lm1ldGEgIT09IG51bGxcbiAgICAgICAgICA/IHN0Lm1vZGVsLm1ldGFcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLm9wdGlvbnNbdHlwZV0gYXMgT0RhdGFNb2RlbE9wdGlvbnM8VD4gfCB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
303
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBYyxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFxQixNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLCtCQUErQixFQUMvQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLGFBQWEsRUFFYixzQkFBc0IsR0FDdkIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQ0wsV0FBVyxFQUlYLFdBQVcsR0FFWixNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBR0wsV0FBVyxFQUVYLGdCQUFnQixHQUNqQixNQUFNLFNBQVMsQ0FBQztBQUVqQjs7R0FFRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBbUJuQixZQUFZLE1BQWlCO1FBK0o3Qix1QkFBdUI7UUFDdkIsVUFBVTtRQUNGLFNBQUksR0FlUjtZQUNGLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsRUFBRTtnQkFDUixVQUFVLEVBQUUsRUFBRTtnQkFDZCxRQUFRLEVBQUUsRUFBRTtnQkFDWixTQUFTLEVBQUUsRUFBRTtnQkFDYixNQUFNLEVBQUUsRUFBRTtnQkFDVixPQUFPLEVBQUUsRUFBRTthQUNaO1lBQ0QsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtTQUNsRSxDQUFDO1FBekxBLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxNQUFNLElBQUksS0FBSyxDQUNiLG1HQUFtRyxDQUNwRyxDQUFDO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUFFLElBQUksQ0FBQyxjQUFjLElBQUksR0FBRyxDQUFDO1FBQ25FLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxXQUFXLENBQUM7UUFDckQsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxlQUFlLENBQUM7UUFDakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksZUFBZSxDQUNoQyxNQUFNLENBQUMsTUFBTSxDQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUMzRSxDQUFDO1FBRUYsSUFBSSxDQUFDLEtBQUssR0FBSSxNQUFNLENBQUMsS0FBb0IsSUFBSSxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDdEUsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBRXhDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUM7UUFFN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUN2QyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsQ0FDUCxXQUVJLEVBQUU7UUFFTixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM5QixNQUFNLENBQUMsU0FBUyxDQUFDO2dCQUNmLGFBQWEsRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7Z0JBQ3pELGtCQUFrQixFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO2FBQ3BFLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQWNELFFBQVEsQ0FBQyxJQUdSO1FBQ0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsUUFBUSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBd0IsRUFBRTtZQUNqRCxLQUFLLGdCQUFnQixDQUFDLFNBQVM7Z0JBQzdCLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFO29CQUM3QixPQUFPLElBQUksbUJBQW1CLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7aUJBQzNEO3FCQUFNO29CQUNMLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztpQkFDOUQ7WUFDSCxLQUFLLGdCQUFnQixDQUFDLGtCQUFrQjtnQkFDdEMsT0FBTyxJQUFJLCtCQUErQixDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLEtBQUssZ0JBQWdCLENBQUMsU0FBUztnQkFDN0IsT0FBTyxJQUFJLHNCQUFzQixDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELEtBQUssZ0JBQWdCLENBQUMsTUFBTTtnQkFDMUIsT0FBTyxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzVELEtBQUssZ0JBQWdCLENBQUMsUUFBUTtnQkFDNUIsT0FBTyxJQUFJLHFCQUFxQixDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQy9EO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRO1FBQ04sT0FBTyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUs7UUFDSCxPQUFPLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBSSxJQUFZO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxNQUFNLE1BQU0sR0FDVixTQUFTLEtBQUssU0FBUztZQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDekQsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoQixPQUFPLHNCQUFzQixDQUFDLE9BQU8sQ0FBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBSSxJQUFZO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxNQUFNLE1BQU0sR0FDVixTQUFTLEtBQUssU0FBUztZQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDekQsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoQixPQUFPLHNCQUFzQixDQUFDLE9BQU8sQ0FBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBTyxJQUFZO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBSSxJQUFJLENBQUMsQ0FBQztRQUNqRCxPQUFPLG1CQUFtQixDQUFDLE9BQU8sQ0FBTyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBTyxJQUFZO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBSSxJQUFJLENBQUMsQ0FBQztRQUNqRCxPQUFPLHFCQUFxQixDQUFDLE9BQU8sQ0FBTyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQXNCO1FBQzVCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdEUsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQ2QsR0FBRyxDQUFDLENBQUMsR0FBbUIsRUFBRSxFQUFFLENBQzFCLEdBQUcsQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLFFBQVE7WUFDakMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBTSxHQUFHLEVBQUUsR0FBRyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxHQUFHLENBQ1IsQ0FDRixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVM7WUFDakMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBRWxELE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxVQUFVO1lBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBK0JPLGlCQUFpQixDQUFDLElBQVk7UUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQzNDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsT0FBTyxPQUFPO2FBQ1gsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7YUFDM0QsR0FBRyxFQUFFLENBQUM7SUFDWCxDQUFDO0lBRU0sbUJBQW1CLENBQUksSUFBWTtRQUN4QyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBSSxJQUFJLENBQUMsQ0FBQztRQUMvRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQWlDLENBQUM7SUFDdEUsQ0FBQztJQUVNLHlCQUF5QixDQUFJLElBQVk7UUFDOUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUseUJBQXlCLENBQUksSUFBSSxDQUFDLENBQUM7UUFDckUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUUzQixDQUFDO0lBQ2hCLENBQUM7SUFFTSxtQkFBbUIsQ0FBSSxJQUFZLEVBQUUsV0FBb0I7UUFDOUQsTUFBTSxHQUFHLEdBQUcsV0FBVyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN4RSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQ3RELElBQUksQ0FDTCxFQUFFLG1CQUFtQixDQUFJLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMvQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQWlDLENBQUM7SUFDekUsQ0FBQztJQUVNLG9CQUFvQixDQUFDLElBQVk7UUFDdEMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUErQixDQUFDO0lBQ3pFLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxJQUFZO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFNLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUMxRCxDQUFDO0lBRU0sWUFBWSxDQUFDLElBQVk7UUFDOUIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN2QixxQkFBcUI7WUFDckIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFNLElBQUksQ0FBQyxDQUFDO1lBQ3ZELElBQUksTUFBTSxLQUFLLFNBQVM7Z0JBQUUsTUFBTSxLQUFLLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUM7WUFDL0QsS0FBSyxHQUFHLEtBQU0sU0FBUSxVQUFlO2FBQXdCLENBQUM7WUFDOUQsYUFBYTtZQUNiLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLFlBQVk7WUFDWixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsa0JBQWtCLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ25FLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTzthQUN0QixDQUFDLENBQUM7WUFDSCxnQ0FBZ0M7WUFDaEMsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDdEI7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxJQUFZO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFNLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQztJQUMvRCxDQUFDO0lBRU0saUJBQWlCLENBQUMsSUFBWTtRQUNuQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQzVCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBTSxJQUFJLENBQUMsQ0FBQztZQUN2RCxJQUFJLE1BQU0sS0FBSyxTQUFTO2dCQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLFVBQVUsR0FBRyxLQUFNLFNBQVEsZUFHMUI7YUFBNkIsQ0FBQztZQUMvQixVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MscUNBQXFDO1lBQ3JDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVNLGtCQUFrQixDQUFDLElBQVk7UUFDcEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FFM0IsQ0FBQztJQUNoQixDQUFDO0lBRU0sMEJBQTBCLENBQUMsVUFBa0I7UUFDbEQsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU87aUJBQ25ELE1BQU0sQ0FDTCxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQzdCLEVBQUUsQ0FDckI7aUJBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FFaEMsQ0FBQztJQUNoQixDQUFDO0lBRU0sd0JBQXdCLENBQUMsVUFBa0I7UUFDaEQsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FFdkMsQ0FBQztJQUNoQixDQUFDO0lBRU0sa0JBQWtCLENBQUksSUFBWTtRQUN2QyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTztpQkFDdkMsTUFBTSxDQUNMLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFDdEIsRUFBRSxDQUN2QjtpQkFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFpQyxDQUFDO0lBQ3JFLENBQUM7SUFFTSx3QkFBd0IsQ0FBSSxJQUFZO1FBQzdDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPO2lCQUM3QyxNQUFNLENBQ0wsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUNuQixFQUFFLENBQzdCO2lCQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBRTFCLENBQUM7SUFDaEIsQ0FBQztJQUVNLGtCQUFrQixDQUFJLElBQVksRUFBRSxXQUFvQjtRQUM3RCxNQUFNLEdBQUcsR0FBRyxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPO2lCQUMxQyxNQUFNLENBQ0wsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUMxQixFQUFFLENBQ3ZCO2lCQUNBLElBQUksQ0FDSCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJO2dCQUNmLENBQUMsV0FBVyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUNuRSxDQUFDO1FBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFpQyxDQUFDO0lBQ3hFLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxJQUFZO1FBQ3JDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPO2lCQUM1QyxNQUFNLENBQ0wsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUM3QixFQUFFLENBQ3JCO2lCQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQStCLENBQUM7SUFDeEUsQ0FBQztJQUVNLGVBQWUsQ0FBQyxJQUFZO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFNLElBQUksQ0FBQyxFQUFFLEtBRXBDLENBQUM7SUFDaEIsQ0FBQztJQUVNLG9CQUFvQixDQUFDLElBQVk7UUFDdEMsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQU0sSUFBSSxDQUFDLEVBQUUsVUFFcEMsQ0FBQztJQUNoQixDQUFDO0lBRU0saUJBQWlCLENBQUMsSUFBWTtRQUNuQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUUxQixDQUFDO0lBQ2hCLENBQUM7SUFFTSxhQUFhLENBQUksSUFBWSxFQUFFLFdBQW9CO1FBQ3hELE1BQU0sR0FBRyxHQUFHLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3hCLG9CQUFvQjtnQkFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFjLENBQUM7YUFDakU7aUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ25DLCtDQUErQztnQkFDL0MsSUFBSSxLQUFLLEdBQ1AsSUFBSSxDQUFDLG1CQUFtQixDQUFJLElBQUksRUFBRSxXQUFXLENBQUM7b0JBQzlDLElBQUksQ0FBQyxtQkFBbUIsQ0FBSSxJQUFJLENBQUM7b0JBQ2pDLElBQUksQ0FBQyx5QkFBeUIsQ0FBSSxJQUFJLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssRUFBRSxNQUFtQixDQUFDO2FBQzVEO2lCQUFNO2dCQUNMLGNBQWM7Z0JBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQzthQUM3QztTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFjLENBQUM7SUFDcEQsQ0FBQztJQUVNLGtCQUFrQixDQUFJLElBQVk7UUFDdkMscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN4QyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUksSUFBSSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDN0IsRUFBRSxLQUFLLFNBQVMsSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksS0FBSyxJQUFJO29CQUNuRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJO29CQUNmLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDakI7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQXFDLENBQUM7SUFDN0UsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEV2ZW50LCBIdHRwRXZlbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgTkVWRVIsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9EYXRhQ2FjaGUsIE9EYXRhSW5NZW1vcnlDYWNoZSB9IGZyb20gJy4vY2FjaGUvaW5kZXgnO1xuaW1wb3J0IHsgREVGQVVMVF9WRVJTSU9OIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT0RhdGFDb2xsZWN0aW9uLCBPRGF0YU1vZGVsLCBPRGF0YU1vZGVsT3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzL2luZGV4JztcbmltcG9ydCB7IE9EYXRhQXBpT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQge1xuICBPRGF0YUFjdGlvblJlc291cmNlLFxuICBPRGF0YUJhdGNoUmVzb3VyY2UsXG4gIE9EYXRhRW50aXR5UmVzb3VyY2UsXG4gIE9EYXRhRW50aXR5U2V0UmVzb3VyY2UsXG4gIE9EYXRhRnVuY3Rpb25SZXNvdXJjZSxcbiAgT0RhdGFNZXRhZGF0YVJlc291cmNlLFxuICBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlLFxuICBPRGF0YVBhdGhTZWdtZW50cyxcbiAgT0RhdGFRdWVyeU9wdGlvbnMsXG4gIE9EYXRhUmVxdWVzdCxcbiAgT0RhdGFSZXNwb25zZSxcbiAgT0RhdGFTZWdtZW50LFxuICBPRGF0YVNpbmdsZXRvblJlc291cmNlLFxufSBmcm9tICcuL3Jlc291cmNlcy9pbmRleCc7XG5pbXBvcnQge1xuICBFRE1fUEFSU0VSUyxcbiAgT0RhdGFDYWxsYWJsZSxcbiAgT0RhdGFFbnRpdHlTZXQsXG4gIE9EYXRhRW51bVR5cGUsXG4gIE9EYXRhU2NoZW1hLFxuICBPRGF0YVN0cnVjdHVyZWRUeXBlLFxufSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQgeyBPRGF0YUVudGl0eVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2VudGl0eSc7XG5pbXBvcnQge1xuICBBcGlDb25maWcsXG4gIEFwaU9wdGlvbnMsXG4gIE5PTkVfUEFSU0VSLFxuICBQYXJzZXIsXG4gIFBhdGhTZWdtZW50TmFtZXMsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEFwaSBhYnN0cmFjdGlvbiBmb3IgY29uc3VtaW5nIE9EYXRhIHNlcnZpY2VzLlxuICovXG5leHBvcnQgY2xhc3MgT0RhdGFBcGkge1xuICByZXF1ZXN0ZXI/OiAocmVxdWVzdDogT0RhdGFSZXF1ZXN0PGFueT4pID0+IE9ic2VydmFibGU8YW55PjtcbiAgc2VydmljZVJvb3RVcmw6IHN0cmluZztcbiAgbWV0YWRhdGFVcmw6IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBkZWZhdWx0OiBib29sZWFuO1xuICBjcmVhdGlvbjogRGF0ZTtcbiAgLy8gT3B0aW9uc1xuICBvcHRpb25zOiBPRGF0YUFwaU9wdGlvbnM7XG4gIC8vIENhY2hlXG4gIGNhY2hlITogT0RhdGFDYWNoZTtcbiAgLy8gRXJyb3IgSGFuZGxlclxuICBlcnJvckhhbmRsZXI/OiAoZXJyb3I6IGFueSwgY2F1Z2h0OiBPYnNlcnZhYmxlPGFueT4pID0+IE9ic2VydmFibGU8bmV2ZXI+O1xuICAvLyBCYXNlIFBhcnNlcnNcbiAgcGFyc2VyczogeyBbdHlwZTogc3RyaW5nXTogUGFyc2VyPGFueT4gfTtcbiAgLy8gU2NoZW1hc1xuICBzY2hlbWFzOiBPRGF0YVNjaGVtYVtdO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQXBpQ29uZmlnKSB7XG4gICAgdGhpcy5zZXJ2aWNlUm9vdFVybCA9IGNvbmZpZy5zZXJ2aWNlUm9vdFVybDtcbiAgICBpZiAodGhpcy5zZXJ2aWNlUm9vdFVybC5pbmRleE9mKCc/JykgIT0gLTEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlICdzZXJ2aWNlUm9vdFVybCcgc2hvdWxkIG5vdCBjb250YWluIHF1ZXJ5IHN0cmluZy4gUGxlYXNlIHVzZSAncGFyYW1zJyB0byBhZGQgZXh0cmEgcGFyYW1ldGVyc1wiXG4gICAgICApO1xuICAgIGlmICghdGhpcy5zZXJ2aWNlUm9vdFVybC5lbmRzV2l0aCgnLycpKSB0aGlzLnNlcnZpY2VSb290VXJsICs9ICcvJztcbiAgICB0aGlzLm1ldGFkYXRhVXJsID0gYCR7dGhpcy5zZXJ2aWNlUm9vdFVybH0kbWV0YWRhdGFgO1xuICAgIHRoaXMubmFtZSA9IGNvbmZpZy5uYW1lO1xuICAgIHRoaXMudmVyc2lvbiA9IGNvbmZpZy52ZXJzaW9uIHx8IERFRkFVTFRfVkVSU0lPTjtcbiAgICB0aGlzLmRlZmF1bHQgPSBjb25maWcuZGVmYXVsdCB8fCBmYWxzZTtcbiAgICB0aGlzLmNyZWF0aW9uID0gY29uZmlnLmNyZWF0aW9uIHx8IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5vcHRpb25zID0gbmV3IE9EYXRhQXBpT3B0aW9ucyhcbiAgICAgIE9iamVjdC5hc3NpZ24oPEFwaU9wdGlvbnM+eyB2ZXJzaW9uOiB0aGlzLnZlcnNpb24gfSwgY29uZmlnLm9wdGlvbnMgfHwge30pXG4gICAgKTtcblxuICAgIHRoaXMuY2FjaGUgPSAoY29uZmlnLmNhY2hlIGFzIE9EYXRhQ2FjaGUpIHx8IG5ldyBPRGF0YUluTWVtb3J5Q2FjaGUoKTtcbiAgICB0aGlzLmVycm9ySGFuZGxlciA9IGNvbmZpZy5lcnJvckhhbmRsZXI7XG5cbiAgICB0aGlzLnBhcnNlcnMgPSBjb25maWcucGFyc2VycyB8fCBFRE1fUEFSU0VSUztcblxuICAgIHRoaXMuc2NoZW1hcyA9IChjb25maWcuc2NoZW1hcyB8fCBbXSkubWFwKFxuICAgICAgKHNjaGVtYSkgPT4gbmV3IE9EYXRhU2NoZW1hKHNjaGVtYSwgdGhpcylcbiAgICApO1xuICB9XG5cbiAgY29uZmlndXJlKFxuICAgIHNldHRpbmdzOiB7XG4gICAgICByZXF1ZXN0ZXI/OiAocmVxdWVzdDogT0RhdGFSZXF1ZXN0PGFueT4pID0+IE9ic2VydmFibGU8YW55PjtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ZXIgPSBzZXR0aW5ncy5yZXF1ZXN0ZXI7XG4gICAgdGhpcy5zY2hlbWFzLmZvckVhY2goKHNjaGVtYSkgPT4ge1xuICAgICAgc2NoZW1hLmNvbmZpZ3VyZSh7XG4gICAgICAgIHBhcnNlckZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMucGFyc2VyRm9yVHlwZSh0eXBlKSxcbiAgICAgICAgZmluZE9wdGlvbnNGb3JUeXBlOiAodHlwZTogc3RyaW5nKSA9PiB0aGlzLmZpbmRPcHRpb25zRm9yVHlwZSh0eXBlKSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZnJvbUpTT048UCwgUj4oanNvbjoge1xuICAgIHNlZ21lbnRzOiBPRGF0YVNlZ21lbnRbXTtcbiAgICBvcHRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgfSk6IE9EYXRhQWN0aW9uUmVzb3VyY2U8UCwgUj4gfCBPRGF0YUZ1bmN0aW9uUmVzb3VyY2U8UCwgUj47XG4gIGZyb21KU09OPEU+KGpzb246IHtcbiAgICBzZWdtZW50czogT0RhdGFTZWdtZW50W107XG4gICAgb3B0aW9uczogeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG4gIH0pOlxuICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxFPlxuICAgIHwgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZTxFPlxuICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxFPlxuICAgIHwgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxFPjtcbiAgZnJvbUpTT04oanNvbjoge1xuICAgIHNlZ21lbnRzOiBPRGF0YVNlZ21lbnRbXTtcbiAgICBvcHRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgfSkge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gbmV3IE9EYXRhUGF0aFNlZ21lbnRzKGpzb24uc2VnbWVudHMpO1xuICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IE9EYXRhUXVlcnlPcHRpb25zKGpzb24ub3B0aW9ucyk7XG4gICAgc3dpdGNoIChzZWdtZW50cy5sYXN0KCk/Lm5hbWUgYXMgUGF0aFNlZ21lbnROYW1lcykge1xuICAgICAgY2FzZSBQYXRoU2VnbWVudE5hbWVzLmVudGl0eVNldDpcbiAgICAgICAgaWYgKHNlZ21lbnRzLmxhc3QoKT8uaGFzS2V5KCkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IE9EYXRhRW50aXR5UmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPRGF0YUVudGl0eVNldFJlc291cmNlKHRoaXMsIHsgc2VnbWVudHMsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMubmF2aWdhdGlvblByb3BlcnR5OlxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuc2luZ2xldG9uOlxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhU2luZ2xldG9uUmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuYWN0aW9uOlxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhQWN0aW9uUmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuZnVuY3Rpb246XG4gICAgICAgIHJldHVybiBuZXcgT0RhdGFGdW5jdGlvblJlc291cmNlKHRoaXMsIHsgc2VnbWVudHMsIHF1ZXJ5IH0pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFJlc291cmNlIGZvciBqc29uJyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBtZXRhZGF0YSByZXNvdXJjZS5cbiAgICogQHJldHVybnMgT0RhdGFNZXRhZGF0YVJlc291cmNlXG4gICAqL1xuICBtZXRhZGF0YSgpOiBPRGF0YU1ldGFkYXRhUmVzb3VyY2Uge1xuICAgIHJldHVybiBPRGF0YU1ldGFkYXRhUmVzb3VyY2UuZmFjdG9yeSh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGJhdGNoIHJlc291cmNlLlxuICAgKiBAcmV0dXJucyBPRGF0YUJhdGNoUmVzb3VyY2VcbiAgICovXG4gIGJhdGNoKCk6IE9EYXRhQmF0Y2hSZXNvdXJjZSB7XG4gICAgcmV0dXJuIE9EYXRhQmF0Y2hSZXNvdXJjZS5mYWN0b3J5KHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgc2luZ2xldG9uIHJlc291cmNlLlxuICAgKiBAcGFyYW0gcGF0aCBOYW1lIG9mIHRoZSBzaW5nbGV0b25cbiAgICogQHJldHVybnNcbiAgICovXG4gIHNpbmdsZXRvbjxUPihwYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbnRpdHlTZXQgPSB0aGlzLmZpbmRFbnRpdHlTZXRCeU5hbWUocGF0aCk7XG4gICAgY29uc3Qgc2NoZW1hID1cbiAgICAgIGVudGl0eVNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KGVudGl0eVNldC5lbnRpdHlUeXBlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gT0RhdGFTaW5nbGV0b25SZXNvdXJjZS5mYWN0b3J5PFQ+KHRoaXMsIHsgcGF0aCwgc2NoZW1hIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuIGVudGl0eSBzZXQgcmVzb3VyY2UuXG4gICAqIEBwYXJhbSBwYXRoIE5hbWUgb2YgdGhlIGVudGl0eSBzZXRcbiAgICogQHJldHVybnNcbiAgICovXG4gIGVudGl0eVNldDxUPihwYXRoOiBzdHJpbmcpOiBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+IHtcbiAgICBjb25zdCBlbnRpdHlTZXQgPSB0aGlzLmZpbmRFbnRpdHlTZXRCeU5hbWUocGF0aCk7XG4gICAgY29uc3Qgc2NoZW1hID1cbiAgICAgIGVudGl0eVNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KGVudGl0eVNldC5lbnRpdHlUeXBlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gT0RhdGFFbnRpdHlTZXRSZXNvdXJjZS5mYWN0b3J5PFQ+KHRoaXMsIHsgcGF0aCwgc2NoZW1hIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuYm91bmQgQWN0aW9uXG4gICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aD9cbiAgICogQHJldHVybnMgT0RhdGFBY3Rpb25SZXNvdXJjZVxuICAgKi9cbiAgYWN0aW9uPFAsIFI+KHBhdGg6IHN0cmluZyk6IE9EYXRhQWN0aW9uUmVzb3VyY2U8UCwgUj4ge1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZmluZENhbGxhYmxlRm9yVHlwZTxSPihwYXRoKTtcbiAgICByZXR1cm4gT0RhdGFBY3Rpb25SZXNvdXJjZS5mYWN0b3J5PFAsIFI+KHRoaXMsIHsgcGF0aCwgc2NoZW1hIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuYm91bmQgRnVuY3Rpb25cbiAgICogQHBhcmFtICB7c3RyaW5nfSBwYXRoP1xuICAgKiBAcmV0dXJucyBPRGF0YUZ1bmN0aW9uUmVzb3VyY2VcbiAgICovXG4gIGZ1bmN0aW9uPFAsIFI+KHBhdGg6IHN0cmluZyk6IE9EYXRhRnVuY3Rpb25SZXNvdXJjZTxQLCBSPiB7XG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5maW5kQ2FsbGFibGVGb3JUeXBlPFI+KHBhdGgpO1xuICAgIHJldHVybiBPRGF0YUZ1bmN0aW9uUmVzb3VyY2UuZmFjdG9yeTxQLCBSPih0aGlzLCB7IHBhdGgsIHNjaGVtYSB9KTtcbiAgfVxuXG4gIHJlcXVlc3QocmVxOiBPRGF0YVJlcXVlc3Q8YW55Pik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHJlcyQgPSB0aGlzLnJlcXVlc3RlciAhPT0gdW5kZWZpbmVkID8gdGhpcy5yZXF1ZXN0ZXIocmVxKSA6IE5FVkVSO1xuICAgIHJlcyQgPSByZXMkLnBpcGUoXG4gICAgICBtYXAoKHJlczogSHR0cEV2ZW50PGFueT4pID0+XG4gICAgICAgIHJlcy50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlXG4gICAgICAgICAgPyBPRGF0YVJlc3BvbnNlLmZyb21IdHRwUmVzcG9uc2U8YW55PihyZXEsIHJlcylcbiAgICAgICAgICA6IHJlc1xuICAgICAgKVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5lcnJvckhhbmRsZXIgIT09IHVuZGVmaW5lZClcbiAgICAgIHJlcyQgPSByZXMkLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlcikpO1xuXG4gICAgcmV0dXJuIHJlcS5vYnNlcnZlID09PSAncmVzcG9uc2UnXG4gICAgICA/IHRoaXMuY2FjaGUuaGFuZGxlUmVxdWVzdChyZXEsIHJlcyQpXG4gICAgICA6IHJlcyQ7XG4gIH1cblxuICAvLyMgcmVnaW9uIEZpbmQgYnkgVHlwZVxuICAvLyBNZW1vaXplXG4gIHByaXZhdGUgbWVtbzoge1xuICAgIGZvclR5cGU6IHtcbiAgICAgIGVudW06IHsgW3R5cGU6IHN0cmluZ106IE9EYXRhRW51bVR5cGU8YW55PiB8IHVuZGVmaW5lZCB9O1xuICAgICAgc3RydWN0dXJlZDogeyBbdHlwZTogc3RyaW5nXTogT0RhdGFTdHJ1Y3R1cmVkVHlwZTxhbnk+IHwgdW5kZWZpbmVkIH07XG4gICAgICBjYWxsYWJsZTogeyBba2V5OiBzdHJpbmddOiBPRGF0YUNhbGxhYmxlPGFueT4gfCB1bmRlZmluZWQgfTtcbiAgICAgIGVudGl0eVNldDogeyBbdHlwZTogc3RyaW5nXTogT0RhdGFFbnRpdHlTZXQgfCB1bmRlZmluZWQgfTtcbiAgICAgIHBhcnNlcjogeyBbdHlwZTogc3RyaW5nXTogUGFyc2VyPGFueT4gfTtcbiAgICAgIG9wdGlvbnM6IHsgW3R5cGU6IHN0cmluZ106IE9EYXRhTW9kZWxPcHRpb25zPGFueT4gfCB1bmRlZmluZWQgfTtcbiAgICB9O1xuICAgIGJ5TmFtZToge1xuICAgICAgZW51bTogeyBbdHlwZTogc3RyaW5nXTogT0RhdGFFbnVtVHlwZTxhbnk+IHwgdW5kZWZpbmVkIH07XG4gICAgICBzdHJ1Y3R1cmVkOiB7IFt0eXBlOiBzdHJpbmddOiBPRGF0YVN0cnVjdHVyZWRUeXBlPGFueT4gfCB1bmRlZmluZWQgfTtcbiAgICAgIGNhbGxhYmxlOiB7IFtrZXk6IHN0cmluZ106IE9EYXRhQ2FsbGFibGU8YW55PiB8IHVuZGVmaW5lZCB9O1xuICAgICAgZW50aXR5U2V0OiB7IFt0eXBlOiBzdHJpbmddOiBPRGF0YUVudGl0eVNldCB8IHVuZGVmaW5lZCB9O1xuICAgIH07XG4gIH0gPSB7XG4gICAgZm9yVHlwZToge1xuICAgICAgZW51bToge30sXG4gICAgICBzdHJ1Y3R1cmVkOiB7fSxcbiAgICAgIGNhbGxhYmxlOiB7fSxcbiAgICAgIGVudGl0eVNldDoge30sXG4gICAgICBwYXJzZXI6IHt9LFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgICBieU5hbWU6IHsgZW51bToge30sIHN0cnVjdHVyZWQ6IHt9LCBjYWxsYWJsZToge30sIGVudGl0eVNldDoge30gfSxcbiAgfTtcblxuICBwcml2YXRlIGZpbmRTY2hlbWFGb3JUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNjaGVtYXMgPSB0aGlzLnNjaGVtYXMuZmlsdGVyKChzKSA9PiBzLmlzTmFtZXNwYWNlT2YodHlwZSkpO1xuICAgIGlmIChzY2hlbWFzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoc2NoZW1hcy5sZW5ndGggPT09IDEpIHJldHVybiBzY2hlbWFzWzBdO1xuICAgIHJldHVybiBzY2hlbWFzXG4gICAgICAuc29ydCgoczEsIHMyKSA9PiBzMS5uYW1lc3BhY2UubGVuZ3RoIC0gczIubmFtZXNwYWNlLmxlbmd0aClcbiAgICAgIC5wb3AoKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRW51bVR5cGVGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZykge1xuICAgIGlmICghKHR5cGUgaW4gdGhpcy5tZW1vLmZvclR5cGUuZW51bSkpXG4gICAgICB0aGlzLm1lbW8uZm9yVHlwZS5lbnVtW3R5cGVdID1cbiAgICAgICAgdGhpcy5maW5kU2NoZW1hRm9yVHlwZSh0eXBlKT8uZmluZEVudW1UeXBlRm9yVHlwZTxUPih0eXBlKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUuZW51bVt0eXBlXSBhcyBPRGF0YUVudW1UeXBlPFQ+IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8VD4odHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCEodHlwZSBpbiB0aGlzLm1lbW8uZm9yVHlwZS5zdHJ1Y3R1cmVkKSlcbiAgICAgIHRoaXMubWVtby5mb3JUeXBlLnN0cnVjdHVyZWRbdHlwZV0gPVxuICAgICAgICB0aGlzLmZpbmRTY2hlbWFGb3JUeXBlKHR5cGUpPy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGUpO1xuICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5zdHJ1Y3R1cmVkW3R5cGVdIGFzXG4gICAgICB8IE9EYXRhU3RydWN0dXJlZFR5cGU8VD5cbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRDYWxsYWJsZUZvclR5cGU8VD4odHlwZTogc3RyaW5nLCBiaW5kaW5nVHlwZT86IHN0cmluZykge1xuICAgIGNvbnN0IGtleSA9IGJpbmRpbmdUeXBlICE9PSB1bmRlZmluZWQgPyBgJHtiaW5kaW5nVHlwZX0vJHt0eXBlfWAgOiB0eXBlO1xuICAgIGlmICghKGtleSBpbiB0aGlzLm1lbW8uZm9yVHlwZS5jYWxsYWJsZSkpXG4gICAgICB0aGlzLm1lbW8uZm9yVHlwZS5jYWxsYWJsZVtrZXldID0gdGhpcy5maW5kU2NoZW1hRm9yVHlwZShcbiAgICAgICAgdHlwZVxuICAgICAgKT8uZmluZENhbGxhYmxlRm9yVHlwZTxUPih0eXBlLCBiaW5kaW5nVHlwZSk7XG4gICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLmNhbGxhYmxlW2tleV0gYXMgT0RhdGFDYWxsYWJsZTxUPiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRW50aXR5U2V0Rm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoISh0eXBlIGluIHRoaXMubWVtby5mb3JUeXBlLmVudGl0eVNldCkpXG4gICAgICB0aGlzLm1lbW8uZm9yVHlwZS5lbnRpdHlTZXRbdHlwZV0gPVxuICAgICAgICB0aGlzLmZpbmRTY2hlbWFGb3JUeXBlKHR5cGUpPy5maW5kRW50aXR5U2V0Rm9yVHlwZSh0eXBlKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0W3R5cGVdIGFzIE9EYXRhRW50aXR5U2V0IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRNb2RlbEZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxhbnk+KHR5cGUpPy5tb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBtb2RlbEZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgbGV0IE1vZGVsID0gdGhpcy5maW5kTW9kZWxGb3JUeXBlKHR5cGUpO1xuICAgIGlmIChNb2RlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBCdWlsZCBBZC1ob2MgbW9kZWxcbiAgICAgIGxldCBzY2hlbWEgPSB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8YW55Pih0eXBlKTtcbiAgICAgIGlmIChzY2hlbWEgPT09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoYE5vIHNjaGVtYSBmb3IgJHt0eXBlfWApO1xuICAgICAgTW9kZWwgPSBjbGFzcyBleHRlbmRzIE9EYXRhTW9kZWw8YW55PiB7fSBhcyB0eXBlb2YgT0RhdGFNb2RlbDtcbiAgICAgIC8vIEJ1aWxkIE1ldGFcbiAgICAgIE1vZGVsLmJ1aWxkTWV0YSh7IHNjaGVtYSB9KTtcbiAgICAgIC8vIENvbmZpZ3VyZVxuICAgICAgTW9kZWwubWV0YS5jb25maWd1cmUoe1xuICAgICAgICBmaW5kT3B0aW9uc0ZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMuZmluZE9wdGlvbnNGb3JUeXBlKHR5cGUpLFxuICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICB9KTtcbiAgICAgIC8vIFN0b3JlIE5ldyBNb2RlbCBmb3IgbmV4dCB0aW1lXG4gICAgICBzY2hlbWEubW9kZWwgPSBNb2RlbDtcbiAgICB9XG4gICAgcmV0dXJuIE1vZGVsO1xuICB9XG5cbiAgcHVibGljIGZpbmRDb2xsZWN0aW9uRm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPGFueT4odHlwZSk/LmNvbGxlY3Rpb247XG4gIH1cblxuICBwdWJsaWMgY29sbGVjdGlvbkZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgbGV0IENvbGxlY3Rpb24gPSB0aGlzLmZpbmRDb2xsZWN0aW9uRm9yVHlwZSh0eXBlKTtcbiAgICBpZiAoQ29sbGVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgc2NoZW1hID0gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPGFueT4odHlwZSk7XG4gICAgICBpZiAoc2NoZW1hID09PSB1bmRlZmluZWQpIHRocm93IEVycm9yKCcnKTtcbiAgICAgIENvbGxlY3Rpb24gPSBjbGFzcyBleHRlbmRzIE9EYXRhQ29sbGVjdGlvbjxcbiAgICAgICAgYW55LFxuICAgICAgICBPRGF0YU1vZGVsPGFueT5cbiAgICAgID4ge30gYXMgdHlwZW9mIE9EYXRhQ29sbGVjdGlvbjtcbiAgICAgIENvbGxlY3Rpb24ubW9kZWwgPSB0aGlzLm1vZGVsRm9yVHlwZSh0eXBlKTtcbiAgICAgIC8vIFN0b3JlIE5ldyBDb2xsZWN0aW9uIGZvciBuZXh0IHRpbWVcbiAgICAgIHNjaGVtYS5jb2xsZWN0aW9uID0gQ29sbGVjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIENvbGxlY3Rpb247XG4gIH1cblxuICBwdWJsaWMgZmluZFNlcnZpY2VGb3JUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRFbnRpdHlTZXRGb3JUeXBlKHR5cGUpPy5zZXJ2aWNlIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUVudGl0eVNlcnZpY2VcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnRpdHlTZXRGb3JFbnRpdHlUeXBlKGVudGl0eVR5cGU6IHN0cmluZykge1xuICAgIGlmICghKGVudGl0eVR5cGUgaW4gdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0KSlcbiAgICAgIHRoaXMubWVtby5mb3JUeXBlLmVudGl0eVNldFtlbnRpdHlUeXBlXSA9IHRoaXMuc2NoZW1hc1xuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgIChhY2MsIHNjaGVtYSkgPT4gWy4uLmFjYywgLi4uc2NoZW1hLmVudGl0eVNldHNdLFxuICAgICAgICAgIDxPRGF0YUVudGl0eVNldFtdPltdXG4gICAgICAgIClcbiAgICAgICAgLmZpbmQoKGUpID0+IGUuZW50aXR5VHlwZSA9PT0gZW50aXR5VHlwZSk7XG4gICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLmVudGl0eVNldFtlbnRpdHlUeXBlXSBhc1xuICAgICAgfCBPRGF0YUVudGl0eVNldFxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZFNlcnZpY2VGb3JFbnRpdHlUeXBlKGVudGl0eVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRFbnRpdHlTZXRGb3JFbnRpdHlUeXBlKGVudGl0eVR5cGUpPy5zZXJ2aWNlIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUVudGl0eVNlcnZpY2VcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnVtVHlwZUJ5TmFtZTxUPihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMubWVtby5ieU5hbWUuZW51bSkpXG4gICAgICB0aGlzLm1lbW8uYnlOYW1lLmVudW1bbmFtZV0gPSB0aGlzLnNjaGVtYXNcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBzY2hlbWEpID0+IFsuLi5hY2MsIC4uLnNjaGVtYS5lbnVtc10sXG4gICAgICAgICAgPE9EYXRhRW51bVR5cGU8VD5bXT5bXVxuICAgICAgICApXG4gICAgICAgIC5maW5kKChlKSA9PiBlLm5hbWUgPT09IG5hbWUpO1xuICAgIHJldHVybiB0aGlzLm1lbW8uYnlOYW1lLmVudW1bbmFtZV0gYXMgT0RhdGFFbnVtVHlwZTxUPiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kU3RydWN0dXJlZFR5cGVCeU5hbWU8VD4obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCEobmFtZSBpbiB0aGlzLm1lbW8uYnlOYW1lLnN0cnVjdHVyZWQpKVxuICAgICAgdGhpcy5tZW1vLmJ5TmFtZS5zdHJ1Y3R1cmVkW25hbWVdID0gdGhpcy5zY2hlbWFzXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuZW50aXRpZXNdLFxuICAgICAgICAgIDxPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+W10+W11cbiAgICAgICAgKVxuICAgICAgICAuZmluZCgoZSkgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmJ5TmFtZS5zdHJ1Y3R1cmVkW25hbWVdIGFzXG4gICAgICB8IE9EYXRhU3RydWN0dXJlZFR5cGU8VD5cbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRDYWxsYWJsZUJ5TmFtZTxUPihuYW1lOiBzdHJpbmcsIGJpbmRpbmdUeXBlPzogc3RyaW5nKSB7XG4gICAgY29uc3Qga2V5ID0gYmluZGluZ1R5cGUgIT09IHVuZGVmaW5lZCA/IGAke2JpbmRpbmdUeXBlfS8ke25hbWV9YCA6IG5hbWU7XG4gICAgaWYgKCEoa2V5IGluIHRoaXMubWVtby5ieU5hbWUuY2FsbGFibGUpKVxuICAgICAgdGhpcy5tZW1vLmJ5TmFtZS5jYWxsYWJsZVtrZXldID0gdGhpcy5zY2hlbWFzXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuY2FsbGFibGVzXSxcbiAgICAgICAgICA8T0RhdGFDYWxsYWJsZTxUPltdPltdXG4gICAgICAgIClcbiAgICAgICAgLmZpbmQoXG4gICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICBjLm5hbWUgPT09IG5hbWUgJiZcbiAgICAgICAgICAgIChiaW5kaW5nVHlwZSA9PT0gdW5kZWZpbmVkIHx8IGMuYmluZGluZygpPy50eXBlID09PSBiaW5kaW5nVHlwZSlcbiAgICAgICAgKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmJ5TmFtZS5jYWxsYWJsZVtrZXldIGFzIE9EYXRhQ2FsbGFibGU8VD4gfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZEVudGl0eVNldEJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMubWVtby5ieU5hbWUuZW50aXR5U2V0KSlcbiAgICAgIHRoaXMubWVtby5ieU5hbWUuZW50aXR5U2V0W25hbWVdID0gdGhpcy5zY2hlbWFzXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuZW50aXR5U2V0c10sXG4gICAgICAgICAgPE9EYXRhRW50aXR5U2V0W10+W11cbiAgICAgICAgKVxuICAgICAgICAuZmluZCgoZSkgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmJ5TmFtZS5lbnRpdHlTZXRbbmFtZV0gYXMgT0RhdGFFbnRpdHlTZXQgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZE1vZGVsQnlOYW1lKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUJ5TmFtZTxhbnk+KG5hbWUpPy5tb2RlbCBhc1xuICAgICAgfCB0eXBlb2YgT0RhdGFNb2RlbFxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZENvbGxlY3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlQnlOYW1lPGFueT4obmFtZSk/LmNvbGxlY3Rpb24gYXNcbiAgICAgIHwgdHlwZW9mIE9EYXRhQ29sbGVjdGlvblxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZFNlcnZpY2VCeU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZEVudGl0eVNldEJ5TmFtZShuYW1lKT8uc2VydmljZSBhc1xuICAgICAgfCB0eXBlb2YgT0RhdGFFbnRpdHlTZXJ2aWNlXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBwYXJzZXJGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZywgYmluZGluZ1R5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSBiaW5kaW5nVHlwZSAhPT0gdW5kZWZpbmVkID8gYCR7YmluZGluZ1R5cGV9LyR7dHlwZX1gIDogdHlwZTtcbiAgICBpZiAoIShrZXkgaW4gdGhpcy5tZW1vLmZvclR5cGUucGFyc2VyKSkge1xuICAgICAgaWYgKHR5cGUgaW4gdGhpcy5wYXJzZXJzKSB7XG4gICAgICAgIC8vIEVkbSwgQmFzZSBQYXJzZXJzXG4gICAgICAgIHRoaXMubWVtby5mb3JUeXBlLnBhcnNlcltrZXldID0gdGhpcy5wYXJzZXJzW3R5cGVdIGFzIFBhcnNlcjxUPjtcbiAgICAgIH0gZWxzZSBpZiAoIXR5cGUuc3RhcnRzV2l0aCgnRWRtLicpKSB7XG4gICAgICAgIC8vIEVudW1UeXBlLCBDb21wbGV4VHlwZSBhbmQgRW50aXR5VHlwZSBQYXJzZXJzXG4gICAgICAgIGxldCB2YWx1ZSA9XG4gICAgICAgICAgdGhpcy5maW5kQ2FsbGFibGVGb3JUeXBlPFQ+KHR5cGUsIGJpbmRpbmdUeXBlKSB8fFxuICAgICAgICAgIHRoaXMuZmluZEVudW1UeXBlRm9yVHlwZTxUPih0eXBlKSB8fFxuICAgICAgICAgIHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxUPih0eXBlKTtcbiAgICAgICAgdGhpcy5tZW1vLmZvclR5cGUucGFyc2VyW2tleV0gPSB2YWx1ZT8ucGFyc2VyIGFzIFBhcnNlcjxUPjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vbmUgUGFyc2VyXG4gICAgICAgIHRoaXMubWVtby5mb3JUeXBlLnBhcnNlcltrZXldID0gTk9ORV9QQVJTRVI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5wYXJzZXJba2V5XSBhcyBQYXJzZXI8VD47XG4gIH1cblxuICBwdWJsaWMgZmluZE9wdGlvbnNGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZykge1xuICAgIC8vIFN0cnVjdXRyZWQgT3B0aW9uc1xuICAgIGlmICghKHR5cGUgaW4gdGhpcy5tZW1vLmZvclR5cGUub3B0aW9ucykpIHtcbiAgICAgIGxldCBzdCA9IHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxUPih0eXBlKTtcbiAgICAgIHRoaXMubWVtby5mb3JUeXBlLm9wdGlvbnNbdHlwZV0gPVxuICAgICAgICBzdCAhPT0gdW5kZWZpbmVkICYmIHN0Lm1vZGVsICE9PSB1bmRlZmluZWQgJiYgc3QubW9kZWw/Lm1ldGEgIT09IG51bGxcbiAgICAgICAgICA/IHN0Lm1vZGVsLm1ldGFcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLm9wdGlvbnNbdHlwZV0gYXMgT0RhdGFNb2RlbE9wdGlvbnM8VD4gfCB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|