angular-odata 0.102.5 → 0.105.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 +4 -2
- package/esm2020/lib/client.mjs +3 -3
- package/esm2020/lib/helper.mjs +7 -10
- package/esm2020/lib/models/collection.mjs +10 -4
- package/esm2020/lib/models/model.mjs +9 -6
- package/esm2020/lib/models/options.mjs +44 -23
- package/esm2020/lib/module.mjs +4 -4
- package/esm2020/lib/options.mjs +8 -2
- package/esm2020/lib/resources/query/expressions/compute.mjs +3 -9
- package/esm2020/lib/resources/query/expressions/expand.mjs +3 -9
- package/esm2020/lib/resources/query/expressions/filter.mjs +11 -14
- package/esm2020/lib/resources/query/expressions/orderby.mjs +3 -9
- package/esm2020/lib/resources/query/expressions/search.mjs +2 -5
- package/esm2020/lib/resources/query/expressions/select.mjs +3 -9
- package/esm2020/lib/resources/query/expressions/syntax.mjs +12 -7
- package/esm2020/lib/resources/query/options.mjs +9 -3
- package/esm2020/lib/resources/resource.mjs +7 -10
- package/esm2020/lib/resources/responses/annotations.mjs +7 -1
- package/esm2020/lib/schema/callable.mjs +4 -4
- package/esm2020/lib/schema/enum-type.mjs +9 -6
- package/esm2020/lib/schema/parsers/callable.mjs +9 -11
- package/esm2020/lib/schema/parsers/edm.mjs +11 -3
- package/esm2020/lib/schema/parsers/enum-type.mjs +21 -23
- package/esm2020/lib/schema/parsers/structured-type.mjs +10 -10
- package/esm2020/lib/schema/schema.mjs +5 -5
- package/esm2020/lib/schema/structured-type.mjs +6 -4
- package/esm2020/lib/services/factory.mjs +3 -3
- package/esm2020/lib/types.mjs +1 -1
- package/esm2020/lib/utils/enums.mjs +1 -1
- package/fesm2015/angular-odata.mjs +214 -212
- package/fesm2015/angular-odata.mjs.map +1 -1
- package/fesm2020/angular-odata.mjs +202 -174
- package/fesm2020/angular-odata.mjs.map +1 -1
- package/lib/helper.d.ts +3 -0
- package/lib/models/collection.d.ts +3 -2
- package/lib/models/options.d.ts +12 -6
- package/lib/options.d.ts +8 -2
- package/lib/resources/query/expressions/compute.d.ts +1 -3
- package/lib/resources/query/expressions/expand.d.ts +1 -3
- package/lib/resources/query/expressions/filter.d.ts +2 -4
- package/lib/resources/query/expressions/orderby.d.ts +1 -3
- package/lib/resources/query/expressions/search.d.ts +0 -1
- package/lib/resources/query/expressions/select.d.ts +1 -3
- package/lib/resources/responses/annotations.d.ts +3 -0
- package/lib/schema/callable.d.ts +3 -1
- package/lib/schema/enum-type.d.ts +8 -2
- package/lib/schema/parsers/callable.d.ts +6 -6
- package/lib/schema/parsers/enum-type.d.ts +5 -10
- package/lib/schema/parsers/structured-type.d.ts +7 -5
- package/lib/schema/schema.d.ts +3 -2
- package/lib/schema/structured-type.d.ts +4 -3
- package/lib/types.d.ts +4 -1
- package/package.json +1 -1
|
@@ -422,11 +422,14 @@ export class ODataModel {
|
|
|
422
422
|
if (model === null)
|
|
423
423
|
return null;
|
|
424
424
|
if (model === undefined) {
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
425
|
+
if (field.collection) {
|
|
426
|
+
model = field.collectionFactory({ parent: this });
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
const value = this.referenced(field);
|
|
430
|
+
model =
|
|
431
|
+
value === null ? null : field.modelFactory({ parent: this, value });
|
|
432
|
+
}
|
|
430
433
|
this[name] = model;
|
|
431
434
|
}
|
|
432
435
|
return model;
|
|
@@ -459,4 +462,4 @@ export class ODataModel {
|
|
|
459
462
|
}
|
|
460
463
|
}
|
|
461
464
|
export const RESERVED_FIELD_NAMES = Object.getOwnPropertyNames(ODataModel.prototype);
|
|
462
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvbW9kZWxzL21vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFLTCxtQkFBbUIsRUFFbkIsK0JBQStCLEdBT2hDLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUVmLGVBQWUsRUFFZixpQkFBaUIsR0FFbEIsTUFBTSxXQUFXLENBQUM7QUFFbkIsV0FBVztBQUNYLE1BQU0sT0FBTyxVQUFVO0lBc0RyQixZQUNFLE9BQTZDLEVBQUUsRUFDL0MsRUFDRSxNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEdBQUcsS0FBSyxNQVNYLEVBQUU7UUFyQ1IsU0FBUztRQUNULFlBQU8sR0FLSSxJQUFJLENBQUM7UUFDaEIsZ0JBQVcsR0FBcUIsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUN2RCxhQUFRLEdBQXFCLElBQUksR0FBRyxFQUFlLENBQUM7UUFDcEQsZUFBVSxHQUF5QyxJQUFJLEdBQUcsRUFHdkQsQ0FBQztRQUNKLGNBQVMsR0FBNEIsSUFBSSxDQUFDO1FBRTFDLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixZQUFP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QztJQUNoQixDQUFDO0lBRUQsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQzVELFVBQVUsQ0FBQyxTQUFTLENBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZvcmtKb2luLCBORVZFUiwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRW50aXR5S2V5LFxuICBPRGF0YUFjdGlvbk9wdGlvbnMsXG4gIE9EYXRhRW50aXR5LFxuICBPRGF0YUVudGl0eUFubm90YXRpb25zLFxuICBPRGF0YUVudGl0eVJlc291cmNlLFxuICBPRGF0YUZ1bmN0aW9uT3B0aW9ucyxcbiAgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSxcbiAgT0RhdGFPcHRpb25zLFxuICBPRGF0YVByb3BlcnR5UmVzb3VyY2UsXG4gIE9EYXRhUXVlcnlBcmd1bWVudHNPcHRpb25zLFxuICBPRGF0YVF1ZXJ5T3B0aW9uc0hhbmRsZXIsXG4gIE9EYXRhUmVzb3VyY2UsXG4gIE9EYXRhU2luZ2xldG9uUmVzb3VyY2UsXG59IGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBPRGF0YVN0cnVjdHVyZWRUeXBlIH0gZnJvbSAnLi4vc2NoZW1hJztcbmltcG9ydCB7IE9iamVjdHMsIFN0cmluZ3MsIFR5cGVzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgT0RhdGFDb2xsZWN0aW9uIH0gZnJvbSAnLi9jb2xsZWN0aW9uJztcbmltcG9ydCB7XG4gIElOQ0xVREVfREVFUCxcbiAgSU5DTFVERV9TSEFMTE9XLFxuICBNb2RlbE9wdGlvbnMsXG4gIE9EYXRhTW9kZWxFdmVudCxcbiAgT0RhdGFNb2RlbEZpZWxkLFxuICBPRGF0YU1vZGVsT3B0aW9ucyxcbiAgT0RhdGFNb2RlbFJlbGF0aW9uLFxufSBmcm9tICcuL29wdGlvbnMnO1xuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIE9EYXRhTW9kZWw8VD4ge1xuICAvLyBQcm9wZXJ0aWVzXG4gIHN0YXRpYyBvcHRpb25zOiBNb2RlbE9wdGlvbnM7XG4gIHN0YXRpYyBtZXRhOiBPRGF0YU1vZGVsT3B0aW9uczxhbnk+O1xuICBzdGF0aWMgYnVpbGRNZXRhPFQ+KHtcbiAgICBvcHRpb25zLFxuICAgIHNjaGVtYSxcbiAgfToge1xuICAgIG9wdGlvbnM/OiBNb2RlbE9wdGlvbnM7XG4gICAgc2NoZW1hOiBPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+O1xuICB9KSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IGZpZWxkcyA9IHNjaGVtYVxuICAgICAgICAuZmllbGRzKHsgaW5jbHVkZV9uYXZpZ2F0aW9uOiB0cnVlLCBpbmNsdWRlX3BhcmVudHM6IHRydWUgfSlcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBmKSA9PiB7XG4gICAgICAgICAgbGV0IG5hbWUgPSBmLm5hbWU7XG4gICAgICAgICAgLy8gUHJldmVudCBjb2xsaXNpb24gd2l0aCByZXNlcnZlZCBrZXl3b3Jkc1xuICAgICAgICAgIHdoaWxlIChSRVNFUlZFRF9GSUVMRF9OQU1FUy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUgKyAnXyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjYywge1xuICAgICAgICAgICAgW25hbWVdOiB7XG4gICAgICAgICAgICAgIGZpZWxkOiBmLm5hbWUsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGYuZGVmYXVsdCxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6ICFmLm51bGxhYmxlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwge30pO1xuICAgICAgb3B0aW9ucyA9IHsgZmllbGRzIH07XG4gICAgfVxuICAgIHRoaXMubWV0YSA9IG5ldyBPRGF0YU1vZGVsT3B0aW9uczxUPih7IG9wdGlvbnMsIHNjaGVtYSB9KTtcbiAgfVxuICAvLyBQYXJlbnRcbiAgX3BhcmVudDpcbiAgICB8IFtcbiAgICAgICAgT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PixcbiAgICAgICAgT0RhdGFNb2RlbEZpZWxkPGFueT4gfCBudWxsXG4gICAgICBdXG4gICAgfCBudWxsID0gbnVsbDtcbiAgX2F0dHJpYnV0ZXM6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICBfY2hhbmdlczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gIF9yZWxhdGlvbnM6IE1hcDxzdHJpbmcsIE9EYXRhTW9kZWxSZWxhdGlvbjxhbnk+PiA9IG5ldyBNYXA8XG4gICAgc3RyaW5nLFxuICAgIE9EYXRhTW9kZWxSZWxhdGlvbjxhbnk+XG4gID4oKTtcbiAgX3Jlc291cmNlOiBPRGF0YVJlc291cmNlPFQ+IHwgbnVsbCA9IG51bGw7XG4gIF9hbm5vdGF0aW9ucyE6IE9EYXRhRW50aXR5QW5ub3RhdGlvbnM7XG4gIF9yZXNldDogYm9vbGVhbiA9IGZhbHNlO1xuICBfcmVwYXJlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgX3NpbGVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBfbWV0YTogT0RhdGFNb2RlbE9wdGlvbnM8VD47XG4gIC8vIEV2ZW50c1xuICBldmVudHMkID0gbmV3IEV2ZW50RW1pdHRlcjxPRGF0YU1vZGVsRXZlbnQ8VD4+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZGF0YTogUGFydGlhbDxUPiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9ID0ge30sXG4gICAge1xuICAgICAgcGFyZW50LFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBhbm5vdHMsXG4gICAgICByZXNldCA9IGZhbHNlLFxuICAgIH06IHtcbiAgICAgIHBhcmVudD86IFtcbiAgICAgICAgT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PixcbiAgICAgICAgT0RhdGFNb2RlbEZpZWxkPGFueT4gfCBudWxsXG4gICAgICBdO1xuICAgICAgcmVzb3VyY2U/OiBPRGF0YVJlc291cmNlPFQ+O1xuICAgICAgYW5ub3RzPzogT0RhdGFFbnRpdHlBbm5vdGF0aW9ucztcbiAgICAgIHJlc2V0PzogYm9vbGVhbjtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgY29uc3QgS2xhc3MgPSB0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBPRGF0YU1vZGVsO1xuICAgIGlmIChLbGFzcy5tZXRhID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE9EYXRhTW9kZWw6IENhbid0IGNyZWF0ZSBtb2RlbCB3aXRob3V0IG1ldGFkYXRhYCk7XG4gICAgdGhpcy5fbWV0YSA9IEtsYXNzLm1ldGE7XG4gICAgdGhpcy5fbWV0YS5iaW5kKHRoaXMsIHsgcGFyZW50LCByZXNvdXJjZSwgYW5ub3RzIH0pO1xuXG4gICAgLy8gQ2xpZW50IElkXG4gICAgKDxhbnk+dGhpcylbdGhpcy5fbWV0YS5jaWRdID1cbiAgICAgICg8YW55PmRhdGEpW3RoaXMuX21ldGEuY2lkXSB8fFxuICAgICAgU3RyaW5ncy51bmlxdWVJZChgJHtLbGFzcy5tZXRhLnNjaGVtYS5uYW1lLnRvTG93ZXJDYXNlKCl9LWApO1xuXG4gICAgbGV0IGF0dHJzID0gdGhpcy5hbm5vdHMoKS5hdHRyaWJ1dGVzPFQ+KGRhdGEsICdmdWxsJyk7XG4gICAgbGV0IGRlZmF1bHRzID0gdGhpcy5kZWZhdWx0cygpO1xuXG4gICAgdGhpcy5hc3NpZ24oT2JqZWN0cy5tZXJnZShkZWZhdWx0cywgYXR0cnMpLCB7IHJlc2V0IH0pO1xuICB9XG5cbiAgLy8jcmVnaW9uIFJlc291cmNlc1xuICByZXNvdXJjZSgpOlxuICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPlxuICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPFQ+IHtcbiAgICByZXR1cm4gT0RhdGFNb2RlbE9wdGlvbnMucmVzb3VyY2U8VD4odGhpcykgYXNcbiAgICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPFQ+O1xuICB9XG5cbiAgbmF2aWdhdGlvblByb3BlcnR5PE4+KFxuICAgIG5hbWU6IGtleW9mIFQgfCBzdHJpbmdcbiAgKTogT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxOPiB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLl9tZXRhLmZpZWxkKG5hbWUpO1xuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkIHx8ICFmaWVsZC5uYXZpZ2F0aW9uKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBuYXZpZ2F0aW9uUHJvcGVydHk6IENhbid0IGZpbmQgbmF2aWdhdGlvbiBwcm9wZXJ0eSAke25hbWUgYXMgc3RyaW5nfWBcbiAgICAgICk7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcbiAgICBpZiAoIShyZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5UmVzb3VyY2UpIHx8ICFyZXNvdXJjZS5oYXNLZXkoKSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcIm5hdmlnYXRpb25Qcm9wZXJ0eTogQ2FuJ3QgZ2V0IG5hdmlnYXRpb24gd2l0aG91dCBPRGF0YUVudGl0eVJlc291cmNlIHdpdGgga2V5XCJcbiAgICAgICk7XG5cbiAgICByZXR1cm4gZmllbGQucmVzb3VyY2VGYWN0b3J5PFQsIE4+KFxuICAgICAgcmVzb3VyY2VcbiAgICApIGFzIE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8Tj47XG4gIH1cblxuICBwcm9wZXJ0eTxOPihuYW1lOiBzdHJpbmcpOiBPRGF0YVByb3BlcnR5UmVzb3VyY2U8Tj4ge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fbWV0YS5maWVsZChuYW1lKTtcbiAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCB8fCBmaWVsZC5uYXZpZ2F0aW9uKVxuICAgICAgdGhyb3cgRXJyb3IoYHByb3BlcnR5OiBDYW4ndCBmaW5kIHByb3BlcnR5ICR7bmFtZX1gKTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgIGlmICghKHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFFbnRpdHlSZXNvdXJjZSkgfHwgIXJlc291cmNlLmhhc0tleSgpKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwicHJvcGVydHk6IENhbid0IGdldCBwcm9wZXJ0eSB3aXRob3V0IE9EYXRhRW50aXR5UmVzb3VyY2Ugd2l0aCBrZXlcIlxuICAgICAgKTtcblxuICAgIHJldHVybiBmaWVsZC5yZXNvdXJjZUZhY3Rvcnk8VCwgTj4ocmVzb3VyY2UpIGFzIE9EYXRhUHJvcGVydHlSZXNvdXJjZTxOPjtcbiAgfVxuXG4gIGF0dGFjaDxSPihcbiAgICByZXNvdXJjZTpcbiAgICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxSPlxuICAgICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFI+XG4gICAgICB8IE9EYXRhUHJvcGVydHlSZXNvdXJjZTxSPlxuICAgICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPFI+XG4gICkge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLmF0dGFjaDxSPih0aGlzLCByZXNvdXJjZSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgc2NoZW1hKCkge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLnNjaGVtYTtcbiAgfVxuXG4gIGFubm90cygpIHtcbiAgICByZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnM7XG4gIH1cblxuICBrZXkoe1xuICAgIGZpZWxkX21hcHBpbmcgPSBmYWxzZSxcbiAgICByZXNvbHZlID0gdHJ1ZSxcbiAgfTogeyBmaWVsZF9tYXBwaW5nPzogYm9vbGVhbjsgcmVzb2x2ZT86IGJvb2xlYW4gfSA9IHt9KTpcbiAgICB8IEVudGl0eUtleTxUPlxuICAgIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1cbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEucmVzb2x2ZUtleSh0aGlzLCB7IGZpZWxkX21hcHBpbmcsIHJlc29sdmUgfSk7XG4gIH1cblxuICBpc05ldygpIHtcbiAgICByZXR1cm4gdGhpcy5rZXkoKSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaXNQYXJlbnRPZihcbiAgICBjaGlsZDogT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PlxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgY2hpbGQgIT09IHRoaXMgJiZcbiAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmNoYWluKGNoaWxkKS5zb21lKChwKSA9PiBwWzBdID09PSB0aGlzKVxuICAgICk7XG4gIH1cblxuICByZWZlcmVudGlhbChcbiAgICBmaWVsZDogT0RhdGFNb2RlbEZpZWxkPGFueT4sXG4gICAge1xuICAgICAgZmllbGRfbWFwcGluZyA9IGZhbHNlLFxuICAgICAgcmVzb2x2ZSA9IHRydWUsXG4gICAgfTogeyBmaWVsZF9tYXBwaW5nPzogYm9vbGVhbjsgcmVzb2x2ZT86IGJvb2xlYW4gfSA9IHt9XG4gICk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEucmVzb2x2ZVJlZmVyZW50aWFsKHRoaXMsIGZpZWxkLCB7XG4gICAgICBmaWVsZF9tYXBwaW5nLFxuICAgICAgcmVzb2x2ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHJlZmVyZW5jZWQoXG4gICAgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+LFxuICAgIHtcbiAgICAgIGZpZWxkX21hcHBpbmcgPSBmYWxzZSxcbiAgICAgIHJlc29sdmUgPSB0cnVlLFxuICAgIH06IHsgZmllbGRfbWFwcGluZz86IGJvb2xlYW47IHJlc29sdmU/OiBib29sZWFuIH0gPSB7fVxuICApOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLnJlc29sdmVSZWZlcmVuY2VkKHRoaXMsIGZpZWxkLCB7XG4gICAgICBmaWVsZF9tYXBwaW5nLFxuICAgICAgcmVzb2x2ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRpb25cbiAgX2Vycm9ycz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIHZhbGlkYXRlKHtcbiAgICBtZXRob2QsXG4gICAgbmF2aWdhdGlvbiA9IGZhbHNlLFxuICB9OiB7XG4gICAgbWV0aG9kPzogJ2NyZWF0ZScgfCAndXBkYXRlJyB8ICdtb2RpZnknO1xuICAgIG5hdmlnYXRpb24/OiBib29sZWFuO1xuICB9ID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS52YWxpZGF0ZSh0aGlzLCB7IG1ldGhvZCwgbmF2aWdhdGlvbiB9KTtcbiAgfVxuXG4gIGlzVmFsaWQoe1xuICAgIG1ldGhvZCxcbiAgICBuYXZpZ2F0aW9uID0gZmFsc2UsXG4gIH06IHtcbiAgICBtZXRob2Q/OiAnY3JlYXRlJyB8ICd1cGRhdGUnIHwgJ21vZGlmeSc7XG4gICAgbmF2aWdhdGlvbj86IGJvb2xlYW47XG4gIH0gPSB7fSk6IGJvb2xlYW4ge1xuICAgIHRoaXMuX2Vycm9ycyA9IHRoaXMudmFsaWRhdGUoeyBtZXRob2QsIG5hdmlnYXRpb24gfSk7XG4gICAgaWYgKHRoaXMuX2Vycm9ycyAhPT0gdW5kZWZpbmVkKVxuICAgICAgdGhpcy5ldmVudHMkLmVtaXQoXG4gICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ2ludmFsaWQnLCB7XG4gICAgICAgICAgbW9kZWw6IHRoaXMsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuX2Vycm9ycyxcbiAgICAgICAgICBvcHRpb25zOiB7IG1ldGhvZCB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JzID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICBkZWZhdWx0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS5kZWZhdWx0cygpIHx8IHt9O1xuICB9XG5cbiAgdG9FbnRpdHkoe1xuICAgIGNsaWVudF9pZCA9IGZhbHNlLFxuICAgIGluY2x1ZGVfbmF2aWdhdGlvbiA9IGZhbHNlLFxuICAgIGluY2x1ZGVfY29uY3VycmVuY3kgPSBmYWxzZSxcbiAgICBpbmNsdWRlX2NvbXB1dGVkID0gZmFsc2UsXG4gICAgaW5jbHVkZV9rZXkgPSB0cnVlLFxuICAgIGluY2x1ZGVfbm9uX2ZpZWxkID0gZmFsc2UsXG4gICAgY2hhbmdlc19vbmx5ID0gZmFsc2UsXG4gICAgZmllbGRfbWFwcGluZyA9IGZhbHNlLFxuICAgIGNoYWluID0gW10sXG4gIH06IHtcbiAgICBjbGllbnRfaWQ/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfbmF2aWdhdGlvbj86IGJvb2xlYW47XG4gICAgaW5jbHVkZV9jb25jdXJyZW5jeT86IGJvb2xlYW47XG4gICAgaW5jbHVkZV9jb21wdXRlZD86IGJvb2xlYW47XG4gICAgaW5jbHVkZV9rZXk/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfbm9uX2ZpZWxkPzogYm9vbGVhbjtcbiAgICBjaGFuZ2VzX29ubHk/OiBib29sZWFuO1xuICAgIGZpZWxkX21hcHBpbmc/OiBib29sZWFuO1xuICAgIGNoYWluPzogKE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4pW107XG4gIH0gPSB7fSk6IFQgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEudG9FbnRpdHkodGhpcywge1xuICAgICAgY2xpZW50X2lkLFxuICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uLFxuICAgICAgaW5jbHVkZV9jb25jdXJyZW5jeSxcbiAgICAgIGluY2x1ZGVfY29tcHV0ZWQsXG4gICAgICBpbmNsdWRlX2tleSxcbiAgICAgIGluY2x1ZGVfbm9uX2ZpZWxkLFxuICAgICAgY2hhbmdlc19vbmx5LFxuICAgICAgZmllbGRfbWFwcGluZyxcbiAgICAgIGNoYWluLFxuICAgIH0pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvRW50aXR5KCk7XG4gIH1cblxuICBhdHRyaWJ1dGVzKHtcbiAgICBjaGFuZ2VzX29ubHkgPSBmYWxzZSxcbiAgICBpbmNsdWRlX2NvbmN1cnJlbmN5ID0gZmFsc2UsXG4gICAgaW5jbHVkZV9jb21wdXRlZCA9IGZhbHNlLFxuICAgIGluY2x1ZGVfbm9uX2ZpZWxkID0gZmFsc2UsXG4gICAgZmllbGRfbWFwcGluZyA9IGZhbHNlLFxuICB9OiB7XG4gICAgY2hhbmdlc19vbmx5PzogYm9vbGVhbjtcbiAgICBpbmNsdWRlX2NvbmN1cnJlbmN5PzogYm9vbGVhbjtcbiAgICBpbmNsdWRlX2NvbXB1dGVkPzogYm9vbGVhbjtcbiAgICBpbmNsdWRlX25vbl9maWVsZD86IGJvb2xlYW47XG4gICAgZmllbGRfbWFwcGluZz86IGJvb2xlYW47XG4gIH0gPSB7fSk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS5hdHRyaWJ1dGVzKHRoaXMsIHtcbiAgICAgIGNoYW5nZXNfb25seSxcbiAgICAgIGluY2x1ZGVfY29uY3VycmVuY3ksXG4gICAgICBpbmNsdWRlX2NvbXB1dGVkLFxuICAgICAgaW5jbHVkZV9ub25fZmllbGQsXG4gICAgICBmaWVsZF9tYXBwaW5nLFxuICAgIH0pO1xuICB9XG5cbiAgc2V0KHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCB2YWx1ZTogYW55KSB7XG4gICAgY29uc3QgcGF0aEFycmF5ID0gKFxuICAgICAgVHlwZXMuaXNBcnJheShwYXRoKSA/IHBhdGggOiAocGF0aCBhcyBzdHJpbmcpLm1hdGNoKC8oW15bLlxcXV0pKy9nKVxuICAgICkgYXMgYW55W107XG4gICAgaWYgKHBhdGhBcnJheS5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHBhdGhBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdCBtb2RlbCA9ICg8YW55PnRoaXMpW3BhdGhBcnJheVswXV07XG4gICAgICByZXR1cm4gbW9kZWwuc2V0KHBhdGhBcnJheS5zbGljZSgxKSwgdmFsdWUpO1xuICAgIH1cbiAgICBpZiAocGF0aEFycmF5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuICgoPGFueT50aGlzKVtwYXRoQXJyYXlbMF1dID0gdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldChwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGFueSB7XG4gICAgY29uc3QgcGF0aEFycmF5ID0gKFxuICAgICAgVHlwZXMuaXNBcnJheShwYXRoKSA/IHBhdGggOiAocGF0aCBhcyBzdHJpbmcpLm1hdGNoKC8oW15bLlxcXV0pKy9nKVxuICAgICkgYXMgYW55W107XG4gICAgaWYgKHBhdGhBcnJheS5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdmFsdWUgPSAoPGFueT50aGlzKVtwYXRoQXJyYXlbMF1dO1xuICAgIGlmIChcbiAgICAgIHBhdGhBcnJheS5sZW5ndGggPiAxICYmXG4gICAgICAodmFsdWUgaW5zdGFuY2VvZiBPRGF0YU1vZGVsIHx8IHZhbHVlIGluc3RhbmNlb2YgT0RhdGFDb2xsZWN0aW9uKVxuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlLmdldChwYXRoQXJyYXkuc2xpY2UoMSkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXNldCh7XG4gICAgcGF0aCxcbiAgICBzaWxlbnQgPSBmYWxzZSxcbiAgfTogeyBwYXRoPzogc3RyaW5nIHwgc3RyaW5nW107IHNpbGVudD86IGJvb2xlYW4gfSA9IHt9KSB7XG4gICAgY29uc3QgcGF0aEFycmF5OiBzdHJpbmdbXSA9IChcbiAgICAgIHBhdGggPT09IHVuZGVmaW5lZFxuICAgICAgICA/IFtdXG4gICAgICAgIDogVHlwZXMuaXNBcnJheShwYXRoKVxuICAgICAgICA/IHBhdGhcbiAgICAgICAgOiAocGF0aCBhcyBzdHJpbmcpLm1hdGNoKC8oW15bLlxcXV0pKy9nKVxuICAgICkgYXMgYW55W107XG4gICAgY29uc3QgbmFtZSA9IHBhdGhBcnJheVswXTtcbiAgICBjb25zdCB2YWx1ZSA9IG5hbWUgIT09IHVuZGVmaW5lZCA/ICg8YW55PnRoaXMpW25hbWVdIDogdW5kZWZpbmVkO1xuICAgIGlmIChcbiAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodmFsdWUpIHx8XG4gICAgICBPRGF0YU1vZGVsT3B0aW9ucy5pc0NvbGxlY3Rpb24odmFsdWUpXG4gICAgKSB7XG4gICAgICB2YWx1ZS5yZXNldCh7IHBhdGg6IHBhdGhBcnJheS5zbGljZSgxKSwgc2lsZW50IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9tZXRhLnJlc2V0KHRoaXMsIHsgbmFtZTogcGF0aEFycmF5WzBdLCBzaWxlbnQgfSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoeyBzaWxlbnQgPSBmYWxzZSB9OiB7IHNpbGVudD86IGJvb2xlYW4gfSA9IHt9KSB7XG4gICAgdGhpcy5fYXR0cmlidXRlcy5jbGVhcigpO1xuICAgIHRoaXMuX2NoYW5nZXMuY2xlYXIoKTtcbiAgICB0aGlzLl9yZWxhdGlvbnMuY2xlYXIoKTtcbiAgICBpZiAoIXNpbGVudCkge1xuICAgICAgdGhpcy5ldmVudHMkLmVtaXQoXG4gICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICBtb2RlbDogdGhpcyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXNzaWduKFxuICAgIGVudGl0eTogUGFydGlhbDxUPiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9LFxuICAgIHtcbiAgICAgIHJlc2V0ID0gZmFsc2UsXG4gICAgICByZXBhcmVudCA9IGZhbHNlLFxuICAgICAgc2lsZW50ID0gZmFsc2UsXG4gICAgfTogeyByZXNldD86IGJvb2xlYW47IHJlcGFyZW50PzogYm9vbGVhbjsgc2lsZW50PzogYm9vbGVhbiB9ID0ge31cbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEuYXNzaWduKHRoaXMsIGVudGl0eSwgeyByZXNldCwgc2lsZW50LCByZXBhcmVudCB9KTtcbiAgfVxuXG4gIGNsb25lPE0gZXh0ZW5kcyBPRGF0YU1vZGVsPFQ+PigpIHtcbiAgICBsZXQgQ3RvciA9IDx0eXBlb2YgT0RhdGFNb2RlbD50aGlzLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBuZXcgQ3Rvcih0aGlzLnRvRW50aXR5KElOQ0xVREVfU0hBTExPVyksIHtcbiAgICAgIHJlc291cmNlOiB0aGlzLnJlc291cmNlKCkgYXMgT0RhdGFSZXNvdXJjZTxUPixcbiAgICAgIGFubm90czogdGhpcy5hbm5vdHMoKSxcbiAgICB9KSBhcyBNO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVxdWVzdChvYnMkOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PGFueT4+KTogT2JzZXJ2YWJsZTx0aGlzPiB7XG4gICAgdGhpcy5ldmVudHMkLmVtaXQoXG4gICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdyZXF1ZXN0Jywge1xuICAgICAgICBtb2RlbDogdGhpcyxcbiAgICAgICAgb3B0aW9uczogeyBvYnNlcnZhYmxlOiBvYnMkIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIG9icyQucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdHksIGFubm90cyB9KSA9PiB7XG4gICAgICAgIHRoaXMuX2Fubm90YXRpb25zID0gYW5ub3RzO1xuICAgICAgICB0aGlzLmFzc2lnbihhbm5vdHMuYXR0cmlidXRlczxUPihlbnRpdHkgfHwge30sICdmdWxsJyksIHtcbiAgICAgICAgICByZXNldDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KFxuICAgICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ3N5bmMnLCB7XG4gICAgICAgICAgICBtb2RlbDogdGhpcyxcbiAgICAgICAgICAgIG9wdGlvbnM6IHsgZW50aXR5LCBhbm5vdHMgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoKHtcbiAgICAuLi5vcHRpb25zXG4gIH06IE9EYXRhT3B0aW9ucyAmIHtcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zO1xuICB9ID0ge30pOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBsZXQgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ2ZldGNoOiBSZXNvdXJjZSBpcyB1bmRlZmluZWQnKSk7XG5cbiAgICBsZXQgb2JzJDogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj47XG4gICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFFbnRpdHlSZXNvdXJjZSkge1xuICAgICAgb2JzJCA9IHJlc291cmNlLmZldGNoKG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlKSB7XG4gICAgICBvYnMkID0gcmVzb3VyY2UuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYnMkID0gKHJlc291cmNlIGFzIE9EYXRhUHJvcGVydHlSZXNvdXJjZTxUPikuZmV0Y2goe1xuICAgICAgICByZXNwb25zZVR5cGU6ICdlbnRpdHknLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0KG9icyQpO1xuICB9XG5cbiAgc2F2ZSh7XG4gICAgbWV0aG9kLFxuICAgIG5hdmlnYXRpb24gPSBmYWxzZSxcbiAgICB2YWxpZGF0ZSA9IHRydWUsXG4gICAgLi4ub3B0aW9uc1xuICB9OiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgbWV0aG9kPzogJ2NyZWF0ZScgfCAndXBkYXRlJyB8ICdtb2RpZnknO1xuICAgIG5hdmlnYXRpb24/OiBib29sZWFuO1xuICAgIHZhbGlkYXRlPzogYm9vbGVhbjtcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zO1xuICB9ID0ge30pOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBsZXQgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ3NhdmU6IFJlc291cmNlIGlzIHVuZGVmaW5lZCcpKTtcbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICByZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5UmVzb3VyY2UgfHxcbiAgICAgICAgcmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlXG4gICAgICApXG4gICAgKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ3NhdmU6IFJlc291cmNlIHR5cGUgT0RhdGFFbnRpdHlSZXNvdXJjZS9PRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlIG5lZWRlZCdcbiAgICAgICAgICApXG4gICAgICApO1xuXG4gICAgLy8gUmVzb2x2ZSBtZXRob2QgYW5kIHJlc291cmNlIGtleVxuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnNjaGVtYSgpLmlzQ29tcG91bmRLZXkoKSlcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICdzYXZlOiBDb21wb3NpdGUga2V5IHJlcXVpcmUgYSBzcGVjaWZpYyBtZXRob2QsIHVzZSBjcmVhdGUvdXBkYXRlL21vZGlmeSdcbiAgICAgICAgICApXG4gICAgICApO1xuICAgIG1ldGhvZCA9IG1ldGhvZCB8fCAoIXJlc291cmNlLmhhc0tleSgpID8gJ2NyZWF0ZScgOiAndXBkYXRlJyk7XG4gICAgaWYgKFxuICAgICAgcmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlICYmXG4gICAgICAobWV0aG9kID09PSAndXBkYXRlJyB8fCBtZXRob2QgPT09ICdtb2RpZnknKSAmJlxuICAgICAgIXJlc291cmNlLmhhc0tleSgpXG4gICAgKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICgpID0+IG5ldyBFcnJvcignc2F2ZTogVXBkYXRlL1BhdGNoIHJlcXVpcmUgZW50aXR5IGtleScpXG4gICAgICApO1xuICAgIGlmIChcbiAgICAgIHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSB8fFxuICAgICAgbWV0aG9kID09PSAnY3JlYXRlJ1xuICAgIClcbiAgICAgIHJlc291cmNlLmNsZWFyS2V5KCk7XG5cbiAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMuaXNWYWxpZCh7IG1ldGhvZCwgbmF2aWdhdGlvbiB9KSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdzYXZlOiBWYWxpZGF0aW9uIGVycm9ycycpKTtcbiAgICB9XG4gICAgY29uc3QgX2VudGl0eSA9IHRoaXMudG9FbnRpdHkoe1xuICAgICAgY2hhbmdlc19vbmx5OiBtZXRob2QgPT09ICdtb2RpZnknLFxuICAgICAgZmllbGRfbWFwcGluZzogdHJ1ZSxcbiAgICAgIGluY2x1ZGVfY29uY3VycmVuY3k6IHRydWUsXG4gICAgICBpbmNsdWRlX25hdmlnYXRpb246IG5hdmlnYXRpb24sXG4gICAgfSkgYXMgVDtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdChcbiAgICAgIChtZXRob2QgPT09ICdjcmVhdGUnXG4gICAgICAgID8gcmVzb3VyY2UuY3JlYXRlKF9lbnRpdHksIG9wdGlvbnMpXG4gICAgICAgIDogbWV0aG9kID09PSAnbW9kaWZ5J1xuICAgICAgICA/IHJlc291cmNlLm1vZGlmeShfZW50aXR5LCB7IGV0YWc6IHRoaXMuYW5ub3RzKCkuZXRhZywgLi4ub3B0aW9ucyB9KVxuICAgICAgICA6IHJlc291cmNlLnVwZGF0ZShfZW50aXR5LCB7IGV0YWc6IHRoaXMuYW5ub3RzKCkuZXRhZywgLi4ub3B0aW9ucyB9KVxuICAgICAgKS5waXBlKFxuICAgICAgICBtYXAoKHsgZW50aXR5LCBhbm5vdHMgfSkgPT4gKHsgZW50aXR5OiBlbnRpdHkgfHwgX2VudGl0eSwgYW5ub3RzIH0pKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBkZXN0cm95KHtcbiAgICAuLi5vcHRpb25zXG4gIH06IE9EYXRhT3B0aW9ucyAmIHtcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zO1xuICB9ID0ge30pOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBsZXQgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ2Rlc3Ryb3k6IFJlc291cmNlIGlzIHVuZGVmaW5lZCcpKTtcbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICByZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5UmVzb3VyY2UgfHxcbiAgICAgICAgcmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlXG4gICAgICApXG4gICAgKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ2Rlc3Ryb3k6IFJlc291cmNlIHR5cGUgT0RhdGFFbnRpdHlSZXNvdXJjZS9PRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlIG5lZWRlZCdcbiAgICAgICAgICApXG4gICAgICApO1xuICAgIGlmICghcmVzb3VyY2UuaGFzS2V5KCkpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgKCkgPT4gbmV3IEVycm9yKFwiZGVzdHJveTogQ2FuJ3QgZGVzdHJveSBtb2RlbCB3aXRob3V0IGtleVwiKVxuICAgICAgKTtcblxuICAgIGNvbnN0IF9lbnRpdHkgPSB0aGlzLnRvRW50aXR5KHsgZmllbGRfbWFwcGluZzogdHJ1ZSB9KSBhcyBUO1xuICAgIGNvbnN0IG9icyQgPSByZXNvdXJjZVxuICAgICAgLmRlc3Ryb3koeyBldGFnOiB0aGlzLmFubm90cygpLmV0YWcsIC4uLm9wdGlvbnMgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHsgZW50aXR5LCBhbm5vdHMgfSkgPT4gKHsgZW50aXR5OiBlbnRpdHkgfHwgX2VudGl0eSwgYW5ub3RzIH0pKVxuICAgICAgKTtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdChvYnMkKS5waXBlKFxuICAgICAgdGFwKCgpID0+XG4gICAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KG5ldyBPRGF0YU1vZGVsRXZlbnQoJ2Rlc3Ryb3knLCB7IG1vZGVsOiB0aGlzIH0pKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGV4ZWN1dGlvbiBjb250ZXh0IGZvciBjaGFuZ2UgdGhlIGludGVybmFsIHF1ZXJ5IG9mIGEgcmVzb3VyY2VcbiAgICogQHBhcmFtIGZ1bmMgRnVuY3Rpb24gdG8gZXhlY3V0ZVxuICAgKi9cbiAgcXVlcnkoXG4gICAgZnVuYzogKHE6IE9EYXRhUXVlcnlPcHRpb25zSGFuZGxlcjxUPiwgcz86IE9EYXRhU3RydWN0dXJlZFR5cGU8VD4pID0+IHZvaWRcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEucXVlcnkodGhpcywgdGhpcy5yZXNvdXJjZSgpLCBmdW5jKSBhcyB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYSBjaGVjayBvbiB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIG1vZGVsIGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGUgbW9kZWwgaXMgY2hhbmdlZC5cbiAgICogQHBhcmFtIGluY2x1ZGVfbmF2aWdhdGlvbiBDaGVjayBpbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgbW9kZWwgaGFzIGNoYW5nZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaGFzQ2hhbmdlZCh7XG4gICAgaW5jbHVkZV9uYXZpZ2F0aW9uID0gZmFsc2UsXG4gIH06IHsgaW5jbHVkZV9uYXZpZ2F0aW9uPzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS5oYXNDaGFuZ2VkKHRoaXMsIHsgaW5jbHVkZV9uYXZpZ2F0aW9uIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBleGVjdXRpb24gY29udGV4dCBmb3IgYSBnaXZlbiBmdW5jdGlvbiwgd2hlcmUgdGhlIG1vZGVsIGlzIGJvdW5kIHRvIGl0cyBlbnRpdHkgZW5kcG9pbnRcbiAgICogQHBhcmFtIGN0eCBDb250ZXh0IGZ1bmN0aW9uXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGNvbnRleHRcbiAgICovXG4gIGFzRW50aXR5PFI+KGN0eDogKG1vZGVsOiB0aGlzKSA9PiBSKTogUiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEuYXNFbnRpdHkodGhpcywgY3R4KTtcbiAgfVxuXG4gIGNhbGxGdW5jdGlvbjxQLCBSPihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICByZXNwb25zZVR5cGU6ICdwcm9wZXJ0eScgfCAnbW9kZWwnIHwgJ2NvbGxlY3Rpb24nIHwgJ25vbmUnLFxuICAgIHsgLi4ub3B0aW9ucyB9OiB7fSAmIE9EYXRhRnVuY3Rpb25PcHRpb25zPFI+ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxSIHwgT0RhdGFNb2RlbDxSPiB8IE9EYXRhQ29sbGVjdGlvbjxSLCBPRGF0YU1vZGVsPFI+PiB8IG51bGw+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcbiAgICBpZiAoIShyZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5UmVzb3VyY2UpIHx8ICFyZXNvdXJjZS5oYXNLZXkoKSlcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiY2FsbEZ1bmN0aW9uOiBDYW4ndCBjYWxsIGZ1bmN0aW9uIHdpdGhvdXQgT0RhdGFFbnRpdHlSZXNvdXJjZSB3aXRoIGtleVwiXG4gICAgICAgICAgKVxuICAgICAgKTtcblxuICAgIGNvbnN0IGZ1bmMgPSByZXNvdXJjZS5mdW5jdGlvbjxQLCBSPihuYW1lKS5xdWVyeSgocSkgPT4gcS5hcHBseShvcHRpb25zKSk7XG4gICAgc3dpdGNoIChyZXNwb25zZVR5cGUpIHtcbiAgICAgIGNhc2UgJ3Byb3BlcnR5JzpcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbFByb3BlcnR5KHBhcmFtcywgb3B0aW9ucyk7XG4gICAgICBjYXNlICdtb2RlbCc6XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGxNb2RlbChwYXJhbXMsIG9wdGlvbnMpO1xuICAgICAgY2FzZSAnY29sbGVjdGlvbic6XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGxDb2xsZWN0aW9uKHBhcmFtcywgb3B0aW9ucyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHBhcmFtcywgeyByZXNwb25zZVR5cGUsIC4uLm9wdGlvbnMgfSk7XG4gICAgfVxuICB9XG5cbiAgY2FsbEFjdGlvbjxQLCBSPihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICByZXNwb25zZVR5cGU6ICdwcm9wZXJ0eScgfCAnbW9kZWwnIHwgJ2NvbGxlY3Rpb24nIHwgJ25vbmUnLFxuICAgIHsgLi4ub3B0aW9ucyB9OiB7fSAmIE9EYXRhQWN0aW9uT3B0aW9uczxSPiA9IHt9XG4gICk6IE9ic2VydmFibGU8UiB8IE9EYXRhTW9kZWw8Uj4gfCBPRGF0YUNvbGxlY3Rpb248UiwgT0RhdGFNb2RlbDxSPj4gfCBudWxsPiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKCEocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlKSB8fCAhcmVzb3VyY2UuaGFzS2V5KCkpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcImNhbGxBY3Rpb246IENhbid0IGNhbGwgYWN0aW9uIHdpdGhvdXQgT0RhdGFFbnRpdHlSZXNvdXJjZSB3aXRoIGtleVwiXG4gICAgICAgICAgKVxuICAgICAgKTtcblxuICAgIGNvbnN0IGFjdGlvbiA9IHJlc291cmNlLmFjdGlvbjxQLCBSPihuYW1lKS5xdWVyeSgocSkgPT4gcS5hcHBseShvcHRpb25zKSk7XG4gICAgc3dpdGNoIChyZXNwb25zZVR5cGUpIHtcbiAgICAgIGNhc2UgJ3Byb3BlcnR5JzpcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5jYWxsUHJvcGVydHkocGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ21vZGVsJzpcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5jYWxsTW9kZWwocGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ2NvbGxlY3Rpb24nOlxuICAgICAgICByZXR1cm4gYWN0aW9uLmNhbGxDb2xsZWN0aW9uKHBhcmFtcywgb3B0aW9ucyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYWN0aW9uLmNhbGwocGFyYW1zLCB7IHJlc3BvbnNlVHlwZSwgLi4ub3B0aW9ucyB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBDYXN0XG4gIGNhc3Q8Uz4odHlwZTogc3RyaW5nKTogT0RhdGFNb2RlbDxTPiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKCEocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGNhc3Q6IENhbid0IGNhc3QgdG8gZGVyaXZlZCBtb2RlbCB3aXRob3V0IE9EYXRhRW50aXR5UmVzb3VyY2VgXG4gICAgICApO1xuXG4gICAgcmV0dXJuIHJlc291cmNlXG4gICAgICAuY2FzdDxTPih0eXBlKVxuICAgICAgLmFzTW9kZWwodGhpcy50b0VudGl0eShJTkNMVURFX0RFRVApLCB7IGFubm90czogdGhpcy5hbm5vdHMoKSB9KTtcbiAgfVxuXG4gIGZldGNoTmF2aWdhdGlvblByb3BlcnR5PFM+KFxuICAgIG5hbWU6IGtleW9mIFQgfCBzdHJpbmcsXG4gICAgcmVzcG9uc2VUeXBlOiAnbW9kZWwnIHwgJ2NvbGxlY3Rpb24nLFxuICAgIHsgLi4ub3B0aW9ucyB9OiB7fSAmIE9EYXRhUXVlcnlBcmd1bWVudHNPcHRpb25zPFM+ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YU1vZGVsPFM+IHwgT0RhdGFDb2xsZWN0aW9uPFMsIE9EYXRhTW9kZWw8Uz4+IHwgbnVsbD4ge1xuICAgIGNvbnN0IG5hdiA9IHRoaXMubmF2aWdhdGlvblByb3BlcnR5PFM+KFxuICAgICAgbmFtZVxuICAgICkgYXMgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxTPjtcbiAgICBuYXYucXVlcnkoKHEpID0+IHEuYXBwbHkob3B0aW9ucykpO1xuICAgIHN3aXRjaCAocmVzcG9uc2VUeXBlKSB7XG4gICAgICBjYXNlICdtb2RlbCc6XG4gICAgICAgIHJldHVybiBuYXYuZmV0Y2hNb2RlbChvcHRpb25zKTtcbiAgICAgIGNhc2UgJ2NvbGxlY3Rpb24nOlxuICAgICAgICByZXR1cm4gbmF2LmZldGNoQ29sbGVjdGlvbihvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgVmFsdWVcbiAgZ2V0VmFsdWU8UD4oXG4gICAgbmFtZToga2V5b2YgVCB8IHN0cmluZyxcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zXG4gICk6IE9ic2VydmFibGU8UCB8IE9EYXRhTW9kZWw8UD4gfCBPRGF0YUNvbGxlY3Rpb248UCwgT0RhdGFNb2RlbDxQPj4gfCBudWxsPiB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLl9tZXRhLmZpZWxkKG5hbWUpO1xuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkIHx8IGZpZWxkLm5hdmlnYXRpb24pXG4gICAgICB0aHJvdyBFcnJvcihgZ2V0VmFsdWU6IENhbid0IGZpbmQgcHJvcGVydHkgJHtuYW1lIGFzIHN0cmluZ31gKTtcblxuICAgIGxldCB2YWx1ZSA9ICh0aGlzIGFzIGFueSlbbmFtZV0gYXNcbiAgICAgIHwgUFxuICAgICAgfCBPRGF0YU1vZGVsPFA+XG4gICAgICB8IE9EYXRhQ29sbGVjdGlvbjxQLCBPRGF0YU1vZGVsPFA+PjtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcHJvcCA9IGZpZWxkLnJlc291cmNlRmFjdG9yeShcbiAgICAgICAgdGhpcy5yZXNvdXJjZSgpXG4gICAgICApIGFzIE9EYXRhUHJvcGVydHlSZXNvdXJjZTxQPjtcbiAgICAgIHJldHVybiBmaWVsZC5jb2xsZWN0aW9uXG4gICAgICAgID8gcHJvcFxuICAgICAgICAgICAgLmZldGNoQ29sbGVjdGlvbihvcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUodGFwKChjKSA9PiB0aGlzLmFzc2lnbih7IFtuYW1lXTogYyB9LCB7IHNpbGVudDogdHJ1ZSB9KSkpXG4gICAgICAgIDogZmllbGQuaXNTdHJ1Y3R1cmVkVHlwZSgpXG4gICAgICAgID8gcHJvcFxuICAgICAgICAgICAgLmZldGNoTW9kZWwob3B0aW9ucylcbiAgICAgICAgICAgIC5waXBlKHRhcCgoYykgPT4gdGhpcy5hc3NpZ24oeyBbbmFtZV06IGMgfSwgeyBzaWxlbnQ6IHRydWUgfSkpKVxuICAgICAgICA6IHByb3BcbiAgICAgICAgICAgIC5mZXRjaFByb3BlcnR5KG9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZSh0YXAoKGMpID0+IHRoaXMuYXNzaWduKHsgW25hbWVdOiBjIH0sIHsgc2lsZW50OiB0cnVlIH0pKSk7XG4gICAgfVxuICAgIHJldHVybiBvZih2YWx1ZSBhcyBQKTtcbiAgfVxuXG4gIC8vIFNldCBSZWZlcmVuY2VcbiAgc2V0UmVmZXJlbmNlPE4+KFxuICAgIG5hbWU6IGtleW9mIFQgfCBzdHJpbmcsXG4gICAgbW9kZWw6IE9EYXRhTW9kZWw8Tj4gfCBPRGF0YUNvbGxlY3Rpb248TiwgT0RhdGFNb2RlbDxOPj4gfCBudWxsLFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTx0aGlzPiB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gKFxuICAgICAgdGhpcy5uYXZpZ2F0aW9uUHJvcGVydHk8Tj4obmFtZSkgYXMgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxOPlxuICAgICkucmVmZXJlbmNlKCk7XG5cbiAgICBjb25zdCBldGFnID0gdGhpcy5hbm5vdHMoKS5ldGFnO1xuICAgIGxldCBvYnMkID0gTkVWRVIgYXMgT2JzZXJ2YWJsZTxhbnk+O1xuICAgIGlmIChtb2RlbCBpbnN0YW5jZW9mIE9EYXRhTW9kZWwpIHtcbiAgICAgIG9icyQgPSByZWZlcmVuY2Uuc2V0KFxuICAgICAgICBtb2RlbC5fbWV0YS5lbnRpdHlSZXNvdXJjZShtb2RlbCkgYXMgT0RhdGFFbnRpdHlSZXNvdXJjZTxOPixcbiAgICAgICAgeyBldGFnLCAuLi5vcHRpb25zIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIE9EYXRhQ29sbGVjdGlvbikge1xuICAgICAgb2JzJCA9IGZvcmtKb2luKFxuICAgICAgICBtb2RlbFxuICAgICAgICAgIC5tb2RlbHMoKVxuICAgICAgICAgIC5tYXAoKG0pID0+XG4gICAgICAgICAgICByZWZlcmVuY2UuYWRkKFxuICAgICAgICAgICAgICBtLl9tZXRhLmVudGl0eVJlc291cmNlKG0pIGFzIE9EYXRhRW50aXR5UmVzb3VyY2U8Tj4sXG4gICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAobW9kZWwgPT09IG51bGwpIHtcbiAgICAgIG9icyQgPSByZWZlcmVuY2UudW5zZXQoeyBldGFnLCAuLi5vcHRpb25zIH0pO1xuICAgIH1cbiAgICB0aGlzLmV2ZW50cyQuZW1pdChcbiAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ3JlcXVlc3QnLCB7XG4gICAgICAgIG1vZGVsOiB0aGlzLFxuICAgICAgICBvcHRpb25zOiB7IG9ic2VydmFibGU6IG9icyQgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gb2JzJC5waXBlKFxuICAgICAgbWFwKChtb2RlbCkgPT4ge1xuICAgICAgICB0aGlzLmFzc2lnbih7IFtuYW1lXTogbW9kZWwgfSk7XG4gICAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KG5ldyBPRGF0YU1vZGVsRXZlbnQoJ3N5bmMnLCB7IG1vZGVsOiB0aGlzIH0pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRSZWZlcmVuY2U8UD4oXG4gICAgbmFtZToga2V5b2YgVCB8IHN0cmluZ1xuICApOiBPRGF0YU1vZGVsPFA+IHwgT0RhdGFDb2xsZWN0aW9uPFAsIE9EYXRhTW9kZWw8UD4+IHwgbnVsbCB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLl9tZXRhLmZpZWxkPFA+KG5hbWUpO1xuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkIHx8ICFmaWVsZC5uYXZpZ2F0aW9uKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBnZXRSZWZlcmVuY2U6IENhbid0IGZpbmQgbmF2aWdhdGlvbiBwcm9wZXJ0eSAke25hbWUgYXMgc3RyaW5nfWBcbiAgICAgICk7XG5cbiAgICBsZXQgbW9kZWwgPSAodGhpcyBhcyBhbnkpW25hbWVdIGFzXG4gICAgICB8IE9EYXRhTW9kZWw8UD5cbiAgICAgIHwgT0RhdGFDb2xsZWN0aW9uPFAsIE9EYXRhTW9kZWw8UD4+XG4gICAgICB8IG51bGw7XG4gICAgaWYgKG1vZGVsID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICBpZiAobW9kZWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZC5jb2xsZWN0aW9uID8gW10gOiAodGhpcy5yZWZlcmVuY2VkKGZpZWxkKSBhcyBQKTtcbiAgICAgIG1vZGVsID1cbiAgICAgICAgdmFsdWUgIT09IG51bGxcbiAgICAgICAgICA/IGZpZWxkLm1vZGVsQ29sbGVjdGlvbkZhY3Rvcnk8VCwgUD4oeyBwYXJlbnQ6IHRoaXMsIHZhbHVlIH0pXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgKHRoaXMgYXMgYW55KVtuYW1lXSA9IG1vZGVsO1xuICAgIH1cbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cblxuICAvLyBNb2RlbCBmdW5jdGlvbnNcbiAgZXF1YWxzKG90aGVyOiBPRGF0YU1vZGVsPFQ+KSB7XG4gICAgY29uc3QgdGhpc0tleSA9IHRoaXMua2V5KCk7XG4gICAgY29uc3Qgb3RoZXJLZXkgPSBvdGhlci5rZXkoKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcyA9PT0gb3RoZXIgfHxcbiAgICAgICh0eXBlb2YgdGhpcyA9PT0gdHlwZW9mIG90aGVyICYmXG4gICAgICAgICgoPGFueT50aGlzKVt0aGlzLl9tZXRhLmNpZF0gPT09ICg8YW55Pm90aGVyKVt0aGlzLl9tZXRhLmNpZF0gfHxcbiAgICAgICAgICAodGhpc0tleSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBvdGhlcktleSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBUeXBlcy5pc0VxdWFsKHRoaXNLZXksIG90aGVyS2V5KSkpKVxuICAgICk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdNb2RlbCc7XG4gIH1cblxuICBjb2xsZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnQgIT09IG51bGwgJiZcbiAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbih0aGlzLl9wYXJlbnRbMF0pXG4gICAgICA/ICh0aGlzLl9wYXJlbnRbMF0gYXMgT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBuZXh0KCk6IE9EYXRhTW9kZWw8VD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24oKT8ubmV4dCh0aGlzKTtcbiAgfVxuXG4gIHByZXYoKTogT0RhdGFNb2RlbDxUPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbigpPy5wcmV2KHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBSRVNFUlZFRF9GSUVMRF9OQU1FUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFxuICBPRGF0YU1vZGVsLnByb3RvdHlwZVxuKTtcbiJdfQ==
|
|
465
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvbW9kZWxzL21vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFLTCxtQkFBbUIsRUFFbkIsK0JBQStCLEdBT2hDLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUVmLGVBQWUsRUFFZixpQkFBaUIsR0FFbEIsTUFBTSxXQUFXLENBQUM7QUFFbkIsV0FBVztBQUNYLE1BQU0sT0FBTyxVQUFVO0lBc0RyQixZQUNFLE9BQTZDLEVBQUUsRUFDL0MsRUFDRSxNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEdBQUcsS0FBSyxNQVNYLEVBQUU7UUFyQ1IsU0FBUztRQUNULFlBQU8sR0FLSSxJQUFJLENBQUM7UUFDaEIsZ0JBQVcsR0FBcUIsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUN2RCxhQUFRLEdBQXFCLElBQUksR0FBRyxFQUFlLENBQUM7UUFDcEQsZUFBVSxHQUF5QyxJQUFJLEdBQUcsRUFHdkQsQ0FBQztRQUNKLGNBQVMsR0FBNEIsSUFBSSxDQUFDO1FBRTFDLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixZQUFP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Qy9DLENBQUMsQ0FBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBdUM7WUFDeEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQzVELFVBQVUsQ0FBQyxTQUFTLENBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZvcmtKb2luLCBORVZFUiwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRW50aXR5S2V5LFxuICBPRGF0YUFjdGlvbk9wdGlvbnMsXG4gIE9EYXRhRW50aXR5LFxuICBPRGF0YUVudGl0eUFubm90YXRpb25zLFxuICBPRGF0YUVudGl0eVJlc291cmNlLFxuICBPRGF0YUZ1bmN0aW9uT3B0aW9ucyxcbiAgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSxcbiAgT0RhdGFPcHRpb25zLFxuICBPRGF0YVByb3BlcnR5UmVzb3VyY2UsXG4gIE9EYXRhUXVlcnlBcmd1bWVudHNPcHRpb25zLFxuICBPRGF0YVF1ZXJ5T3B0aW9uc0hhbmRsZXIsXG4gIE9EYXRhUmVzb3VyY2UsXG4gIE9EYXRhU2luZ2xldG9uUmVzb3VyY2UsXG59IGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBPRGF0YVN0cnVjdHVyZWRUeXBlIH0gZnJvbSAnLi4vc2NoZW1hJztcbmltcG9ydCB7IE9iamVjdHMsIFN0cmluZ3MsIFR5cGVzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgT0RhdGFDb2xsZWN0aW9uIH0gZnJvbSAnLi9jb2xsZWN0aW9uJztcbmltcG9ydCB7XG4gIElOQ0xVREVfREVFUCxcbiAgSU5DTFVERV9TSEFMTE9XLFxuICBNb2RlbE9wdGlvbnMsXG4gIE9EYXRhTW9kZWxFdmVudCxcbiAgT0RhdGFNb2RlbEZpZWxkLFxuICBPRGF0YU1vZGVsT3B0aW9ucyxcbiAgT0RhdGFNb2RlbFJlbGF0aW9uLFxufSBmcm9tICcuL29wdGlvbnMnO1xuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIE9EYXRhTW9kZWw8VD4ge1xuICAvLyBQcm9wZXJ0aWVzXG4gIHN0YXRpYyBvcHRpb25zOiBNb2RlbE9wdGlvbnM7XG4gIHN0YXRpYyBtZXRhOiBPRGF0YU1vZGVsT3B0aW9uczxhbnk+O1xuICBzdGF0aWMgYnVpbGRNZXRhPFQ+KHtcbiAgICBvcHRpb25zLFxuICAgIHNjaGVtYSxcbiAgfToge1xuICAgIG9wdGlvbnM/OiBNb2RlbE9wdGlvbnM7XG4gICAgc2NoZW1hOiBPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+O1xuICB9KSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IGZpZWxkcyA9IHNjaGVtYVxuICAgICAgICAuZmllbGRzKHsgaW5jbHVkZV9uYXZpZ2F0aW9uOiB0cnVlLCBpbmNsdWRlX3BhcmVudHM6IHRydWUgfSlcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBmKSA9PiB7XG4gICAgICAgICAgbGV0IG5hbWUgPSBmLm5hbWU7XG4gICAgICAgICAgLy8gUHJldmVudCBjb2xsaXNpb24gd2l0aCByZXNlcnZlZCBrZXl3b3Jkc1xuICAgICAgICAgIHdoaWxlIChSRVNFUlZFRF9GSUVMRF9OQU1FUy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUgKyAnXyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjYywge1xuICAgICAgICAgICAgW25hbWVdOiB7XG4gICAgICAgICAgICAgIGZpZWxkOiBmLm5hbWUsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGYuZGVmYXVsdCxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6ICFmLm51bGxhYmxlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwge30pO1xuICAgICAgb3B0aW9ucyA9IHsgZmllbGRzIH07XG4gICAgfVxuICAgIHRoaXMubWV0YSA9IG5ldyBPRGF0YU1vZGVsT3B0aW9uczxUPih7IG9wdGlvbnMsIHNjaGVtYSB9KTtcbiAgfVxuICAvLyBQYXJlbnRcbiAgX3BhcmVudDpcbiAgICB8IFtcbiAgICAgICAgT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PixcbiAgICAgICAgT0RhdGFNb2RlbEZpZWxkPGFueT4gfCBudWxsXG4gICAgICBdXG4gICAgfCBudWxsID0gbnVsbDtcbiAgX2F0dHJpYnV0ZXM6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICBfY2hhbmdlczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gIF9yZWxhdGlvbnM6IE1hcDxzdHJpbmcsIE9EYXRhTW9kZWxSZWxhdGlvbjxhbnk+PiA9IG5ldyBNYXA8XG4gICAgc3RyaW5nLFxuICAgIE9EYXRhTW9kZWxSZWxhdGlvbjxhbnk+XG4gID4oKTtcbiAgX3Jlc291cmNlOiBPRGF0YVJlc291cmNlPFQ+IHwgbnVsbCA9IG51bGw7XG4gIF9hbm5vdGF0aW9ucyE6IE9EYXRhRW50aXR5QW5ub3RhdGlvbnM7XG4gIF9yZXNldDogYm9vbGVhbiA9IGZhbHNlO1xuICBfcmVwYXJlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgX3NpbGVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBfbWV0YTogT0RhdGFNb2RlbE9wdGlvbnM8VD47XG4gIC8vIEV2ZW50c1xuICBldmVudHMkID0gbmV3IEV2ZW50RW1pdHRlcjxPRGF0YU1vZGVsRXZlbnQ8VD4+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZGF0YTogUGFydGlhbDxUPiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9ID0ge30sXG4gICAge1xuICAgICAgcGFyZW50LFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBhbm5vdHMsXG4gICAgICByZXNldCA9IGZhbHNlLFxuICAgIH06IHtcbiAgICAgIHBhcmVudD86IFtcbiAgICAgICAgT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PixcbiAgICAgICAgT0RhdGFNb2RlbEZpZWxkPGFueT4gfCBudWxsXG4gICAgICBdO1xuICAgICAgcmVzb3VyY2U/OiBPRGF0YVJlc291cmNlPFQ+O1xuICAgICAgYW5ub3RzPzogT0RhdGFFbnRpdHlBbm5vdGF0aW9ucztcbiAgICAgIHJlc2V0PzogYm9vbGVhbjtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgY29uc3QgS2xhc3MgPSB0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBPRGF0YU1vZGVsO1xuICAgIGlmIChLbGFzcy5tZXRhID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE9EYXRhTW9kZWw6IENhbid0IGNyZWF0ZSBtb2RlbCB3aXRob3V0IG1ldGFkYXRhYCk7XG4gICAgdGhpcy5fbWV0YSA9IEtsYXNzLm1ldGE7XG4gICAgdGhpcy5fbWV0YS5iaW5kKHRoaXMsIHsgcGFyZW50LCByZXNvdXJjZSwgYW5ub3RzIH0pO1xuXG4gICAgLy8gQ2xpZW50IElkXG4gICAgKDxhbnk+dGhpcylbdGhpcy5fbWV0YS5jaWRdID1cbiAgICAgICg8YW55PmRhdGEpW3RoaXMuX21ldGEuY2lkXSB8fFxuICAgICAgU3RyaW5ncy51bmlxdWVJZChgJHtLbGFzcy5tZXRhLnNjaGVtYS5uYW1lLnRvTG93ZXJDYXNlKCl9LWApO1xuXG4gICAgbGV0IGF0dHJzID0gdGhpcy5hbm5vdHMoKS5hdHRyaWJ1dGVzPFQ+KGRhdGEsICdmdWxsJyk7XG4gICAgbGV0IGRlZmF1bHRzID0gdGhpcy5kZWZhdWx0cygpO1xuXG4gICAgdGhpcy5hc3NpZ24oT2JqZWN0cy5tZXJnZShkZWZhdWx0cywgYXR0cnMpLCB7IHJlc2V0IH0pO1xuICB9XG5cbiAgLy8jcmVnaW9uIFJlc291cmNlc1xuICByZXNvdXJjZSgpOlxuICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPlxuICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPFQ+IHtcbiAgICByZXR1cm4gT0RhdGFNb2RlbE9wdGlvbnMucmVzb3VyY2U8VD4odGhpcykgYXNcbiAgICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPFQ+O1xuICB9XG5cbiAgbmF2aWdhdGlvblByb3BlcnR5PE4+KFxuICAgIG5hbWU6IGtleW9mIFQgfCBzdHJpbmdcbiAgKTogT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxOPiB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLl9tZXRhLmZpZWxkKG5hbWUpO1xuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkIHx8ICFmaWVsZC5uYXZpZ2F0aW9uKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBuYXZpZ2F0aW9uUHJvcGVydHk6IENhbid0IGZpbmQgbmF2aWdhdGlvbiBwcm9wZXJ0eSAke25hbWUgYXMgc3RyaW5nfWBcbiAgICAgICk7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcbiAgICBpZiAoIShyZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5UmVzb3VyY2UpIHx8ICFyZXNvdXJjZS5oYXNLZXkoKSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcIm5hdmlnYXRpb25Qcm9wZXJ0eTogQ2FuJ3QgZ2V0IG5hdmlnYXRpb24gd2l0aG91dCBPRGF0YUVudGl0eVJlc291cmNlIHdpdGgga2V5XCJcbiAgICAgICk7XG5cbiAgICByZXR1cm4gZmllbGQucmVzb3VyY2VGYWN0b3J5PFQsIE4+KFxuICAgICAgcmVzb3VyY2VcbiAgICApIGFzIE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8Tj47XG4gIH1cblxuICBwcm9wZXJ0eTxOPihuYW1lOiBzdHJpbmcpOiBPRGF0YVByb3BlcnR5UmVzb3VyY2U8Tj4ge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fbWV0YS5maWVsZChuYW1lKTtcbiAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCB8fCBmaWVsZC5uYXZpZ2F0aW9uKVxuICAgICAgdGhyb3cgRXJyb3IoYHByb3BlcnR5OiBDYW4ndCBmaW5kIHByb3BlcnR5ICR7bmFtZX1gKTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgIGlmICghKHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFFbnRpdHlSZXNvdXJjZSkgfHwgIXJlc291cmNlLmhhc0tleSgpKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwicHJvcGVydHk6IENhbid0IGdldCBwcm9wZXJ0eSB3aXRob3V0IE9EYXRhRW50aXR5UmVzb3VyY2Ugd2l0aCBrZXlcIlxuICAgICAgKTtcblxuICAgIHJldHVybiBmaWVsZC5yZXNvdXJjZUZhY3Rvcnk8VCwgTj4ocmVzb3VyY2UpIGFzIE9EYXRhUHJvcGVydHlSZXNvdXJjZTxOPjtcbiAgfVxuXG4gIGF0dGFjaDxSPihcbiAgICByZXNvdXJjZTpcbiAgICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxSPlxuICAgICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFI+XG4gICAgICB8IE9EYXRhUHJvcGVydHlSZXNvdXJjZTxSPlxuICAgICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPFI+XG4gICkge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLmF0dGFjaDxSPih0aGlzLCByZXNvdXJjZSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgc2NoZW1hKCkge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLnNjaGVtYTtcbiAgfVxuXG4gIGFubm90cygpIHtcbiAgICByZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnM7XG4gIH1cblxuICBrZXkoe1xuICAgIGZpZWxkX21hcHBpbmcgPSBmYWxzZSxcbiAgICByZXNvbHZlID0gdHJ1ZSxcbiAgfTogeyBmaWVsZF9tYXBwaW5nPzogYm9vbGVhbjsgcmVzb2x2ZT86IGJvb2xlYW4gfSA9IHt9KTpcbiAgICB8IEVudGl0eUtleTxUPlxuICAgIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1cbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEucmVzb2x2ZUtleSh0aGlzLCB7IGZpZWxkX21hcHBpbmcsIHJlc29sdmUgfSk7XG4gIH1cblxuICBpc05ldygpIHtcbiAgICByZXR1cm4gdGhpcy5rZXkoKSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaXNQYXJlbnRPZihcbiAgICBjaGlsZDogT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PlxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgY2hpbGQgIT09IHRoaXMgJiZcbiAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmNoYWluKGNoaWxkKS5zb21lKChwKSA9PiBwWzBdID09PSB0aGlzKVxuICAgICk7XG4gIH1cblxuICByZWZlcmVudGlhbChcbiAgICBmaWVsZDogT0RhdGFNb2RlbEZpZWxkPGFueT4sXG4gICAge1xuICAgICAgZmllbGRfbWFwcGluZyA9IGZhbHNlLFxuICAgICAgcmVzb2x2ZSA9IHRydWUsXG4gICAgfTogeyBmaWVsZF9tYXBwaW5nPzogYm9vbGVhbjsgcmVzb2x2ZT86IGJvb2xlYW4gfSA9IHt9XG4gICk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEucmVzb2x2ZVJlZmVyZW50aWFsKHRoaXMsIGZpZWxkLCB7XG4gICAgICBmaWVsZF9tYXBwaW5nLFxuICAgICAgcmVzb2x2ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHJlZmVyZW5jZWQoXG4gICAgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+LFxuICAgIHtcbiAgICAgIGZpZWxkX21hcHBpbmcgPSBmYWxzZSxcbiAgICAgIHJlc29sdmUgPSB0cnVlLFxuICAgIH06IHsgZmllbGRfbWFwcGluZz86IGJvb2xlYW47IHJlc29sdmU/OiBib29sZWFuIH0gPSB7fVxuICApOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLnJlc29sdmVSZWZlcmVuY2VkKHRoaXMsIGZpZWxkLCB7XG4gICAgICBmaWVsZF9tYXBwaW5nLFxuICAgICAgcmVzb2x2ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRpb25cbiAgX2Vycm9ycz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIHZhbGlkYXRlKHtcbiAgICBtZXRob2QsXG4gICAgbmF2aWdhdGlvbiA9IGZhbHNlLFxuICB9OiB7XG4gICAgbWV0aG9kPzogJ2NyZWF0ZScgfCAndXBkYXRlJyB8ICdtb2RpZnknO1xuICAgIG5hdmlnYXRpb24/OiBib29sZWFuO1xuICB9ID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS52YWxpZGF0ZSh0aGlzLCB7IG1ldGhvZCwgbmF2aWdhdGlvbiB9KTtcbiAgfVxuXG4gIGlzVmFsaWQoe1xuICAgIG1ldGhvZCxcbiAgICBuYXZpZ2F0aW9uID0gZmFsc2UsXG4gIH06IHtcbiAgICBtZXRob2Q/OiAnY3JlYXRlJyB8ICd1cGRhdGUnIHwgJ21vZGlmeSc7XG4gICAgbmF2aWdhdGlvbj86IGJvb2xlYW47XG4gIH0gPSB7fSk6IGJvb2xlYW4ge1xuICAgIHRoaXMuX2Vycm9ycyA9IHRoaXMudmFsaWRhdGUoeyBtZXRob2QsIG5hdmlnYXRpb24gfSk7XG4gICAgaWYgKHRoaXMuX2Vycm9ycyAhPT0gdW5kZWZpbmVkKVxuICAgICAgdGhpcy5ldmVudHMkLmVtaXQoXG4gICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ2ludmFsaWQnLCB7XG4gICAgICAgICAgbW9kZWw6IHRoaXMsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuX2Vycm9ycyxcbiAgICAgICAgICBvcHRpb25zOiB7IG1ldGhvZCB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JzID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICBkZWZhdWx0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS5kZWZhdWx0cygpIHx8IHt9O1xuICB9XG5cbiAgdG9FbnRpdHkoe1xuICAgIGNsaWVudF9pZCA9IGZhbHNlLFxuICAgIGluY2x1ZGVfbmF2aWdhdGlvbiA9IGZhbHNlLFxuICAgIGluY2x1ZGVfY29uY3VycmVuY3kgPSBmYWxzZSxcbiAgICBpbmNsdWRlX2NvbXB1dGVkID0gZmFsc2UsXG4gICAgaW5jbHVkZV9rZXkgPSB0cnVlLFxuICAgIGluY2x1ZGVfbm9uX2ZpZWxkID0gZmFsc2UsXG4gICAgY2hhbmdlc19vbmx5ID0gZmFsc2UsXG4gICAgZmllbGRfbWFwcGluZyA9IGZhbHNlLFxuICAgIGNoYWluID0gW10sXG4gIH06IHtcbiAgICBjbGllbnRfaWQ/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfbmF2aWdhdGlvbj86IGJvb2xlYW47XG4gICAgaW5jbHVkZV9jb25jdXJyZW5jeT86IGJvb2xlYW47XG4gICAgaW5jbHVkZV9jb21wdXRlZD86IGJvb2xlYW47XG4gICAgaW5jbHVkZV9rZXk/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfbm9uX2ZpZWxkPzogYm9vbGVhbjtcbiAgICBjaGFuZ2VzX29ubHk/OiBib29sZWFuO1xuICAgIGZpZWxkX21hcHBpbmc/OiBib29sZWFuO1xuICAgIGNoYWluPzogKE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4pW107XG4gIH0gPSB7fSk6IFQgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEudG9FbnRpdHkodGhpcywge1xuICAgICAgY2xpZW50X2lkLFxuICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uLFxuICAgICAgaW5jbHVkZV9jb25jdXJyZW5jeSxcbiAgICAgIGluY2x1ZGVfY29tcHV0ZWQsXG4gICAgICBpbmNsdWRlX2tleSxcbiAgICAgIGluY2x1ZGVfbm9uX2ZpZWxkLFxuICAgICAgY2hhbmdlc19vbmx5LFxuICAgICAgZmllbGRfbWFwcGluZyxcbiAgICAgIGNoYWluLFxuICAgIH0pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvRW50aXR5KCk7XG4gIH1cblxuICBhdHRyaWJ1dGVzKHtcbiAgICBjaGFuZ2VzX29ubHkgPSBmYWxzZSxcbiAgICBpbmNsdWRlX2NvbmN1cnJlbmN5ID0gZmFsc2UsXG4gICAgaW5jbHVkZV9jb21wdXRlZCA9IGZhbHNlLFxuICAgIGluY2x1ZGVfbm9uX2ZpZWxkID0gZmFsc2UsXG4gICAgZmllbGRfbWFwcGluZyA9IGZhbHNlLFxuICB9OiB7XG4gICAgY2hhbmdlc19vbmx5PzogYm9vbGVhbjtcbiAgICBpbmNsdWRlX2NvbmN1cnJlbmN5PzogYm9vbGVhbjtcbiAgICBpbmNsdWRlX2NvbXB1dGVkPzogYm9vbGVhbjtcbiAgICBpbmNsdWRlX25vbl9maWVsZD86IGJvb2xlYW47XG4gICAgZmllbGRfbWFwcGluZz86IGJvb2xlYW47XG4gIH0gPSB7fSk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS5hdHRyaWJ1dGVzKHRoaXMsIHtcbiAgICAgIGNoYW5nZXNfb25seSxcbiAgICAgIGluY2x1ZGVfY29uY3VycmVuY3ksXG4gICAgICBpbmNsdWRlX2NvbXB1dGVkLFxuICAgICAgaW5jbHVkZV9ub25fZmllbGQsXG4gICAgICBmaWVsZF9tYXBwaW5nLFxuICAgIH0pO1xuICB9XG5cbiAgc2V0KHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCB2YWx1ZTogYW55KSB7XG4gICAgY29uc3QgcGF0aEFycmF5ID0gKFxuICAgICAgVHlwZXMuaXNBcnJheShwYXRoKSA/IHBhdGggOiAocGF0aCBhcyBzdHJpbmcpLm1hdGNoKC8oW15bLlxcXV0pKy9nKVxuICAgICkgYXMgYW55W107XG4gICAgaWYgKHBhdGhBcnJheS5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHBhdGhBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdCBtb2RlbCA9ICg8YW55PnRoaXMpW3BhdGhBcnJheVswXV07XG4gICAgICByZXR1cm4gbW9kZWwuc2V0KHBhdGhBcnJheS5zbGljZSgxKSwgdmFsdWUpO1xuICAgIH1cbiAgICBpZiAocGF0aEFycmF5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuICgoPGFueT50aGlzKVtwYXRoQXJyYXlbMF1dID0gdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldChwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGFueSB7XG4gICAgY29uc3QgcGF0aEFycmF5ID0gKFxuICAgICAgVHlwZXMuaXNBcnJheShwYXRoKSA/IHBhdGggOiAocGF0aCBhcyBzdHJpbmcpLm1hdGNoKC8oW15bLlxcXV0pKy9nKVxuICAgICkgYXMgYW55W107XG4gICAgaWYgKHBhdGhBcnJheS5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdmFsdWUgPSAoPGFueT50aGlzKVtwYXRoQXJyYXlbMF1dO1xuICAgIGlmIChcbiAgICAgIHBhdGhBcnJheS5sZW5ndGggPiAxICYmXG4gICAgICAodmFsdWUgaW5zdGFuY2VvZiBPRGF0YU1vZGVsIHx8IHZhbHVlIGluc3RhbmNlb2YgT0RhdGFDb2xsZWN0aW9uKVxuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlLmdldChwYXRoQXJyYXkuc2xpY2UoMSkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXNldCh7XG4gICAgcGF0aCxcbiAgICBzaWxlbnQgPSBmYWxzZSxcbiAgfTogeyBwYXRoPzogc3RyaW5nIHwgc3RyaW5nW107IHNpbGVudD86IGJvb2xlYW4gfSA9IHt9KSB7XG4gICAgY29uc3QgcGF0aEFycmF5OiBzdHJpbmdbXSA9IChcbiAgICAgIHBhdGggPT09IHVuZGVmaW5lZFxuICAgICAgICA/IFtdXG4gICAgICAgIDogVHlwZXMuaXNBcnJheShwYXRoKVxuICAgICAgICA/IHBhdGhcbiAgICAgICAgOiAocGF0aCBhcyBzdHJpbmcpLm1hdGNoKC8oW15bLlxcXV0pKy9nKVxuICAgICkgYXMgYW55W107XG4gICAgY29uc3QgbmFtZSA9IHBhdGhBcnJheVswXTtcbiAgICBjb25zdCB2YWx1ZSA9IG5hbWUgIT09IHVuZGVmaW5lZCA/ICg8YW55PnRoaXMpW25hbWVdIDogdW5kZWZpbmVkO1xuICAgIGlmIChcbiAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodmFsdWUpIHx8XG4gICAgICBPRGF0YU1vZGVsT3B0aW9ucy5pc0NvbGxlY3Rpb24odmFsdWUpXG4gICAgKSB7XG4gICAgICB2YWx1ZS5yZXNldCh7IHBhdGg6IHBhdGhBcnJheS5zbGljZSgxKSwgc2lsZW50IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9tZXRhLnJlc2V0KHRoaXMsIHsgbmFtZTogcGF0aEFycmF5WzBdLCBzaWxlbnQgfSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoeyBzaWxlbnQgPSBmYWxzZSB9OiB7IHNpbGVudD86IGJvb2xlYW4gfSA9IHt9KSB7XG4gICAgdGhpcy5fYXR0cmlidXRlcy5jbGVhcigpO1xuICAgIHRoaXMuX2NoYW5nZXMuY2xlYXIoKTtcbiAgICB0aGlzLl9yZWxhdGlvbnMuY2xlYXIoKTtcbiAgICBpZiAoIXNpbGVudCkge1xuICAgICAgdGhpcy5ldmVudHMkLmVtaXQoXG4gICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICBtb2RlbDogdGhpcyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXNzaWduKFxuICAgIGVudGl0eTogUGFydGlhbDxUPiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9LFxuICAgIHtcbiAgICAgIHJlc2V0ID0gZmFsc2UsXG4gICAgICByZXBhcmVudCA9IGZhbHNlLFxuICAgICAgc2lsZW50ID0gZmFsc2UsXG4gICAgfTogeyByZXNldD86IGJvb2xlYW47IHJlcGFyZW50PzogYm9vbGVhbjsgc2lsZW50PzogYm9vbGVhbiB9ID0ge31cbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEuYXNzaWduKHRoaXMsIGVudGl0eSwgeyByZXNldCwgc2lsZW50LCByZXBhcmVudCB9KTtcbiAgfVxuXG4gIGNsb25lPE0gZXh0ZW5kcyBPRGF0YU1vZGVsPFQ+PigpIHtcbiAgICBsZXQgQ3RvciA9IDx0eXBlb2YgT0RhdGFNb2RlbD50aGlzLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBuZXcgQ3Rvcih0aGlzLnRvRW50aXR5KElOQ0xVREVfU0hBTExPVyksIHtcbiAgICAgIHJlc291cmNlOiB0aGlzLnJlc291cmNlKCkgYXMgT0RhdGFSZXNvdXJjZTxUPixcbiAgICAgIGFubm90czogdGhpcy5hbm5vdHMoKSxcbiAgICB9KSBhcyBNO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVxdWVzdChvYnMkOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PGFueT4+KTogT2JzZXJ2YWJsZTx0aGlzPiB7XG4gICAgdGhpcy5ldmVudHMkLmVtaXQoXG4gICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdyZXF1ZXN0Jywge1xuICAgICAgICBtb2RlbDogdGhpcyxcbiAgICAgICAgb3B0aW9uczogeyBvYnNlcnZhYmxlOiBvYnMkIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIG9icyQucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdHksIGFubm90cyB9KSA9PiB7XG4gICAgICAgIHRoaXMuX2Fubm90YXRpb25zID0gYW5ub3RzO1xuICAgICAgICB0aGlzLmFzc2lnbihhbm5vdHMuYXR0cmlidXRlczxUPihlbnRpdHkgfHwge30sICdmdWxsJyksIHtcbiAgICAgICAgICByZXNldDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KFxuICAgICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ3N5bmMnLCB7XG4gICAgICAgICAgICBtb2RlbDogdGhpcyxcbiAgICAgICAgICAgIG9wdGlvbnM6IHsgZW50aXR5LCBhbm5vdHMgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoKHtcbiAgICAuLi5vcHRpb25zXG4gIH06IE9EYXRhT3B0aW9ucyAmIHtcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zO1xuICB9ID0ge30pOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBsZXQgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ2ZldGNoOiBSZXNvdXJjZSBpcyB1bmRlZmluZWQnKSk7XG5cbiAgICBsZXQgb2JzJDogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj47XG4gICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFFbnRpdHlSZXNvdXJjZSkge1xuICAgICAgb2JzJCA9IHJlc291cmNlLmZldGNoKG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlKSB7XG4gICAgICBvYnMkID0gcmVzb3VyY2UuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYnMkID0gKHJlc291cmNlIGFzIE9EYXRhUHJvcGVydHlSZXNvdXJjZTxUPikuZmV0Y2goe1xuICAgICAgICByZXNwb25zZVR5cGU6ICdlbnRpdHknLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0KG9icyQpO1xuICB9XG5cbiAgc2F2ZSh7XG4gICAgbWV0aG9kLFxuICAgIG5hdmlnYXRpb24gPSBmYWxzZSxcbiAgICB2YWxpZGF0ZSA9IHRydWUsXG4gICAgLi4ub3B0aW9uc1xuICB9OiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgbWV0aG9kPzogJ2NyZWF0ZScgfCAndXBkYXRlJyB8ICdtb2RpZnknO1xuICAgIG5hdmlnYXRpb24/OiBib29sZWFuO1xuICAgIHZhbGlkYXRlPzogYm9vbGVhbjtcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zO1xuICB9ID0ge30pOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBsZXQgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ3NhdmU6IFJlc291cmNlIGlzIHVuZGVmaW5lZCcpKTtcbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICByZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5UmVzb3VyY2UgfHxcbiAgICAgICAgcmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlXG4gICAgICApXG4gICAgKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ3NhdmU6IFJlc291cmNlIHR5cGUgT0RhdGFFbnRpdHlSZXNvdXJjZS9PRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlIG5lZWRlZCdcbiAgICAgICAgICApXG4gICAgICApO1xuXG4gICAgLy8gUmVzb2x2ZSBtZXRob2QgYW5kIHJlc291cmNlIGtleVxuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnNjaGVtYSgpLmlzQ29tcG91bmRLZXkoKSlcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICdzYXZlOiBDb21wb3NpdGUga2V5IHJlcXVpcmUgYSBzcGVjaWZpYyBtZXRob2QsIHVzZSBjcmVhdGUvdXBkYXRlL21vZGlmeSdcbiAgICAgICAgICApXG4gICAgICApO1xuICAgIG1ldGhvZCA9IG1ldGhvZCB8fCAoIXJlc291cmNlLmhhc0tleSgpID8gJ2NyZWF0ZScgOiAndXBkYXRlJyk7XG4gICAgaWYgKFxuICAgICAgcmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlICYmXG4gICAgICAobWV0aG9kID09PSAndXBkYXRlJyB8fCBtZXRob2QgPT09ICdtb2RpZnknKSAmJlxuICAgICAgIXJlc291cmNlLmhhc0tleSgpXG4gICAgKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICgpID0+IG5ldyBFcnJvcignc2F2ZTogVXBkYXRlL1BhdGNoIHJlcXVpcmUgZW50aXR5IGtleScpXG4gICAgICApO1xuICAgIGlmIChcbiAgICAgIHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSB8fFxuICAgICAgbWV0aG9kID09PSAnY3JlYXRlJ1xuICAgIClcbiAgICAgIHJlc291cmNlLmNsZWFyS2V5KCk7XG5cbiAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMuaXNWYWxpZCh7IG1ldGhvZCwgbmF2aWdhdGlvbiB9KSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdzYXZlOiBWYWxpZGF0aW9uIGVycm9ycycpKTtcbiAgICB9XG4gICAgY29uc3QgX2VudGl0eSA9IHRoaXMudG9FbnRpdHkoe1xuICAgICAgY2hhbmdlc19vbmx5OiBtZXRob2QgPT09ICdtb2RpZnknLFxuICAgICAgZmllbGRfbWFwcGluZzogdHJ1ZSxcbiAgICAgIGluY2x1ZGVfY29uY3VycmVuY3k6IHRydWUsXG4gICAgICBpbmNsdWRlX25hdmlnYXRpb246IG5hdmlnYXRpb24sXG4gICAgfSkgYXMgVDtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdChcbiAgICAgIChtZXRob2QgPT09ICdjcmVhdGUnXG4gICAgICAgID8gcmVzb3VyY2UuY3JlYXRlKF9lbnRpdHksIG9wdGlvbnMpXG4gICAgICAgIDogbWV0aG9kID09PSAnbW9kaWZ5J1xuICAgICAgICA/IHJlc291cmNlLm1vZGlmeShfZW50aXR5LCB7IGV0YWc6IHRoaXMuYW5ub3RzKCkuZXRhZywgLi4ub3B0aW9ucyB9KVxuICAgICAgICA6IHJlc291cmNlLnVwZGF0ZShfZW50aXR5LCB7IGV0YWc6IHRoaXMuYW5ub3RzKCkuZXRhZywgLi4ub3B0aW9ucyB9KVxuICAgICAgKS5waXBlKFxuICAgICAgICBtYXAoKHsgZW50aXR5LCBhbm5vdHMgfSkgPT4gKHsgZW50aXR5OiBlbnRpdHkgfHwgX2VudGl0eSwgYW5ub3RzIH0pKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBkZXN0cm95KHtcbiAgICAuLi5vcHRpb25zXG4gIH06IE9EYXRhT3B0aW9ucyAmIHtcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zO1xuICB9ID0ge30pOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBsZXQgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ2Rlc3Ryb3k6IFJlc291cmNlIGlzIHVuZGVmaW5lZCcpKTtcbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICByZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5UmVzb3VyY2UgfHxcbiAgICAgICAgcmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlXG4gICAgICApXG4gICAgKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ2Rlc3Ryb3k6IFJlc291cmNlIHR5cGUgT0RhdGFFbnRpdHlSZXNvdXJjZS9PRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlIG5lZWRlZCdcbiAgICAgICAgICApXG4gICAgICApO1xuICAgIGlmICghcmVzb3VyY2UuaGFzS2V5KCkpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgKCkgPT4gbmV3IEVycm9yKFwiZGVzdHJveTogQ2FuJ3QgZGVzdHJveSBtb2RlbCB3aXRob3V0IGtleVwiKVxuICAgICAgKTtcblxuICAgIGNvbnN0IF9lbnRpdHkgPSB0aGlzLnRvRW50aXR5KHsgZmllbGRfbWFwcGluZzogdHJ1ZSB9KSBhcyBUO1xuICAgIGNvbnN0IG9icyQgPSByZXNvdXJjZVxuICAgICAgLmRlc3Ryb3koeyBldGFnOiB0aGlzLmFubm90cygpLmV0YWcsIC4uLm9wdGlvbnMgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHsgZW50aXR5LCBhbm5vdHMgfSkgPT4gKHsgZW50aXR5OiBlbnRpdHkgfHwgX2VudGl0eSwgYW5ub3RzIH0pKVxuICAgICAgKTtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdChvYnMkKS5waXBlKFxuICAgICAgdGFwKCgpID0+XG4gICAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KG5ldyBPRGF0YU1vZGVsRXZlbnQoJ2Rlc3Ryb3knLCB7IG1vZGVsOiB0aGlzIH0pKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGV4ZWN1dGlvbiBjb250ZXh0IGZvciBjaGFuZ2UgdGhlIGludGVybmFsIHF1ZXJ5IG9mIGEgcmVzb3VyY2VcbiAgICogQHBhcmFtIGZ1bmMgRnVuY3Rpb24gdG8gZXhlY3V0ZVxuICAgKi9cbiAgcXVlcnkoXG4gICAgZnVuYzogKHE6IE9EYXRhUXVlcnlPcHRpb25zSGFuZGxlcjxUPiwgcz86IE9EYXRhU3RydWN0dXJlZFR5cGU8VD4pID0+IHZvaWRcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEucXVlcnkodGhpcywgdGhpcy5yZXNvdXJjZSgpLCBmdW5jKSBhcyB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYSBjaGVjayBvbiB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIG1vZGVsIGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGUgbW9kZWwgaXMgY2hhbmdlZC5cbiAgICogQHBhcmFtIGluY2x1ZGVfbmF2aWdhdGlvbiBDaGVjayBpbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgbW9kZWwgaGFzIGNoYW5nZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaGFzQ2hhbmdlZCh7XG4gICAgaW5jbHVkZV9uYXZpZ2F0aW9uID0gZmFsc2UsXG4gIH06IHsgaW5jbHVkZV9uYXZpZ2F0aW9uPzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS5oYXNDaGFuZ2VkKHRoaXMsIHsgaW5jbHVkZV9uYXZpZ2F0aW9uIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBleGVjdXRpb24gY29udGV4dCBmb3IgYSBnaXZlbiBmdW5jdGlvbiwgd2hlcmUgdGhlIG1vZGVsIGlzIGJvdW5kIHRvIGl0cyBlbnRpdHkgZW5kcG9pbnRcbiAgICogQHBhcmFtIGN0eCBDb250ZXh0IGZ1bmN0aW9uXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGNvbnRleHRcbiAgICovXG4gIGFzRW50aXR5PFI+KGN0eDogKG1vZGVsOiB0aGlzKSA9PiBSKTogUiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEuYXNFbnRpdHkodGhpcywgY3R4KTtcbiAgfVxuXG4gIGNhbGxGdW5jdGlvbjxQLCBSPihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICByZXNwb25zZVR5cGU6ICdwcm9wZXJ0eScgfCAnbW9kZWwnIHwgJ2NvbGxlY3Rpb24nIHwgJ25vbmUnLFxuICAgIHsgLi4ub3B0aW9ucyB9OiB7fSAmIE9EYXRhRnVuY3Rpb25PcHRpb25zPFI+ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxSIHwgT0RhdGFNb2RlbDxSPiB8IE9EYXRhQ29sbGVjdGlvbjxSLCBPRGF0YU1vZGVsPFI+PiB8IG51bGw+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcbiAgICBpZiAoIShyZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5UmVzb3VyY2UpIHx8ICFyZXNvdXJjZS5oYXNLZXkoKSlcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiY2FsbEZ1bmN0aW9uOiBDYW4ndCBjYWxsIGZ1bmN0aW9uIHdpdGhvdXQgT0RhdGFFbnRpdHlSZXNvdXJjZSB3aXRoIGtleVwiXG4gICAgICAgICAgKVxuICAgICAgKTtcblxuICAgIGNvbnN0IGZ1bmMgPSByZXNvdXJjZS5mdW5jdGlvbjxQLCBSPihuYW1lKS5xdWVyeSgocSkgPT4gcS5hcHBseShvcHRpb25zKSk7XG4gICAgc3dpdGNoIChyZXNwb25zZVR5cGUpIHtcbiAgICAgIGNhc2UgJ3Byb3BlcnR5JzpcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbFByb3BlcnR5KHBhcmFtcywgb3B0aW9ucyk7XG4gICAgICBjYXNlICdtb2RlbCc6XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGxNb2RlbChwYXJhbXMsIG9wdGlvbnMpO1xuICAgICAgY2FzZSAnY29sbGVjdGlvbic6XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGxDb2xsZWN0aW9uKHBhcmFtcywgb3B0aW9ucyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHBhcmFtcywgeyByZXNwb25zZVR5cGUsIC4uLm9wdGlvbnMgfSk7XG4gICAgfVxuICB9XG5cbiAgY2FsbEFjdGlvbjxQLCBSPihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICByZXNwb25zZVR5cGU6ICdwcm9wZXJ0eScgfCAnbW9kZWwnIHwgJ2NvbGxlY3Rpb24nIHwgJ25vbmUnLFxuICAgIHsgLi4ub3B0aW9ucyB9OiB7fSAmIE9EYXRhQWN0aW9uT3B0aW9uczxSPiA9IHt9XG4gICk6IE9ic2VydmFibGU8UiB8IE9EYXRhTW9kZWw8Uj4gfCBPRGF0YUNvbGxlY3Rpb248UiwgT0RhdGFNb2RlbDxSPj4gfCBudWxsPiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKCEocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlKSB8fCAhcmVzb3VyY2UuaGFzS2V5KCkpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcImNhbGxBY3Rpb246IENhbid0IGNhbGwgYWN0aW9uIHdpdGhvdXQgT0RhdGFFbnRpdHlSZXNvdXJjZSB3aXRoIGtleVwiXG4gICAgICAgICAgKVxuICAgICAgKTtcblxuICAgIGNvbnN0IGFjdGlvbiA9IHJlc291cmNlLmFjdGlvbjxQLCBSPihuYW1lKS5xdWVyeSgocSkgPT4gcS5hcHBseShvcHRpb25zKSk7XG4gICAgc3dpdGNoIChyZXNwb25zZVR5cGUpIHtcbiAgICAgIGNhc2UgJ3Byb3BlcnR5JzpcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5jYWxsUHJvcGVydHkocGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ21vZGVsJzpcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5jYWxsTW9kZWwocGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ2NvbGxlY3Rpb24nOlxuICAgICAgICByZXR1cm4gYWN0aW9uLmNhbGxDb2xsZWN0aW9uKHBhcmFtcywgb3B0aW9ucyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYWN0aW9uLmNhbGwocGFyYW1zLCB7IHJlc3BvbnNlVHlwZSwgLi4ub3B0aW9ucyB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBDYXN0XG4gIGNhc3Q8Uz4odHlwZTogc3RyaW5nKTogT0RhdGFNb2RlbDxTPiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKCEocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGNhc3Q6IENhbid0IGNhc3QgdG8gZGVyaXZlZCBtb2RlbCB3aXRob3V0IE9EYXRhRW50aXR5UmVzb3VyY2VgXG4gICAgICApO1xuXG4gICAgcmV0dXJuIHJlc291cmNlXG4gICAgICAuY2FzdDxTPih0eXBlKVxuICAgICAgLmFzTW9kZWwodGhpcy50b0VudGl0eShJTkNMVURFX0RFRVApLCB7IGFubm90czogdGhpcy5hbm5vdHMoKSB9KTtcbiAgfVxuXG4gIGZldGNoTmF2aWdhdGlvblByb3BlcnR5PFM+KFxuICAgIG5hbWU6IGtleW9mIFQgfCBzdHJpbmcsXG4gICAgcmVzcG9uc2VUeXBlOiAnbW9kZWwnIHwgJ2NvbGxlY3Rpb24nLFxuICAgIHsgLi4ub3B0aW9ucyB9OiB7fSAmIE9EYXRhUXVlcnlBcmd1bWVudHNPcHRpb25zPFM+ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YU1vZGVsPFM+IHwgT0RhdGFDb2xsZWN0aW9uPFMsIE9EYXRhTW9kZWw8Uz4+IHwgbnVsbD4ge1xuICAgIGNvbnN0IG5hdiA9IHRoaXMubmF2aWdhdGlvblByb3BlcnR5PFM+KFxuICAgICAgbmFtZVxuICAgICkgYXMgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxTPjtcbiAgICBuYXYucXVlcnkoKHEpID0+IHEuYXBwbHkob3B0aW9ucykpO1xuICAgIHN3aXRjaCAocmVzcG9uc2VUeXBlKSB7XG4gICAgICBjYXNlICdtb2RlbCc6XG4gICAgICAgIHJldHVybiBuYXYuZmV0Y2hNb2RlbChvcHRpb25zKTtcbiAgICAgIGNhc2UgJ2NvbGxlY3Rpb24nOlxuICAgICAgICByZXR1cm4gbmF2LmZldGNoQ29sbGVjdGlvbihvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgVmFsdWVcbiAgZ2V0VmFsdWU8UD4oXG4gICAgbmFtZToga2V5b2YgVCB8IHN0cmluZyxcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zXG4gICk6IE9ic2VydmFibGU8UCB8IE9EYXRhTW9kZWw8UD4gfCBPRGF0YUNvbGxlY3Rpb248UCwgT0RhdGFNb2RlbDxQPj4gfCBudWxsPiB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLl9tZXRhLmZpZWxkKG5hbWUpO1xuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkIHx8IGZpZWxkLm5hdmlnYXRpb24pXG4gICAgICB0aHJvdyBFcnJvcihgZ2V0VmFsdWU6IENhbid0IGZpbmQgcHJvcGVydHkgJHtuYW1lIGFzIHN0cmluZ31gKTtcblxuICAgIGxldCB2YWx1ZSA9ICh0aGlzIGFzIGFueSlbbmFtZV0gYXNcbiAgICAgIHwgUFxuICAgICAgfCBPRGF0YU1vZGVsPFA+XG4gICAgICB8IE9EYXRhQ29sbGVjdGlvbjxQLCBPRGF0YU1vZGVsPFA+PjtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcHJvcCA9IGZpZWxkLnJlc291cmNlRmFjdG9yeShcbiAgICAgICAgdGhpcy5yZXNvdXJjZSgpXG4gICAgICApIGFzIE9EYXRhUHJvcGVydHlSZXNvdXJjZTxQPjtcbiAgICAgIHJldHVybiBmaWVsZC5jb2xsZWN0aW9uXG4gICAgICAgID8gcHJvcFxuICAgICAgICAgICAgLmZldGNoQ29sbGVjdGlvbihvcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUodGFwKChjKSA9PiB0aGlzLmFzc2lnbih7IFtuYW1lXTogYyB9LCB7IHNpbGVudDogdHJ1ZSB9KSkpXG4gICAgICAgIDogZmllbGQuaXNTdHJ1Y3R1cmVkVHlwZSgpXG4gICAgICAgID8gcHJvcFxuICAgICAgICAgICAgLmZldGNoTW9kZWwob3B0aW9ucylcbiAgICAgICAgICAgIC5waXBlKHRhcCgoYykgPT4gdGhpcy5hc3NpZ24oeyBbbmFtZV06IGMgfSwgeyBzaWxlbnQ6IHRydWUgfSkpKVxuICAgICAgICA6IHByb3BcbiAgICAgICAgICAgIC5mZXRjaFByb3BlcnR5KG9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZSh0YXAoKGMpID0+IHRoaXMuYXNzaWduKHsgW25hbWVdOiBjIH0sIHsgc2lsZW50OiB0cnVlIH0pKSk7XG4gICAgfVxuICAgIHJldHVybiBvZih2YWx1ZSBhcyBQKTtcbiAgfVxuXG4gIC8vIFNldCBSZWZlcmVuY2VcbiAgc2V0UmVmZXJlbmNlPE4+KFxuICAgIG5hbWU6IGtleW9mIFQgfCBzdHJpbmcsXG4gICAgbW9kZWw6IE9EYXRhTW9kZWw8Tj4gfCBPRGF0YUNvbGxlY3Rpb248TiwgT0RhdGFNb2RlbDxOPj4gfCBudWxsLFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTx0aGlzPiB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gKFxuICAgICAgdGhpcy5uYXZpZ2F0aW9uUHJvcGVydHk8Tj4obmFtZSkgYXMgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxOPlxuICAgICkucmVmZXJlbmNlKCk7XG5cbiAgICBjb25zdCBldGFnID0gdGhpcy5hbm5vdHMoKS5ldGFnO1xuICAgIGxldCBvYnMkID0gTkVWRVIgYXMgT2JzZXJ2YWJsZTxhbnk+O1xuICAgIGlmIChtb2RlbCBpbnN0YW5jZW9mIE9EYXRhTW9kZWwpIHtcbiAgICAgIG9icyQgPSByZWZlcmVuY2Uuc2V0KFxuICAgICAgICBtb2RlbC5fbWV0YS5lbnRpdHlSZXNvdXJjZShtb2RlbCkgYXMgT0RhdGFFbnRpdHlSZXNvdXJjZTxOPixcbiAgICAgICAgeyBldGFnLCAuLi5vcHRpb25zIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIE9EYXRhQ29sbGVjdGlvbikge1xuICAgICAgb2JzJCA9IGZvcmtKb2luKFxuICAgICAgICBtb2RlbFxuICAgICAgICAgIC5tb2RlbHMoKVxuICAgICAgICAgIC5tYXAoKG0pID0+XG4gICAgICAgICAgICByZWZlcmVuY2UuYWRkKFxuICAgICAgICAgICAgICBtLl9tZXRhLmVudGl0eVJlc291cmNlKG0pIGFzIE9EYXRhRW50aXR5UmVzb3VyY2U8Tj4sXG4gICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAobW9kZWwgPT09IG51bGwpIHtcbiAgICAgIG9icyQgPSByZWZlcmVuY2UudW5zZXQoeyBldGFnLCAuLi5vcHRpb25zIH0pO1xuICAgIH1cbiAgICB0aGlzLmV2ZW50cyQuZW1pdChcbiAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ3JlcXVlc3QnLCB7XG4gICAgICAgIG1vZGVsOiB0aGlzLFxuICAgICAgICBvcHRpb25zOiB7IG9ic2VydmFibGU6IG9icyQgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gb2JzJC5waXBlKFxuICAgICAgbWFwKChtb2RlbCkgPT4ge1xuICAgICAgICB0aGlzLmFzc2lnbih7IFtuYW1lXTogbW9kZWwgfSk7XG4gICAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KG5ldyBPRGF0YU1vZGVsRXZlbnQoJ3N5bmMnLCB7IG1vZGVsOiB0aGlzIH0pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRSZWZlcmVuY2U8UD4oXG4gICAgbmFtZToga2V5b2YgVCB8IHN0cmluZ1xuICApOiBPRGF0YU1vZGVsPFA+IHwgT0RhdGFDb2xsZWN0aW9uPFAsIE9EYXRhTW9kZWw8UD4+IHwgbnVsbCB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLl9tZXRhLmZpZWxkPFA+KG5hbWUpO1xuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkIHx8ICFmaWVsZC5uYXZpZ2F0aW9uKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBnZXRSZWZlcmVuY2U6IENhbid0IGZpbmQgbmF2aWdhdGlvbiBwcm9wZXJ0eSAke25hbWUgYXMgc3RyaW5nfWBcbiAgICAgICk7XG5cbiAgICBsZXQgbW9kZWwgPSAodGhpcyBhcyBhbnkpW25hbWVdIGFzXG4gICAgICB8IE9EYXRhTW9kZWw8UD5cbiAgICAgIHwgT0RhdGFDb2xsZWN0aW9uPFAsIE9EYXRhTW9kZWw8UD4+XG4gICAgICB8IG51bGw7XG4gICAgaWYgKG1vZGVsID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICBpZiAobW9kZWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGZpZWxkLmNvbGxlY3Rpb24pIHtcbiAgICAgICAgbW9kZWwgPSBmaWVsZC5jb2xsZWN0aW9uRmFjdG9yeSh7IHBhcmVudDogdGhpcyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWZlcmVuY2VkKGZpZWxkKSBhcyBQO1xuICAgICAgICBtb2RlbCA9XG4gICAgICAgICAgdmFsdWUgPT09IG51bGwgPyBudWxsIDogZmllbGQubW9kZWxGYWN0b3J5KHsgcGFyZW50OiB0aGlzLCB2YWx1ZSB9KTtcbiAgICAgIH1cbiAgICAgICh0aGlzIGFzIGFueSlbbmFtZV0gPSBtb2RlbDtcbiAgICB9XG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgLy8gTW9kZWwgZnVuY3Rpb25zXG4gIGVxdWFscyhvdGhlcjogT0RhdGFNb2RlbDxUPikge1xuICAgIGNvbnN0IHRoaXNLZXkgPSB0aGlzLmtleSgpO1xuICAgIGNvbnN0IG90aGVyS2V5ID0gb3RoZXIua2V5KCk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMgPT09IG90aGVyIHx8XG4gICAgICAodHlwZW9mIHRoaXMgPT09IHR5cGVvZiBvdGhlciAmJlxuICAgICAgICAoKDxhbnk+dGhpcylbdGhpcy5fbWV0YS5jaWRdID09PSAoPGFueT5vdGhlcilbdGhpcy5fbWV0YS5jaWRdIHx8XG4gICAgICAgICAgKHRoaXNLZXkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgb3RoZXJLZXkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgVHlwZXMuaXNFcXVhbCh0aGlzS2V5LCBvdGhlcktleSkpKSlcbiAgICApO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnTW9kZWwnO1xuICB9XG5cbiAgY29sbGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50ICE9PSBudWxsICYmXG4gICAgICBPRGF0YU1vZGVsT3B0aW9ucy5pc0NvbGxlY3Rpb24odGhpcy5fcGFyZW50WzBdKVxuICAgICAgPyAodGhpcy5fcGFyZW50WzBdIGFzIE9EYXRhQ29sbGVjdGlvbjxULCBPRGF0YU1vZGVsPFQ+PilcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgbmV4dCgpOiBPRGF0YU1vZGVsPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uKCk/Lm5leHQodGhpcyk7XG4gIH1cblxuICBwcmV2KCk6IE9EYXRhTW9kZWw8VD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24oKT8ucHJldih0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUkVTRVJWRURfRklFTERfTkFNRVMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhcbiAgT0RhdGFNb2RlbC5wcm90b3R5cGVcbik7XG4iXX0=
|