tnx-shared 5.1.521 → 5.1.523
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/bundles/tnx-shared.umd.js +22 -1
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/validators.d.ts +6 -0
- package/classes/base/validators.d.ts.map +1 -1
- package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts.map +1 -1
- package/esm2015/classes/base/validators.js +19 -1
- package/esm2015/components/workflow/workflow-history-new/workflow-history-new.component.js +3 -2
- package/fesm2015/tnx-shared.js +21 -2
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/tnx-shared.metadata.json +1 -1
|
@@ -36,6 +36,12 @@ export declare class CccdValidator implements IValidator {
|
|
|
36
36
|
validate(event: EventData): boolean;
|
|
37
37
|
getError(): string;
|
|
38
38
|
}
|
|
39
|
+
export declare class PassportValidator implements IValidator {
|
|
40
|
+
message: string;
|
|
41
|
+
constructor(message?: string);
|
|
42
|
+
validate(event: EventData): boolean;
|
|
43
|
+
getError(): string;
|
|
44
|
+
}
|
|
39
45
|
export declare class LengthValidator implements IValidator {
|
|
40
46
|
private _error;
|
|
41
47
|
private _min;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/classes/base/validators.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/classes/base/validators.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-history-new.component.d.ts","sourceRoot":"","sources":["../../../../../projects/tnx-shared/src/lib/components/workflow/workflow-history-new/workflow-history-new.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAa,QAAQ,EAAS,MAAM,EAAE,MAAM,eAAe,CAAC;AAElF,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAoB,eAAe,EAAY,cAAc,EAAqC,MAAM,8BAA8B,CAAC;AAC9I,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACjF,OAAO,EAAiB,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,qBAMa,2BAA4B,SAAQ,YAAa,YAAW,MAAM,EAAE,aAAa;IAiCtF,SAAS,CAAC,SAAS,EAAE,QAAQ;IACtB,uBAAuB,EAAE,sBAAsB;IACtD,SAAS,CAAC,mBAAmB,EAAE,kBAAkB;IACjD,SAAS,CAAC,iBAAiB,EAAE,oBAAoB;IACjD,SAAS,CAAC,gBAAgB,EAAE,eAAe;IAnCtC,eAAe,EAAE,eAAe,CAAC;IAGjC,cAAc,EAAE,OAAO,CAAS;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC;IACV,eAAe,EAAE,GAAG,CAAC;IAE9B,UAAU,wBAAkB;IAC5B,yBAAyB,mCAA6B;IACtD,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,EAAE;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,QAAQ,CAAA;KACjB,CAAC;IACF,YAAY,EAAE,OAAO,CAAS;IAC9B,UAAU,EAAE,OAAO,CAAS;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,GAAG,CAAqC;IACtD,aAAa,EAAE,aAAa,CAGzB;IACH,iBAAiB,EAAE,GAAG,CAAC;IACvB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,SAAS,UAAS;IAClB,gBAAgB,EAAE,GAAG,EAAE,CAAM;IAC7B,aAAa,SAAO;IACpB,WAAW,SAAM;gBAGH,SAAS,EAAE,QAAQ,EACtB,uBAAuB,EAAE,sBAAsB,EAC5C,mBAAmB,EAAE,kBAAkB,EACvC,iBAAiB,EAAE,oBAAoB,EACvC,gBAAgB,EAAE,eAAe,EAC3C,gBAAgB,EAAE,eAAe;IAMrC,QAAQ;IAgDR,IAAI;
|
|
1
|
+
{"version":3,"file":"workflow-history-new.component.d.ts","sourceRoot":"","sources":["../../../../../projects/tnx-shared/src/lib/components/workflow/workflow-history-new/workflow-history-new.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAa,QAAQ,EAAS,MAAM,EAAE,MAAM,eAAe,CAAC;AAElF,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAoB,eAAe,EAAY,cAAc,EAAqC,MAAM,8BAA8B,CAAC;AAC9I,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACjF,OAAO,EAAiB,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,qBAMa,2BAA4B,SAAQ,YAAa,YAAW,MAAM,EAAE,aAAa;IAiCtF,SAAS,CAAC,SAAS,EAAE,QAAQ;IACtB,uBAAuB,EAAE,sBAAsB;IACtD,SAAS,CAAC,mBAAmB,EAAE,kBAAkB;IACjD,SAAS,CAAC,iBAAiB,EAAE,oBAAoB;IACjD,SAAS,CAAC,gBAAgB,EAAE,eAAe;IAnCtC,eAAe,EAAE,eAAe,CAAC;IAGjC,cAAc,EAAE,OAAO,CAAS;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC;IACV,eAAe,EAAE,GAAG,CAAC;IAE9B,UAAU,wBAAkB;IAC5B,yBAAyB,mCAA6B;IACtD,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,EAAE;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,QAAQ,CAAA;KACjB,CAAC;IACF,YAAY,EAAE,OAAO,CAAS;IAC9B,UAAU,EAAE,OAAO,CAAS;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,GAAG,CAAqC;IACtD,aAAa,EAAE,aAAa,CAGzB;IACH,iBAAiB,EAAE,GAAG,CAAC;IACvB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,SAAS,UAAS;IAClB,gBAAgB,EAAE,GAAG,EAAE,CAAM;IAC7B,aAAa,SAAO;IACpB,WAAW,SAAM;gBAGH,SAAS,EAAE,QAAQ,EACtB,uBAAuB,EAAE,sBAAsB,EAC5C,mBAAmB,EAAE,kBAAkB,EACvC,iBAAiB,EAAE,oBAAoB,EACvC,gBAAgB,EAAE,eAAe,EAC3C,gBAAgB,EAAE,eAAe;IAMrC,QAAQ;IAgDR,IAAI;IAiJE,yBAAyB;IAazB,qBAAqB;IAuErB,yBAAyB,CAAC,YAAY,KAAA,EAAE,eAAe,KAAA,EAAE,IAAI,KAAA;IA2BnE,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,KAAA;IAalC,eAAe,CAAC,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG;IAQ7D,wBAAwB;IAM9B,sBAAsB;IAiBtB,OAAO,CAAC,gBAAgB;IAQlB,cAAc,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAclC,sBAAsB,CAAC,UAAU,KAAA;IA0CjC,YAAY;IAOlB,OAAO,CAAC,SAAS;IASjB,eAAe,CAAC,GAAG,KAAA;IAInB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,wBAAwB;IAQhC,iBAAiB,CAAC,OAAO,KAAA;IAoBnB,aAAa;CAGtB"}
|
|
@@ -152,6 +152,24 @@ export class CccdValidator {
|
|
|
152
152
|
return 'Không đúng định dạng CCCD/CMND';
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
|
+
export class PassportValidator {
|
|
156
|
+
constructor(message) {
|
|
157
|
+
this.message = 'Không đúng định dạng Số hộ chiếu hoặc Số CCCD hoặc chứng minh nhân dân';
|
|
158
|
+
if (message) {
|
|
159
|
+
this.message = message;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
validate(event) {
|
|
163
|
+
const value = event.value;
|
|
164
|
+
if (value == null || value === '')
|
|
165
|
+
return true;
|
|
166
|
+
const re = /^\d{0,12}$/;
|
|
167
|
+
return re.test(value);
|
|
168
|
+
}
|
|
169
|
+
getError() {
|
|
170
|
+
return this.message;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
155
173
|
export class LengthValidator {
|
|
156
174
|
constructor(max, min = 0) {
|
|
157
175
|
this._error = '';
|
|
@@ -748,4 +766,4 @@ export class ScalarValueValidator {
|
|
|
748
766
|
}
|
|
749
767
|
}
|
|
750
768
|
}
|
|
751
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jbGFzc2VzL2Jhc2UvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBR0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRSxPQUFPLEVBQWEsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFtQixXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFPNUIsU0FBUyxVQUFVLENBQUMsS0FBVSxFQUFFLE9BQXdCO0lBQ3BELElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFO1FBQ3ZDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztLQUNoQjtJQUNELElBQUksT0FBTyxZQUFZLG9CQUFvQixFQUFFO1FBQ3pDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRWhELE1BQU0sY0FBYyxHQUF5QixPQUFPLENBQUM7UUFDckQsSUFBSSxjQUFjLENBQUMsZ0JBQWdCLEVBQUU7WUFDakMsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLEVBQUU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7U0FDekU7UUFFRCxJQUFJLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNqQyxJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssRUFBRTtnQkFBRSxPQUFPLEtBQUssQ0FBQztTQUN6RTtRQUVELElBQUksY0FBYyxDQUFDLFlBQVks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QUFVO1FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNoQixLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDcEIsS0FBSyxTQUFTLENBQUMsUUFBUTtnQkFDbkIsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUM7WUFDaEQsS0FBSyxTQUFTLENBQUMsR0FBRztnQkFDZCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixLQUFLLFNBQVMsQ0FBQyxPQUFPO2dCQUNsQixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixLQUFLLFNBQVMsQ0FBQyxPQUFPO2dCQUNsQixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixLQUFLLFNBQVMsQ0FBQyxNQUFNO2dCQUNqQixPQUFPLEtBQUssQ0FBQztTQUNwQjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRyb2xUcmVlTm9kZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3J1ZC9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IGlzQXJyYXksIGlzTGl0ZXJhbE9iamVjdCB9IGZyb20gJy4uL2Vudmlyb25tZW50LXNjaGVtYSc7XG5pbXBvcnQgeyBFdmVudERhdGEsIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSwgT3BlcmF0b3IgfSBmcm9tICcuLi9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBBZGRyZXNzQ29udHJvbFNjaGVtYSwgRm9ybUNvbnRyb2xCYXNlLCBUYWJsZVNjaGVtYSB9IGZyb20gJy4vLi4vZm9ybS1zY2hlbWEnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbjtcbiAgICBnZXRFcnJvcigpOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGlzTm90RW1wdHkodmFsdWU6IGFueSwgY29udHJvbDogRm9ybUNvbnRyb2xCYXNlKTogYm9vbGVhbiB7XG4gICAgaWYgKCEhdmFsdWUgJiYgdHlwZW9mICh2YWx1ZSkgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFsdWUudHJpbSgpO1xuICAgIH1cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEFkZHJlc3NDb250cm9sU2NoZW1hKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGFkZHJlc3NDb250cm9sID0gPEFkZHJlc3NDb250cm9sU2NoZW1hPmNvbnRyb2w7XG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZFByb3ZpbmNlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuaWRQcm92aW5jZSA9PSBudWxsIHx8IHZhbHVlLmlkUHJvdmluY2UgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWRkcmVzc0NvbnRyb2wucmVxdWlyZWREaXN0cmljdCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmlkRGlzdHJpY3QgPT0gbnVsbCB8fCB2YWx1ZS5pZERpc3RyaWN0ID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkZHJlc3NDb250cm9sLnJlcXVpcmVkV2FyZCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmlkV2FyZCA9PSBudWxsIHx8IHZhbHVlLmlkV2FyZCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZFN0cmVldCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLnN0cmVldCA9PSBudWxsIHx8IHZhbHVlLnN0cmVldCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZE5vKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUubm8gPT0gbnVsbCB8fCB2YWx1ZS5ubyA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hKSB7XG4gICAgICAgIGlmICghY29udHJvbC5fY29tcG9uZW50Ll92YWx1ZSB8fCBjb250cm9sLl9jb21wb25lbnQuX3ZhbHVlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBfbGFiZWw7XG5cbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIHRoaXMuX2xhYmVsID0gZXZlbnQuY29udHJvbC5sYWJlbDtcbiAgICAgICAgcmV0dXJuIGlzTm90RW1wdHkoZXZlbnQudmFsdWUsIGV2ZW50LmNvbnRyb2wpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICBpZiAodGhpcy5fbGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLl9sYWJlbH0gYuG6r3QgYnXhu5ljIG5o4bqtcGA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ1RyxrDhu51uZyB0aMO0bmcgdGluIGLhuq90IGJ14buZYyBuaOG6rXAnO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVxdWlyZWRGaWVsZHNWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBfcmVxdWlyZWRGaWVsZHM6IHN0cmluZ1tdO1xuICAgIF9tZXNzYWdlOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihyZXF1aXJlZEZpZWxkczogc3RyaW5nW10sIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9yZXF1aXJlZEZpZWxkcyA9IHJlcXVpcmVkRmllbGRzO1xuICAgICAgICBpZiAodGhpcy5fcmVxdWlyZWRGaWVsZHMubGVuZ3RoID09IDApIGFsZXJ0KCdD4bqldSBow6xuaCBSZXF1aXJlZEZpZWxkc1ZhbGlkYXRvciBzYWknKTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgZ2V0UmVxdWlyZWRGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZEZpZWxkcztcbiAgICB9XG5cbiAgICBnZXRNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKSB7XG4gICAgICAgIGNvbnN0IGFsbFJlcXVpcmVkRmllbGRzID0gWy4uLnRoaXMuX3JlcXVpcmVkRmllbGRzLCBldmVudC5jb250cm9sLmZpZWxkXTtcbiAgICAgICAgbGV0IGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcGFyZW50TW9kZWwgPSBldmVudC5jdXJyZW50Tm9kZS5wYXJlbnROb2RlLm1vZGVsO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGFsbFJlcXVpcmVkRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudE1vZGVsLl9lcnJvcnNbZmllbGRdLmluZGV4T2YodGhpcy5fbWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsLl9lcnJvcnNbZmllbGRdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gZXZlbnQuY3VycmVudE5vZGUuZ2V0Tm9kZUJ5UGF0aChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoaXNOb3RFbXB0eShjdXJyZW50Tm9kZS5tb2RlbCwgY3VycmVudE5vZGUuY29udHJvbCkpIHtcbiAgICAgICAgICAgICAgICBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXF1aXJlZEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5wdXNoKHRoaXMuX21lc3NhZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gIWhhc0Vycm9yO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbWFpbFZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eKChbXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoXFxbWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcXSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC87XG4gICAgICAgIHJldHVybiByZS50ZXN0KFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyB0aMawIMSRaeG7h24gdOG7rSc7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBOYW1lVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIC8vIGNvbnN0IHJlID0gL15bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSooPzpbIF1bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSopKiR8XltBLVrDgMOB4bqg4bqiw4PDguG6puG6pOG6rOG6qOG6qsSC4bqw4bqu4bq24bqy4bq0w4jDieG6uOG6uuG6vMOK4buA4bq+4buG4buC4buEw4zDjeG7iuG7iMSow5LDk+G7jOG7jsOVw5Thu5Lhu5Dhu5jhu5Thu5bGoOG7nOG7muG7ouG7nuG7oMOZw5rhu6Thu6bFqMav4buq4buo4buw4bus4buu4buyw53hu7Thu7bhu7jEkF0qKD86WyBdW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXSopKiR8XihbYS16QS1aXXsyLH1cXHNbYS16QS1aXXsxLH0nPy0/W2EtekEtWl17Mix9XFxzPyhbYS16QS1aXXsxLH0pPykvO1xuICAgICAgICBjb25zdCByZSA9IC9bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSooPzpbIF1bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSopKiR8XltBLVrDgMOB4bqg4bqiw4PDguG6puG6pOG6rOG6qOG6qsSC4bqw4bqu4bq24bqy4bq0w4jDieG6uOG6uuG6vMOK4buA4bq+4buG4buC4buEw4zDjeG7iuG7iMSow5LDk+G7jOG7jsOVw5Thu5Lhu5Dhu5jhu5Thu5bGoOG7nOG7muG7ouG7nuG7oMOZw5rhu6Thu6bFqMav4buq4buo4buw4bus4buu4buyw53hu7Thu7bhu7jEkF0qKD86WyBdW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXSopKiR8WyBdfF4oW2EtekEtWl17Mix9XFxzW2EtekEtWl17MSx9Jz8tP1thLXpBLVpdezIsfVxccz8oW2EtekEtWl17MSx9KT8pLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyB0w6puJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQaG9uZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eMFsxLTldWzAtOV17OCw5fSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyBz4buRIMSRaeG7h24gdGhv4bqhaSc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2NjZFZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eXFxkezl9JHxeXFxkezEyfSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyBDQ0NEL0NNTkQnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExlbmd0aFZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHByaXZhdGUgX2Vycm9yOiBhbnkgPSAnJztcbiAgICBwcml2YXRlIF9taW4gPSAwO1xuICAgIHByaXZhdGUgX21heCA9IDEwMDtcblxuICAgIGNvbnN0cnVjdG9yKG1heCwgbWluID0gMCkge1xuICAgICAgICB0aGlzLl9tYXggPSBtYXg7XG4gICAgICAgIHRoaXMuX21pbiA9IG1pbjtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9taW4gPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3IgPSBgxJDhu5kgZMOgaSB04buRaSB0aGnhu4N1ICR7dGhpcy5fbWlufSBrw70gdOG7sWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSA9IHZhbHVlICsgJyc7XG4gICAgICAgIGNvbnN0IGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbiA8IHRoaXMuX21pbikge1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IgPSBgxJDhu5kgZMOgaSB04buRaSB0aGnhu4N1ICR7dGhpcy5fbWlufSBrw70gdOG7sWA7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxlbiA+IHRoaXMuX21heCkge1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IgPSBgxJDhu5kgZMOgaSB04buRaSDEkWEgJHt0aGlzLl9tYXh9IGvDvSB04buxYDtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3I7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGhvbmVOdW1iZXJWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXlsgXXxbKyhdKlswLTldezEsNH1bKV17MCwxfVstXFxzXFwuLzAtOV0qJC9nO1xuICAgICAgICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgc+G7kSDEkWnhu4duIHRob+G6oWknO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE51bWJlck9ubHlWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvXlxcLT8oWzAtOV0pKiQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgc+G7kSc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXRMZWFzdE9uZVJvd1RhYmxlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZXZlbnQuY3VycmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0LhuqNuZyBi4bqvdCBideG7mWMgbmjhuq1wJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYXhDb2RlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHJlID0gL14oWzAtOV0pezEwfSR8XihbMC05XSl7MTB9KC0pKFswLTldKXszfSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gJ0tow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgbcOjIHPhu5EgdGh14bq/JztcbiAgICB9XG59XG5cbmNvbnN0IHZhbGlkRnVuY3Rpb24gPSB7XG4gICAgW09wZXJhdG9yLmdyZWF0ZXJdOiAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSA9PiB2YWx1ZTEgPiB2YWx1ZTIsXG4gICAgW09wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWxdOiAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSA9PiB2YWx1ZTEgPj0gdmFsdWUyLFxuICAgIFtPcGVyYXRvci5sb3dlcl06ICh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpID0+IHZhbHVlMSA8IHZhbHVlMixcbiAgICBbT3BlcmF0b3IubG93ZXJUaGFuRXF1YWxdOiAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSA9PiB2YWx1ZTEgPD0gdmFsdWUyLFxuICAgIFtPcGVyYXRvci5lcXVhbF06ICh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpID0+IHZhbHVlMSA9PSB2YWx1ZTJcbn07XG5cbmNvbnN0IG9wZXJhdG9yTWVhbmluZyA9IHtcbiAgICBbT3BlcmF0b3IuZ3JlYXRlcl06ICds4bubbiBoxqFuJyxcbiAgICBbT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbF06ICds4bubbiBoxqFuIGhv4bq3YyBi4bqxbmcnLFxuICAgIFtPcGVyYXRvci5sb3dlcl06ICduaOG7jyBoxqFuJyxcbiAgICBbT3BlcmF0b3IubG93ZXJUaGFuRXF1YWxdOiAnbmjhu48gaMahbiBob+G6t2MgYuG6sW5nJyxcbiAgICBbT3BlcmF0b3IuZXF1YWxdOiAnYuG6sW5nJ1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJQ29tcGFyZVZhbGlkYXRvciB7XG4gICAgY29tcGFyZVVuaXF1ZUZpZWxkOiBzdHJpbmc7XG4gICAgZ2V0T3BlcmF0b3JDb21wYXJlKCk6IE9wZXJhdG9yO1xufVxuXG4vKipcbiAqIFNvIHNhbmggMiB0aHXhu5ljIHTDrW5oIHRyb25nIGZvcm0uXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wYXJlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciwgSUNvbXBhcmVWYWxpZGF0b3Ige1xuICAgIHByaXZhdGUgX29wZXJhdG9yOiBPcGVyYXRvcjtcbiAgICBwcml2YXRlIF9jb21wYXJlQ29udHJvbDogRm9ybUNvbnRyb2xCYXNlO1xuICAgIGNvbXBhcmVVbmlxdWVGaWVsZDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3Iob3BlcmF0b3I6IE9wZXJhdG9yLCBjb21wYXJlVW5pcXVlRmllbGQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICB0aGlzLmNvbXBhcmVVbmlxdWVGaWVsZCA9IGNvbXBhcmVVbmlxdWVGaWVsZDtcbiAgICB9XG5cbiAgICBnZXRPcGVyYXRvckNvbXBhcmUoKTogT3BlcmF0b3Ige1xuICAgICAgICByZXR1cm4gdGhpcy5fb3BlcmF0b3I7XG4gICAgfVxuXG4gICAgZ2V0RmllbGRPcGVyYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yO1xuICAgIH1cblxuICAgIGdldFZhbHVlQ29tcGFyZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjb21wYXJlTm9kZSA9IGV2ZW50LmN1cnJlbnROb2RlLmdldE5vZGVCeVBhdGgodGhpcy5jb21wYXJlVW5pcXVlRmllbGQpO1xuICAgICAgICB0aGlzLl9jb21wYXJlQ29udHJvbCA9IGNvbXBhcmVOb2RlLmNvbnRyb2w7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVGaWVsZCA9IHRoaXMuX2NvbXBhcmVDb250cm9sLmZpZWxkO1xuICAgICAgICBjb25zdCBjb21wYXJlVmFsdWUgPSBjb21wYXJlTm9kZS5tb2RlbDtcbiAgICAgICAgY29uc3QgY29tcGFyZVBhcmVudE1vZGVsID0gY29tcGFyZU5vZGUucGFyZW50Tm9kZS5tb2RlbDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgbGV0IGVycm9yTWVzO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHRoaXMuX2NvbXBhcmVDb250cm9sLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0b3IgaW5zdGFuY2VvZiBDb21wYXJlVmFsaWRhdG9yICYmIHZhbGlkYXRvci5jb21wYXJlVW5pcXVlRmllbGQgPT0gZXZlbnQuY3VycmVudE5vZGUuY29udHJvbC51bmlxdWVGaWVsZCkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzID0gdmFsaWRhdG9yLmdldEVycm9yKGV2ZW50LmN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGNvbXBhcmVQYXJlbnRNb2RlbC5fZXJyb3JzW2NvbXBhcmVGaWVsZF0uaW5kZXhPZihlcnJvck1lcyk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZVBhcmVudE1vZGVsLl9lcnJvcnNbY29tcGFyZUZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICB8fCB2YWx1ZSA9PT0gJydcbiAgICAgICAgICAgIHx8IGNvbXBhcmVWYWx1ZSA9PSBudWxsXG4gICAgICAgICAgICB8fCBjb21wYXJlVmFsdWUgPT0gJydcbiAgICAgICAgKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IHZhbGlkRnVuY3Rpb25bdGhpcy5fb3BlcmF0b3JdICYmIHZhbGlkRnVuY3Rpb25bdGhpcy5fb3BlcmF0b3JdKFxuICAgICAgICAgICAgdGhpcy5nZXRWYWx1ZUNvbXBhcmUodmFsdWUpLCB0aGlzLmdldFZhbHVlQ29tcGFyZShjb21wYXJlVmFsdWUpXG4gICAgICAgICk7XG5cblxuICAgICAgICBpZiAoIXJlICYmIGVycm9yTWVzKSB7XG4gICAgICAgICAgICBjb21wYXJlUGFyZW50TW9kZWwuX2Vycm9yc1tjb21wYXJlRmllbGRdLnB1c2goZXJyb3JNZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlO1xuICAgIH1cblxuICAgIGdldEVycm9yKGNvbnRyb2xUcmVlTm9kZT86IENvbnRyb2xUcmVlTm9kZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NvbXBhcmVDb250cm9sICYmIGNvbnRyb2xUcmVlTm9kZSkge1xuICAgICAgICAgICAgdGhpcy5fY29tcGFyZUNvbnRyb2wgPSBjb250cm9sVHJlZU5vZGUuZ2V0Tm9kZUJ5UGF0aCh0aGlzLmNvbXBhcmVVbmlxdWVGaWVsZCkuY29udHJvbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFBo4bqjaSAke29wZXJhdG9yTWVhbmluZ1t0aGlzLl9vcGVyYXRvcl19ICR7dGhpcy5fY29tcGFyZUNvbnRyb2w/LmZ1bGxMYWJlbH1gO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVDb21wYXJlVmFsaWRhdG9yIGV4dGVuZHMgQ29tcGFyZVZhbGlkYXRvciB7XG4gICAgY29uc3RydWN0b3Iob3BlcmF0b3I6IE9wZXJhdG9yLCBmaWVsZDogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG9wZXJhdG9yLCBmaWVsZCk7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVDb21wYXJlKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE51bWJlckNvbXBhcmVWYWxpZGF0b3IgZXh0ZW5kcyBDb21wYXJlVmFsaWRhdG9yIHtcbiAgICBjb25zdHJ1Y3RvcihvcGVyYXRvcjogT3BlcmF0b3IsIGZpZWxkOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIob3BlcmF0b3IsIGZpZWxkKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZUNvbXBhcmUodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG59XG5cbi8qKlxuICogS2nhu4NtIHRyYSBnacOhIHRy4buLIG3hu5l0IGPhu5l0IMSRw6MgdOG7k24gdOG6oWkgdHJvbmcgZGIuXG4gKi9cbmV4cG9ydCBjbGFzcyBDaGVja0R1cGxpY2F0ZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHByaXZhdGUgX2xhYmVsOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZztcbiAgICBwcml2YXRlIF9iYXNlU2VydmljZTogQmFzZVNlcnZpY2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEZpbHRlcnM6IEZpbHRlcltdO1xuXG4gICAgY29uc3RydWN0b3IoZGVmYXVsdEZpbHRlcnM/OiBGaWx0ZXJbXSkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0RmlsdGVycyA9IGRlZmF1bHRGaWx0ZXJzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRCYXNlU2VydmljZShiYXNlU2VydmljZTogQmFzZVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fYmFzZVNlcnZpY2UgPSBiYXNlU2VydmljZTtcbiAgICB9XG5cbiAgICBhc3luYyB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGxldCB2YWx1ZUZpbHRlcjogYW55O1xuICAgICAgICBpZiAoZXZlbnQuY3VycmVudE5vZGUuY29udHJvbC5mdWxsTGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhYmVsID0gZXZlbnQuY3VycmVudE5vZGUuY29udHJvbC5mdWxsTGFiZWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9sYWJlbCA9IGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wubGFiZWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBldmVudC5jdXJyZW50Tm9kZS52YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQuY3VycmVudE5vZGUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBldmVudC5jdXJyZW50Tm9kZS52YWx1ZS5tYXAoeCA9PiB4W2V2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2xbJ2Rpc3BsYXlGaWVsZCddXSkuam9pbignLCAnKTtcbiAgICAgICAgICAgICAgICB2YWx1ZUZpbHRlciA9IGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlLm1hcCh4ID0+IHhbZXZlbnQuY3VycmVudE5vZGUuY29udHJvbFsndmFsdWVGaWVsZCddXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlW2V2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2xbJ2Rpc3BsYXlGaWVsZCddXS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gZXZlbnQuY3VycmVudE5vZGUudmFsdWVbZXZlbnQuY3VycmVudE5vZGUuY29udHJvbFsndmFsdWVGaWVsZCddXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gZXZlbnQuY3VycmVudE5vZGUudmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gZXZlbnQuY3VycmVudE5vZGUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbe1xuICAgICAgICAgICAgZmllbGQ6IGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wuZmllbGQsXG4gICAgICAgICAgICBvcGVyYXRvcjogQXJyYXkuaXNBcnJheSh2YWx1ZUZpbHRlcikgPyBPcGVyYXRvci5pbiA6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlRmlsdGVyKVxuICAgICAgICB9XTtcbiAgICAgICAgaWYgKGV2ZW50LnJvb3RNb2RlbC5pZCkge1xuICAgICAgICAgICAgZmlsdGVycy51bnNoaWZ0KHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3Iubm90RXF1YWwsXG4gICAgICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KGV2ZW50LnJvb3RNb2RlbC5pZClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0RmlsdGVycykge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKC4uLnRoaXMuX2RlZmF1bHRGaWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRDaGVja0V4aXN0ID0gYXdhaXQgdGhpcy5fYmFzZVNlcnZpY2UuY2hlY2tFeGlzdEJ5RmlsdGVyKGZpbHRlcnMpO1xuICAgICAgICBpZiAoIXJlc3VsdENoZWNrRXhpc3Quc3VjY2VzcyB8fCByZXN1bHRDaGVja0V4aXN0LmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIGBUcsaw4budbmcgJHt0aGlzLl9sYWJlbH0gY8OzIGdpw6EgdHLhu4sgJHt0aGlzLl92YWx1ZX0gxJHDoyB04buTbiB04bqhaWA7XG4gICAgfVxufVxuXG4vKipcbiAqIEtp4buDbSB0cmEgYuG7mSBnw6FpIHRy4buLIGPhu6dhIG5oaeG7gXUgY+G7mXQgxJHDoyB04buTbiB04bqhaSB0cm9uZyBkYi5cbiAqL1xuZXhwb3J0IGNsYXNzIENoZWNrRHVwbGljYXRlRmllbGRzVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgX2R1cGxpY2F0ZUZpZWxkczogc3RyaW5nW107XG4gICAgX21lc3NhZ2U6IHN0cmluZztcbiAgICBfb2xkTWVzc2FnZTogc3RyaW5nO1xuICAgIF9iYXNlU2VydmljZTogQmFzZVNlcnZpY2U7XG4gICAgX2RpY1ZhbHVlOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0RmlsdGVyczogRmlsdGVyW107XG5cbiAgICBjb25zdHJ1Y3RvcihkdXBsaWNhdGVGaWVsZHM6IHN0cmluZ1tdLCBtZXNzYWdlOiBzdHJpbmcsIGRlZmF1bHRGaWx0ZXJzPzogRmlsdGVyW10pIHtcbiAgICAgICAgdGhpcy5fZHVwbGljYXRlRmllbGRzID0gZHVwbGljYXRlRmllbGRzO1xuICAgICAgICBpZiAodGhpcy5fZHVwbGljYXRlRmllbGRzLmxlbmd0aCA9PSAwKSBhbGVydCgnQ+G6pXUgaMOsbmggQ2hlY2tEdXBsaWNhdGVGaWVsZHNWYWxpZGF0b3Igc2FpJyk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB0aGlzLl9kZWZhdWx0RmlsdGVycyA9IGRlZmF1bHRGaWx0ZXJzO1xuICAgIH1cblxuICAgIHNldEJhc2VTZXJ2aWNlKGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZSkge1xuICAgICAgICB0aGlzLl9iYXNlU2VydmljZSA9IGJhc2VTZXJ2aWNlO1xuICAgIH1cblxuICAgIGdldER1cGxpY2F0ZUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2R1cGxpY2F0ZUZpZWxkcztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0RmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRGaWx0ZXJzO1xuICAgIH1cblxuICAgIGdldE1lc3NhZ2UoKSB7XG4gICAgICAgIC8vIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoJyg/PD17eylbXn1dKyg/PX0pJywgJ2cnKTtcbiAgICAgICAgY29uc3QgcmVnID0gL3t7KFtefV0rKX19L2c7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX21lc3NhZ2UubWF0Y2gocmVnKTtcbiAgICAgICAgbGV0IG5ld01lc3NhZ2UgPSB0aGlzLl9tZXNzYWdlO1xuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgIGNvbnN0IGRpY1ZhbHVlID0gdGhpcy5fZGljVmFsdWU7XG4gICAgICAgICAgICByZXN1bHQuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXZhbChgdmFsdWUgPSBkaWNWYWx1ZS4ke2ZpZWxkfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBuZXdNZXNzYWdlID0gbmV3TWVzc2FnZS5yZXBsYWNlKGB7eyR7ZmllbGR9fX1gLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgbmV3TWVzc2FnZSA9IG5ld01lc3NhZ2UucmVwbGFjZShmaWVsZCwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb2xkTWVzc2FnZSA9IG5ld01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBuZXdNZXNzYWdlO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpIHtcbiAgICAgICAgY29uc3QgYWxsRHVwbGljYXRlRmllbGRzID0gWy4uLnRoaXMuX2R1cGxpY2F0ZUZpZWxkcywgZXZlbnQuY29udHJvbC5maWVsZF07XG4gICAgICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG4gICAgICAgIGxldCBoYXNOdWxsVmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBwYXJlbnRNb2RlbCA9IGV2ZW50LmN1cnJlbnROb2RlLnBhcmVudE5vZGUubW9kZWw7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgYWxsRHVwbGljYXRlRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudE1vZGVsLl9lcnJvcnNbZmllbGRdLmluZGV4T2YodGhpcy5fb2xkTWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsLl9lcnJvcnNbZmllbGRdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gZXZlbnQuY3VycmVudE5vZGUuZ2V0Tm9kZUJ5UGF0aChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoY3VycmVudE5vZGUudmFsdWUgIT0gbnVsbCAmJiBjdXJyZW50Tm9kZS52YWx1ZSAhPSAnJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RpY1ZhbHVlW2ZpZWxkXSA9IGN1cnJlbnROb2RlLnZhbHVlO1xuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh0aGlzLmdldFZhbHVlKHRoaXMuX2RpY1ZhbHVlW2ZpZWxkXSkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGhhc051bGxWYWx1ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBO4bq/dSBjw7MgMSB0csaw4budbmcgYuG7iyB0cuG7kW5nIChraMO0bmcgY8OzIGThu68gbGnhu4d1KSB0aMOsIHRy4bqjIHbhu4EgdHJ1ZVxuICAgICAgICBpZiAoaGFzTnVsbFZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGV2ZW50LnJvb3RNb2RlbC5pZCkge1xuICAgICAgICAgICAgZmlsdGVycy51bnNoaWZ0KHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3Iubm90RXF1YWwsXG4gICAgICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KGV2ZW50LnJvb3RNb2RlbC5pZClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0RmlsdGVycykge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKC4uLnRoaXMuX2RlZmF1bHRGaWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRDaGVja0V4aXN0ID0gYXdhaXQgdGhpcy5fYmFzZVNlcnZpY2UuY2hlY2tFeGlzdEJ5RmlsdGVyKGZpbHRlcnMpO1xuICAgICAgICBpZiAoIXJlc3VsdENoZWNrRXhpc3Quc3VjY2VzcyB8fCByZXN1bHRDaGVja0V4aXN0LmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX2R1cGxpY2F0ZUZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5wdXNoKHRoaXMuZ2V0TWVzc2FnZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZShyYXdWYWx1ZSkge1xuICAgICAgICBpZiAoaXNMaXRlcmFsT2JqZWN0KHJhd1ZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHJhd1ZhbHVlLl9kcm9wZG93bnZhbHVlICE9IG51bGwgJiYgcmF3VmFsdWUuX2Ryb3Bkb3dudmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhd1ZhbHVlW3Jhd1ZhbHVlLl9kcm9wZG93bnZhbHVlXSB8fCByYXdWYWx1ZVsndmFsdWUnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByYXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0FycmF5KHJhd1ZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmF3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLmdldFZhbHVlKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhd1ZhbHVlO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2xkTWVzc2FnZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmlxdWVGaWVsZEluVGFibGVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9maWVsZDtcblxuICAgIGNvbnN0cnVjdG9yKGZpZWxkKSB7XG4gICAgICAgIHRoaXMuX2ZpZWxkID0gZmllbGQ7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIShldmVudC5jdXJyZW50Tm9kZS5jb250cm9sIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3QgZGljID0ge307XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBldmVudC5jdXJyZW50Tm9kZS5jb250cm9sLnJvd1RlbXBsYXRlLmZpbmQoaXRlbSA9PiBpdGVtLmZpZWxkID09IHRoaXMuX2ZpZWxkKTtcbiAgICAgICAgaWYgKCFjb250cm9sKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCBlcnJvck1lcyA9ICdUcsaw4budbmcgJyArIGNvbnRyb2wubGFiZWwgKyAnIGtow7RuZyDEkcaw4bujYyB0csO5bmcgbmhhdSc7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBldmVudC52YWx1ZSkge1xuICAgICAgICAgICAgaWYgKGl0ZW1bdGhpcy5fZmllbGRdICE9IG51bGwgJiYgaXRlbVt0aGlzLl9maWVsZF0gIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtLl9lcnJvcnNbdGhpcy5fZmllbGRdLmluZGV4T2YoZXJyb3JNZXMpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSBpdGVtLl9lcnJvcnNbdGhpcy5fZmllbGRdLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBpdGVtW3RoaXMuX2ZpZWxkXTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ19kcm9wZG93bnZhbHVlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVt2YWx1ZVsnX2Ryb3Bkb3dudmFsdWUnXV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFkaWNbdmFsdWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpY1t2YWx1ZV0gPSBbaXRlbV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkaWNbdmFsdWVdLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRpYykge1xuICAgICAgICAgICAgaWYgKGRpY1trZXldLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRpY1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uX2Vycm9yc1t0aGlzLl9maWVsZF0ucHVzaChlcnJvck1lcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaGFzRXJyb3I7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgRXhhY3RPbmVWYWx1ZUluVGFibGVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9maWVsZDtcbiAgICBwcml2YXRlIF92YWx1ZTtcbiAgICBwcml2YXRlIF9sYWJlbDtcblxuICAgIGNvbnN0cnVjdG9yKGZpZWxkLCB2YWx1ZSwgbGFiZWw/KSB7XG4gICAgICAgIHRoaXMuX2ZpZWxkID0gZmllbGQ7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2xhYmVsID0gbGFiZWwgPyBsYWJlbCA6IHZhbHVlO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCEoZXZlbnQuY3VycmVudE5vZGUuY29udHJvbCBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IGRpYyA9IHt9O1xuICAgICAgICBjb25zdCBjb250cm9sID0gZXZlbnQuY3VycmVudE5vZGUuY29udHJvbC5yb3dUZW1wbGF0ZS5maW5kKGl0ZW0gPT4gaXRlbS5maWVsZCA9PSB0aGlzLl9maWVsZCk7XG4gICAgICAgIGlmICghY29udHJvbCkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgZXJyb3JNZXMgPSAnQ2jhu4kgxJHGsOG7o2Mgbmjhuq1wIG3hu5l0IGdpw6EgdHLhu4sgJyArIHRoaXMuX2xhYmVsO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZXZlbnQudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbS5fZXJyb3JzW3RoaXMuX2ZpZWxkXS5pbmRleE9mKGVycm9yTWVzKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSBpdGVtLl9lcnJvcnNbdGhpcy5fZmllbGRdLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGl0ZW1bdGhpcy5fZmllbGRdO1xuICAgICAgICAgICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdfZHJvcGRvd252YWx1ZScpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVt2YWx1ZVsnX2Ryb3Bkb3dudmFsdWUnXV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSB0aGlzLl92YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghZGljW3ZhbHVlXSkge1xuICAgICAgICAgICAgICAgICAgICBkaWNbdmFsdWVdID0gW2l0ZW1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGljW3ZhbHVlXS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWMpIHtcbiAgICAgICAgICAgIGlmIChkaWNba2V5XS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkaWNba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLl9lcnJvcnNbdGhpcy5fZmllbGRdLnB1c2goZXJyb3JNZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWhhc0Vycm9yO1xuICAgIH1cblxuICAgIGdldEVycm9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFNhbWVWYWx1ZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIF9zYW1lRmllbGRzOiBzdHJpbmdbXTtcbiAgICBfbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoZHVwbGljYXRlRmllbGRzOiBzdHJpbmdbXSwgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3NhbWVGaWVsZHMgPSBkdXBsaWNhdGVGaWVsZHM7XG4gICAgICAgIGlmICh0aGlzLl9zYW1lRmllbGRzLmxlbmd0aCA9PSAwKSBhbGVydCgnQ+G6pXUgaMOsbmggU2FtZVZhbGlkYXRvciBzYWknKTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgZ2V0U2FtZUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NhbWVGaWVsZHM7XG4gICAgfVxuXG4gICAgZ2V0TWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gICAgfVxuXG4gICAgYXN5bmMgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSkge1xuICAgICAgICBjb25zdCBhbGxEdXBsaWNhdGVGaWVsZHMgPSBbLi4udGhpcy5fc2FtZUZpZWxkcywgZXZlbnQuY29udHJvbC5maWVsZF07XG5cbiAgICAgICAgY29uc3QgcGFyZW50TW9kZWwgPSBldmVudC5jdXJyZW50Tm9kZS5wYXJlbnROb2RlLm1vZGVsO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGFsbER1cGxpY2F0ZUZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5pbmRleE9mKHRoaXMuX21lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBlcnJvciA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbER1cGxpY2F0ZUZpZWxkcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gYWxsRHVwbGljYXRlRmllbGRzW2ldO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudE5vZGUgPSBldmVudC5jdXJyZW50Tm9kZS5nZXROb2RlQnlQYXRoKGZpZWxkKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS52YWx1ZSAhPSBldmVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX3NhbWVGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0ucHVzaCh0aGlzLl9tZXNzYWdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gVmFsdWVUeXBlIHtcbiAgICBkYXRlID0gJ2RhdGUnLFxuICAgIGRhdGV0aW1lID0gJ2RhdGV0aW1lJyxcbiAgICBpbnQgPSAnaW50JyxcbiAgICBkZWNpbWFsID0gJ2RlY2ltYWwnLFxuICAgIGJvb2xlYW4gPSAnYm9vbGVhbicsXG4gICAgc3RyaW5nID0gJ3N0cmluZycsXG59XG5cbmV4cG9ydCBjbGFzcyBTY2FsYXJWYWx1ZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHByaXZhdGUgX29wZXJhdG9yVGV4dDogc3RyaW5nID0gJyc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfb3BlcmF0b3I6IE9wZXJhdG9yLFxuICAgICAgICBwcml2YXRlIF9zY2FsYXJWYWx1ZTogYW55LFxuICAgICAgICBwcml2YXRlIF90eXBlOiBWYWx1ZVR5cGUgPSBWYWx1ZVR5cGUuc3RyaW5nLFxuICAgICkge1xuICAgIH1cblxuICAgIGdldEVycm9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgUGjhuqNpICR7dGhpcy5fb3BlcmF0b3JUZXh0fSAke3RoaXMuX3NjYWxhclZhbHVlfWA7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IFByb21pc2U8Ym9vbGVhbj4gfCBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMuZ2V0VmFsdWUoZXZlbnQudmFsdWUpO1xuICAgICAgICBjb25zdCByaWdodCA9IHRoaXMuZ2V0VmFsdWUodGhpcy5fc2NhbGFyVmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlVmFsdWUobGVmdCwgcmlnaHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGFyZVZhbHVlKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX29wZXJhdG9yKSB7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmVxdWFsOlxuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID09IHJpZ2h0O1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ub3RFcXVhbDpcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAna2jDtG5nIGLhurFuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgIT0gcmlnaHQ7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmdyZWF0ZXI6XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2zhu5tuIGjGoW4nO1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID4gcmlnaHQ7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWw6XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2zhu5tuIGjGoW4gaG/hurdjIGLhurFuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgPj0gcmlnaHQ7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmxvd2VyOlxuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICduaOG7jyBoxqFuJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCA8IHJpZ2h0O1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5sb3dlclRoYW5FcXVhbDpcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAnbmjhu48gaMahbiBob+G6t2MgYuG6sW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCA8PSByaWdodDtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW46IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0OiBhbnlbXSA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ27hurFtIHRyb25nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGlzdC5zb21lKHggPT4geCA9PSBsZWZ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90SW46IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0OiBhbnlbXSA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ27hurFtIG5nb8OgaSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3QuZXZlcnkoeCA9PiB4ICE9IGxlZnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5zdGFydFdpdGg6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2Lhuq90IMSR4bqndSBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHIuc3RhcnRzV2l0aChyaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdFN0YXJ0V2l0aDoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cjogc3RyaW5nID0gbGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAna2jDtG5nIGLhuq90IMSR4bqndSBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHIuc3RhcnRzV2l0aChyaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmVuZFdpdGg6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2vhur90IHRow7pjIGLhurFuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5lbmRzV2l0aChyaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEVuZFdpdGg6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2tow7RuZyBr4bq/dCB0aMO6YyBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHIuZW5kc1dpdGgocmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5jb250YWluOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdjw7MgY2jhu6lhJztcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLmluY2x1ZGVzKHJpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90Q29udGFpbjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cjogc3RyaW5nID0gbGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAna2jDtG5nIGNo4bupYSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFzdHIuaW5jbHVkZXMocmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5pc051bGw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAnxJHhu4MgdHLhu5FuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgPT0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaXNOb3ROdWxsOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2tow7RuZyDEkeG7gyB0cuG7kW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCAhPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5pblJvbGU6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluUm9sZTpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW5DYXRlZ29yeTpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90SW5DYXRlZ29yeTpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW5Qb3NpdGlvbjpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90SW5Qb3NpdGlvbjpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW5MaXN0VXNlcjpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90SW5MaXN0VXNlcjpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW5MaXN0R3JvdXA6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluTGlzdEdyb3VwOlxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5pc0N1cnJlbnRVc2VyOlxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5pc0N1cnJlbnRDYW5CbzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFZhbHVlVHlwZS5kYXRlOlxuICAgICAgICAgICAgY2FzZSBWYWx1ZVR5cGUuZGF0ZXRpbWU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbWVudCh2YWx1ZSwgJ0REL01NL1lZWVkgaGg6bW06c3MnKTtcbiAgICAgICAgICAgIGNhc2UgVmFsdWVUeXBlLmludDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgICAgICAgY2FzZSBWYWx1ZVR5cGUuZGVjaW1hbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIFZhbHVlVHlwZS5ib29sZWFuOlxuICAgICAgICAgICAgICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgVmFsdWVUeXBlLnN0cmluZzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
769
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jbGFzc2VzL2Jhc2UvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBR0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRSxPQUFPLEVBQWEsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFtQixXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFPNUIsU0FBUyxVQUFVLENBQUMsS0FBVSxFQUFFLE9BQXdCO0lBQ3BELElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFO1FBQ3ZDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztLQUNoQjtJQUNELElBQUksT0FBTyxZQUFZLG9CQUFvQixFQUFFO1FBQ3pDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRWhELE1BQU0sY0FBYyxHQUF5QixPQUFPLENBQUM7UUFDckQsSUFBSSxjQUFjLENBQUMsZ0JBQWdCLEVBQUU7WUFDakMsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLEVBQUU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7U0FDekU7UUFFRCxJQUFJLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNqQyxJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssRUFBRTtnQkFBRSxPQUFPLEtBQUssQ0FBQztTQUN6RTtRQUVELElBQUksY0FBYyxDQUFDLFlBQVks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LFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDckIsS0FBSyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQ3hCLEtBQUssUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUN6QixLQUFLLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDNUIsS0FBSyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQ3pCLEtBQUssUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUM1QixLQUFLLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDekIsS0FBSyxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQzVCLEtBQUssUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUMxQixLQUFLLFFBQVEsQ0FBQyxjQUFjLENBQUM7WUFDN0IsS0FBSyxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQzVCLEtBQUssUUFBUSxDQUFDLGNBQWM7Z0JBQ3hCLE9BQU8sS0FBSyxDQUFDO1NBQ3BCO0lBQ0wsQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFVO1FBQ3ZCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNoQixLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDcEIsS0FBSyxTQUFTLENBQUMsUUFBUTtnQkFDbkIsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUM7WUFDaEQsS0FBSyxTQUFTLENBQUMsR0FBRztnQkFDZCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixLQUFLLFNBQVMsQ0FBQyxPQUFPO2dCQUNsQixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixLQUFLLFNBQVMsQ0FBQyxPQUFPO2dCQUNsQixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixLQUFLLFNBQVMsQ0FBQyxNQUFNO2dCQUNqQixPQUFPLEtBQUssQ0FBQztTQUNwQjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRyb2xUcmVlTm9kZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3J1ZC9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IGlzQXJyYXksIGlzTGl0ZXJhbE9iamVjdCB9IGZyb20gJy4uL2Vudmlyb25tZW50LXNjaGVtYSc7XG5pbXBvcnQgeyBFdmVudERhdGEsIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSwgT3BlcmF0b3IgfSBmcm9tICcuLi9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBBZGRyZXNzQ29udHJvbFNjaGVtYSwgRm9ybUNvbnRyb2xCYXNlLCBUYWJsZVNjaGVtYSB9IGZyb20gJy4vLi4vZm9ybS1zY2hlbWEnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbjtcbiAgICBnZXRFcnJvcigpOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGlzTm90RW1wdHkodmFsdWU6IGFueSwgY29udHJvbDogRm9ybUNvbnRyb2xCYXNlKTogYm9vbGVhbiB7XG4gICAgaWYgKCEhdmFsdWUgJiYgdHlwZW9mICh2YWx1ZSkgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFsdWUudHJpbSgpO1xuICAgIH1cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEFkZHJlc3NDb250cm9sU2NoZW1hKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGFkZHJlc3NDb250cm9sID0gPEFkZHJlc3NDb250cm9sU2NoZW1hPmNvbnRyb2w7XG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZFByb3ZpbmNlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuaWRQcm92aW5jZSA9PSBudWxsIHx8IHZhbHVlLmlkUHJvdmluY2UgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWRkcmVzc0NvbnRyb2wucmVxdWlyZWREaXN0cmljdCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmlkRGlzdHJpY3QgPT0gbnVsbCB8fCB2YWx1ZS5pZERpc3RyaWN0ID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkZHJlc3NDb250cm9sLnJlcXVpcmVkV2FyZCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmlkV2FyZCA9PSBudWxsIHx8IHZhbHVlLmlkV2FyZCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZFN0cmVldCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLnN0cmVldCA9PSBudWxsIHx8IHZhbHVlLnN0cmVldCA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRyZXNzQ29udHJvbC5yZXF1aXJlZE5vKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUubm8gPT0gbnVsbCB8fCB2YWx1ZS5ubyA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hKSB7XG4gICAgICAgIGlmICghY29udHJvbC5fY29tcG9uZW50Ll92YWx1ZSB8fCBjb250cm9sLl9jb21wb25lbnQuX3ZhbHVlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBfbGFiZWw7XG5cbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIHRoaXMuX2xhYmVsID0gZXZlbnQuY29udHJvbC5sYWJlbDtcbiAgICAgICAgcmV0dXJuIGlzTm90RW1wdHkoZXZlbnQudmFsdWUsIGV2ZW50LmNvbnRyb2wpO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICBpZiAodGhpcy5fbGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLl9sYWJlbH0gYuG6r3QgYnXhu5ljIG5o4bqtcGA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ1RyxrDhu51uZyB0aMO0bmcgdGluIGLhuq90IGJ14buZYyBuaOG6rXAnO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVxdWlyZWRGaWVsZHNWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBfcmVxdWlyZWRGaWVsZHM6IHN0cmluZ1tdO1xuICAgIF9tZXNzYWdlOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihyZXF1aXJlZEZpZWxkczogc3RyaW5nW10sIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9yZXF1aXJlZEZpZWxkcyA9IHJlcXVpcmVkRmllbGRzO1xuICAgICAgICBpZiAodGhpcy5fcmVxdWlyZWRGaWVsZHMubGVuZ3RoID09IDApIGFsZXJ0KCdD4bqldSBow6xuaCBSZXF1aXJlZEZpZWxkc1ZhbGlkYXRvciBzYWknKTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgZ2V0UmVxdWlyZWRGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZEZpZWxkcztcbiAgICB9XG5cbiAgICBnZXRNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKSB7XG4gICAgICAgIGNvbnN0IGFsbFJlcXVpcmVkRmllbGRzID0gWy4uLnRoaXMuX3JlcXVpcmVkRmllbGRzLCBldmVudC5jb250cm9sLmZpZWxkXTtcbiAgICAgICAgbGV0IGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcGFyZW50TW9kZWwgPSBldmVudC5jdXJyZW50Tm9kZS5wYXJlbnROb2RlLm1vZGVsO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGFsbFJlcXVpcmVkRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudE1vZGVsLl9lcnJvcnNbZmllbGRdLmluZGV4T2YodGhpcy5fbWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsLl9lcnJvcnNbZmllbGRdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gZXZlbnQuY3VycmVudE5vZGUuZ2V0Tm9kZUJ5UGF0aChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoaXNOb3RFbXB0eShjdXJyZW50Tm9kZS5tb2RlbCwgY3VycmVudE5vZGUuY29udHJvbCkpIHtcbiAgICAgICAgICAgICAgICBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXF1aXJlZEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5wdXNoKHRoaXMuX21lc3NhZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gIWhhc0Vycm9yO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbWFpbFZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eKChbXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoXFxbWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcXSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC87XG4gICAgICAgIHJldHVybiByZS50ZXN0KFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyB0aMawIMSRaeG7h24gdOG7rSc7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBOYW1lVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIC8vIGNvbnN0IHJlID0gL15bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSooPzpbIF1bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSopKiR8XltBLVrDgMOB4bqg4bqiw4PDguG6puG6pOG6rOG6qOG6qsSC4bqw4bqu4bq24bqy4bq0w4jDieG6uOG6uuG6vMOK4buA4bq+4buG4buC4buEw4zDjeG7iuG7iMSow5LDk+G7jOG7jsOVw5Thu5Lhu5Dhu5jhu5Thu5bGoOG7nOG7muG7ouG7nuG7oMOZw5rhu6Thu6bFqMav4buq4buo4buw4bus4buu4buyw53hu7Thu7bhu7jEkF0qKD86WyBdW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXSopKiR8XihbYS16QS1aXXsyLH1cXHNbYS16QS1aXXsxLH0nPy0/W2EtekEtWl17Mix9XFxzPyhbYS16QS1aXXsxLH0pPykvO1xuICAgICAgICBjb25zdCByZSA9IC9bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSooPzpbIF1bQS1aw4DDgeG6oOG6osODw4LhuqbhuqThuqzhuqjhuqrEguG6sOG6ruG6tuG6suG6tMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4xJBdW2EtesOgw6HhuqHhuqPDo8Oi4bqn4bql4bqt4bqp4bqrxIPhurHhuq/hurfhurPhurXDqMOp4bq54bq74bq9w6rhu4Hhur/hu4fhu4Phu4XDrMOt4buL4buJxKnDssOz4buN4buPw7XDtOG7k+G7keG7meG7leG7l8ah4bud4bub4buj4buf4buhw7nDuuG7peG7p8WpxrDhu6vhu6nhu7Hhu63hu6/hu7PDveG7teG7t+G7ucSRXSopKiR8XltBLVrDgMOB4bqg4bqiw4PDguG6puG6pOG6rOG6qOG6qsSC4bqw4bqu4bq24bqy4bq0w4jDieG6uOG6uuG6vMOK4buA4bq+4buG4buC4buEw4zDjeG7iuG7iMSow5LDk+G7jOG7jsOVw5Thu5Lhu5Dhu5jhu5Thu5bGoOG7nOG7muG7ouG7nuG7oMOZw5rhu6Thu6bFqMav4buq4buo4buw4bus4buu4buyw53hu7Thu7bhu7jEkF0qKD86WyBdW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uMSQXSopKiR8WyBdfF4oW2EtekEtWl17Mix9XFxzW2EtekEtWl17MSx9Jz8tP1thLXpBLVpdezIsfVxccz8oW2EtekEtWl17MSx9KT8pLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyB0w6puJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQaG9uZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eMFsxLTldWzAtOV17OCw5fSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyBz4buRIMSRaeG7h24gdGhv4bqhaSc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2NjZFZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eXFxkezl9JHxeXFxkezEyfSQvO1xuICAgICAgICByZXR1cm4gcmUudGVzdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiAnS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyBDQ0NEL0NNTkQnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhc3Nwb3J0VmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgbWVzc2FnZSA9ICdLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIFPhu5EgaOG7mSBjaGnhur91IGhv4bq3YyBT4buRIENDQ0QgaG/hurdjIGNo4bupbmcgbWluaCBuaMOibiBkw6JuJztcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eXFxkezAsMTJ9JC87XG4gICAgICAgIHJldHVybiByZS50ZXN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMZW5ndGhWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9lcnJvcjogYW55ID0gJyc7XG4gICAgcHJpdmF0ZSBfbWluID0gMDtcbiAgICBwcml2YXRlIF9tYXggPSAxMDA7XG5cbiAgICBjb25zdHJ1Y3RvcihtYXgsIG1pbiA9IDApIHtcbiAgICAgICAgdGhpcy5fbWF4ID0gbWF4O1xuICAgICAgICB0aGlzLl9taW4gPSBtaW47XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWluID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yID0gYMSQ4buZIGTDoGkgdOG7kWkgdGhp4buDdSAke3RoaXMuX21pbn0ga8O9IHThu7FgO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgPSB2YWx1ZSArICcnO1xuICAgICAgICBjb25zdCBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW4gPCB0aGlzLl9taW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yID0gYMSQ4buZIGTDoGkgdOG7kWkgdGhp4buDdSAke3RoaXMuX21pbn0ga8O9IHThu7FgO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZW4gPiB0aGlzLl9tYXgpIHtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yID0gYMSQ4buZIGTDoGkgdOG7kWkgxJFhICR7dGhpcy5fbWF4fSBrw70gdOG7sWA7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBob25lTnVtYmVyVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHJlID0gL15bIF18WysoXSpbMC05XXsxLDR9WyldezAsMX1bLVxcc1xcLi8wLTldKiQvZztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIHPhu5EgxJFp4buHbiB0aG/huqFpJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOdW1iZXJPbmx5VmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHJlID0gL15cXC0/KFswLTldKSokLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIHPhu5EnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF0TGVhc3RPbmVSb3dUYWJsZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGV2ZW50LmN1cnJlbnROb2RlLmNoaWxkTm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdC4bqjbmcgYuG6r3QgYnXhu5ljIG5o4bqtcCc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGF4Q29kZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCByZSA9IC9eKFswLTldKXsxMH0kfF4oWzAtOV0pezEwfSgtKShbMC05XSl7M30kLztcbiAgICAgICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuICdLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIG3DoyBz4buRIHRodeG6vyc7XG4gICAgfVxufVxuXG5jb25zdCB2YWxpZEZ1bmN0aW9uID0ge1xuICAgIFtPcGVyYXRvci5ncmVhdGVyXTogKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSkgPT4gdmFsdWUxID4gdmFsdWUyLFxuICAgIFtPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsXTogKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSkgPT4gdmFsdWUxID49IHZhbHVlMixcbiAgICBbT3BlcmF0b3IubG93ZXJdOiAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSA9PiB2YWx1ZTEgPCB2YWx1ZTIsXG4gICAgW09wZXJhdG9yLmxvd2VyVGhhbkVxdWFsXTogKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSkgPT4gdmFsdWUxIDw9IHZhbHVlMixcbiAgICBbT3BlcmF0b3IuZXF1YWxdOiAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSA9PiB2YWx1ZTEgPT0gdmFsdWUyXG59O1xuXG5jb25zdCBvcGVyYXRvck1lYW5pbmcgPSB7XG4gICAgW09wZXJhdG9yLmdyZWF0ZXJdOiAnbOG7m24gaMahbicsXG4gICAgW09wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWxdOiAnbOG7m24gaMahbiBob+G6t2MgYuG6sW5nJyxcbiAgICBbT3BlcmF0b3IubG93ZXJdOiAnbmjhu48gaMahbicsXG4gICAgW09wZXJhdG9yLmxvd2VyVGhhbkVxdWFsXTogJ25o4buPIGjGoW4gaG/hurdjIGLhurFuZycsXG4gICAgW09wZXJhdG9yLmVxdWFsXTogJ2LhurFuZydcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBhcmVWYWxpZGF0b3Ige1xuICAgIGNvbXBhcmVVbmlxdWVGaWVsZDogc3RyaW5nO1xuICAgIGdldE9wZXJhdG9yQ29tcGFyZSgpOiBPcGVyYXRvcjtcbn1cblxuLyoqXG4gKiBTbyBzYW5oIDIgdGh14buZYyB0w61uaCB0cm9uZyBmb3JtLlxuICovXG5leHBvcnQgY2xhc3MgQ29tcGFyZVZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3IsIElDb21wYXJlVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9vcGVyYXRvcjogT3BlcmF0b3I7XG4gICAgcHJpdmF0ZSBfY29tcGFyZUNvbnRyb2w6IEZvcm1Db250cm9sQmFzZTtcbiAgICBjb21wYXJlVW5pcXVlRmllbGQ6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yOiBPcGVyYXRvciwgY29tcGFyZVVuaXF1ZUZpZWxkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fb3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgdGhpcy5jb21wYXJlVW5pcXVlRmllbGQgPSBjb21wYXJlVW5pcXVlRmllbGQ7XG4gICAgfVxuXG4gICAgZ2V0T3BlcmF0b3JDb21wYXJlKCk6IE9wZXJhdG9yIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yO1xuICAgIH1cblxuICAgIGdldEZpZWxkT3BlcmF0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVyYXRvcjtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZUNvbXBhcmUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY29tcGFyZU5vZGUgPSBldmVudC5jdXJyZW50Tm9kZS5nZXROb2RlQnlQYXRoKHRoaXMuY29tcGFyZVVuaXF1ZUZpZWxkKTtcbiAgICAgICAgdGhpcy5fY29tcGFyZUNvbnRyb2wgPSBjb21wYXJlTm9kZS5jb250cm9sO1xuICAgICAgICBjb25zdCBjb21wYXJlRmllbGQgPSB0aGlzLl9jb21wYXJlQ29udHJvbC5maWVsZDtcbiAgICAgICAgY29uc3QgY29tcGFyZVZhbHVlID0gY29tcGFyZU5vZGUubW9kZWw7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVQYXJlbnRNb2RlbCA9IGNvbXBhcmVOb2RlLnBhcmVudE5vZGUubW9kZWw7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIGxldCBlcnJvck1lcztcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiB0aGlzLl9jb21wYXJlQ29udHJvbC52YWxpZGF0b3JzKSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yIGluc3RhbmNlb2YgQ29tcGFyZVZhbGlkYXRvciAmJiB2YWxpZGF0b3IuY29tcGFyZVVuaXF1ZUZpZWxkID09IGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wudW5pcXVlRmllbGQpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lcyA9IHZhbGlkYXRvci5nZXRFcnJvcihldmVudC5jdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjb21wYXJlUGFyZW50TW9kZWwuX2Vycm9yc1tjb21wYXJlRmllbGRdLmluZGV4T2YoZXJyb3JNZXMpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQYXJlbnRNb2RlbC5fZXJyb3JzW2NvbXBhcmVGaWVsZF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgfHwgdmFsdWUgPT09ICcnXG4gICAgICAgICAgICB8fCBjb21wYXJlVmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgfHwgY29tcGFyZVZhbHVlID09ICcnXG4gICAgICAgICkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgcmUgPSB2YWxpZEZ1bmN0aW9uW3RoaXMuX29wZXJhdG9yXSAmJiB2YWxpZEZ1bmN0aW9uW3RoaXMuX29wZXJhdG9yXShcbiAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVDb21wYXJlKHZhbHVlKSwgdGhpcy5nZXRWYWx1ZUNvbXBhcmUoY29tcGFyZVZhbHVlKVxuICAgICAgICApO1xuXG5cbiAgICAgICAgaWYgKCFyZSAmJiBlcnJvck1lcykge1xuICAgICAgICAgICAgY29tcGFyZVBhcmVudE1vZGVsLl9lcnJvcnNbY29tcGFyZUZpZWxkXS5wdXNoKGVycm9yTWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcihjb250cm9sVHJlZU5vZGU/OiBDb250cm9sVHJlZU5vZGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jb21wYXJlQ29udHJvbCAmJiBjb250cm9sVHJlZU5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBhcmVDb250cm9sID0gY29udHJvbFRyZWVOb2RlLmdldE5vZGVCeVBhdGgodGhpcy5jb21wYXJlVW5pcXVlRmllbGQpLmNvbnRyb2w7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBQaOG6o2kgJHtvcGVyYXRvck1lYW5pbmdbdGhpcy5fb3BlcmF0b3JdfSAke3RoaXMuX2NvbXBhcmVDb250cm9sPy5mdWxsTGFiZWx9YDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlQ29tcGFyZVZhbGlkYXRvciBleHRlbmRzIENvbXBhcmVWYWxpZGF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yOiBPcGVyYXRvciwgZmllbGQ6IHN0cmluZykge1xuICAgICAgICBzdXBlcihvcGVyYXRvciwgZmllbGQpO1xuICAgIH1cblxuICAgIGdldFZhbHVlQ29tcGFyZSh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOdW1iZXJDb21wYXJlVmFsaWRhdG9yIGV4dGVuZHMgQ29tcGFyZVZhbGlkYXRvciB7XG4gICAgY29uc3RydWN0b3Iob3BlcmF0b3I6IE9wZXJhdG9yLCBmaWVsZDogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG9wZXJhdG9yLCBmaWVsZCk7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVDb21wYXJlKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEtp4buDbSB0cmEgZ2nDoSB0cuG7iyBt4buZdCBj4buZdCDEkcOjIHThu5NuIHThuqFpIHRyb25nIGRiLlxuICovXG5leHBvcnQgY2xhc3MgQ2hlY2tEdXBsaWNhdGVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9sYWJlbDogc3RyaW5nO1xuICAgIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRGaWx0ZXJzOiBGaWx0ZXJbXTtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmF1bHRGaWx0ZXJzPzogRmlsdGVyW10pIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEZpbHRlcnMgPSBkZWZhdWx0RmlsdGVycztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QmFzZVNlcnZpY2UoYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuX2Jhc2VTZXJ2aWNlID0gYmFzZVNlcnZpY2U7XG4gICAgfVxuXG4gICAgYXN5bmMgdmFsaWRhdGUoZXZlbnQ6IEV2ZW50RGF0YSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBsZXQgdmFsdWVGaWx0ZXI6IGFueTtcbiAgICAgICAgaWYgKGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wuZnVsbExhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLl9sYWJlbCA9IGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wuZnVsbExhYmVsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbGFiZWwgPSBldmVudC5jdXJyZW50Tm9kZS5jb250cm9sLmxhYmVsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQuY3VycmVudE5vZGUudmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gZXZlbnQuY3VycmVudE5vZGUudmFsdWUubWFwKHggPT4geFtldmVudC5jdXJyZW50Tm9kZS5jb250cm9sWydkaXNwbGF5RmllbGQnXV0pLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSBldmVudC5jdXJyZW50Tm9kZS52YWx1ZS5tYXAoeCA9PiB4W2V2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2xbJ3ZhbHVlRmllbGQnXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBldmVudC5jdXJyZW50Tm9kZS52YWx1ZVtldmVudC5jdXJyZW50Tm9kZS5jb250cm9sWydkaXNwbGF5RmllbGQnXV0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB2YWx1ZUZpbHRlciA9IGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlW2V2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2xbJ3ZhbHVlRmllbGQnXV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB2YWx1ZUZpbHRlciA9IGV2ZW50LmN1cnJlbnROb2RlLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW3tcbiAgICAgICAgICAgIGZpZWxkOiBldmVudC5jdXJyZW50Tm9kZS5jb250cm9sLmZpZWxkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IEFycmF5LmlzQXJyYXkodmFsdWVGaWx0ZXIpID8gT3BlcmF0b3IuaW4gOiBPcGVyYXRvci5lcXVhbCxcbiAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZUZpbHRlcilcbiAgICAgICAgfV07XG4gICAgICAgIGlmIChldmVudC5yb290TW9kZWwuaWQpIHtcbiAgICAgICAgICAgIGZpbHRlcnMudW5zaGlmdCh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLm5vdEVxdWFsLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShldmVudC5yb290TW9kZWwuaWQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZGVmYXVsdEZpbHRlcnMpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCguLi50aGlzLl9kZWZhdWx0RmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0Q2hlY2tFeGlzdCA9IGF3YWl0IHRoaXMuX2Jhc2VTZXJ2aWNlLmNoZWNrRXhpc3RCeUZpbHRlcihmaWx0ZXJzKTtcbiAgICAgICAgaWYgKCFyZXN1bHRDaGVja0V4aXN0LnN1Y2Nlc3MgfHwgcmVzdWx0Q2hlY2tFeGlzdC5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiBgVHLGsOG7nW5nICR7dGhpcy5fbGFiZWx9IGPDsyBnacOhIHRy4buLICR7dGhpcy5fdmFsdWV9IMSRw6MgdOG7k24gdOG6oWlgO1xuICAgIH1cbn1cblxuLyoqXG4gKiBLaeG7g20gdHJhIGLhu5kgZ8OhaSB0cuG7iyBj4bunYSBuaGnhu4F1IGPhu5l0IMSRw6MgdOG7k24gdOG6oWkgdHJvbmcgZGIuXG4gKi9cbmV4cG9ydCBjbGFzcyBDaGVja0R1cGxpY2F0ZUZpZWxkc1ZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0b3Ige1xuICAgIF9kdXBsaWNhdGVGaWVsZHM6IHN0cmluZ1tdO1xuICAgIF9tZXNzYWdlOiBzdHJpbmc7XG4gICAgX29sZE1lc3NhZ2U6IHN0cmluZztcbiAgICBfYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlO1xuICAgIF9kaWNWYWx1ZTogYW55ID0ge307XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEZpbHRlcnM6IEZpbHRlcltdO1xuXG4gICAgY29uc3RydWN0b3IoZHVwbGljYXRlRmllbGRzOiBzdHJpbmdbXSwgbWVzc2FnZTogc3RyaW5nLCBkZWZhdWx0RmlsdGVycz86IEZpbHRlcltdKSB7XG4gICAgICAgIHRoaXMuX2R1cGxpY2F0ZUZpZWxkcyA9IGR1cGxpY2F0ZUZpZWxkcztcbiAgICAgICAgaWYgKHRoaXMuX2R1cGxpY2F0ZUZpZWxkcy5sZW5ndGggPT0gMCkgYWxlcnQoJ0PhuqV1IGjDrG5oIENoZWNrRHVwbGljYXRlRmllbGRzVmFsaWRhdG9yIHNhaScpO1xuICAgICAgICB0aGlzLl9tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEZpbHRlcnMgPSBkZWZhdWx0RmlsdGVycztcbiAgICB9XG5cbiAgICBzZXRCYXNlU2VydmljZShiYXNlU2VydmljZTogQmFzZVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fYmFzZVNlcnZpY2UgPSBiYXNlU2VydmljZTtcbiAgICB9XG5cbiAgICBnZXREdXBsaWNhdGVGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kdXBsaWNhdGVGaWVsZHM7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdEZpbHRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0RmlsdGVycztcbiAgICB9XG5cbiAgICBnZXRNZXNzYWdlKCkge1xuICAgICAgICAvLyBjb25zdCByZWcgPSBuZXcgUmVnRXhwKCcoPzw9e3spW159XSsoPz19KScsICdnJyk7XG4gICAgICAgIGNvbnN0IHJlZyA9IC97eyhbXn1dKyl9fS9nO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9tZXNzYWdlLm1hdGNoKHJlZyk7XG4gICAgICAgIGxldCBuZXdNZXNzYWdlID0gdGhpcy5fbWVzc2FnZTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICAgICAgICBjb25zdCBkaWNWYWx1ZSA9IHRoaXMuX2RpY1ZhbHVlO1xuICAgICAgICAgICAgcmVzdWx0LmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV2YWwoYHZhbHVlID0gZGljVmFsdWUuJHtmaWVsZH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbmV3TWVzc2FnZSA9IG5ld01lc3NhZ2UucmVwbGFjZShge3ske2ZpZWxkfX19YCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIG5ld01lc3NhZ2UgPSBuZXdNZXNzYWdlLnJlcGxhY2UoZmllbGQsIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29sZE1lc3NhZ2UgPSBuZXdNZXNzYWdlO1xuICAgICAgICByZXR1cm4gbmV3TWVzc2FnZTtcbiAgICB9XG5cbiAgICBhc3luYyB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKSB7XG4gICAgICAgIGNvbnN0IGFsbER1cGxpY2F0ZUZpZWxkcyA9IFsuLi50aGlzLl9kdXBsaWNhdGVGaWVsZHMsIGV2ZW50LmNvbnRyb2wuZmllbGRdO1xuICAgICAgICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICAgICAgICBsZXQgaGFzTnVsbFZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgcGFyZW50TW9kZWwgPSBldmVudC5jdXJyZW50Tm9kZS5wYXJlbnROb2RlLm1vZGVsO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGFsbER1cGxpY2F0ZUZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5pbmRleE9mKHRoaXMuX29sZE1lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IGV2ZW50LmN1cnJlbnROb2RlLmdldE5vZGVCeVBhdGgoZmllbGQpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLnZhbHVlICE9IG51bGwgJiYgY3VycmVudE5vZGUudmFsdWUgIT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaWNWYWx1ZVtmaWVsZF0gPSBjdXJyZW50Tm9kZS52YWx1ZTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRWYWx1ZSh0aGlzLl9kaWNWYWx1ZVtmaWVsZF0pKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBoYXNOdWxsVmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTuG6v3UgY8OzIDEgdHLGsOG7nW5nIGLhu4sgdHLhu5FuZyAoa2jDtG5nIGPDsyBk4buvIGxp4buHdSkgdGjDrCB0cuG6oyB24buBIHRydWVcbiAgICAgICAgaWYgKGhhc051bGxWYWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChldmVudC5yb290TW9kZWwuaWQpIHtcbiAgICAgICAgICAgIGZpbHRlcnMudW5zaGlmdCh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLm5vdEVxdWFsLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShldmVudC5yb290TW9kZWwuaWQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZGVmYXVsdEZpbHRlcnMpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCguLi50aGlzLl9kZWZhdWx0RmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0Q2hlY2tFeGlzdCA9IGF3YWl0IHRoaXMuX2Jhc2VTZXJ2aWNlLmNoZWNrRXhpc3RCeUZpbHRlcihmaWx0ZXJzKTtcbiAgICAgICAgaWYgKCFyZXN1bHRDaGVja0V4aXN0LnN1Y2Nlc3MgfHwgcmVzdWx0Q2hlY2tFeGlzdC5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9kdXBsaWNhdGVGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0ucHVzaCh0aGlzLmdldE1lc3NhZ2UoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmFsdWUocmF3VmFsdWUpIHtcbiAgICAgICAgaWYgKGlzTGl0ZXJhbE9iamVjdChyYXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChyYXdWYWx1ZS5fZHJvcGRvd252YWx1ZSAhPSBudWxsICYmIHJhd1ZhbHVlLl9kcm9wZG93bnZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByYXdWYWx1ZVtyYXdWYWx1ZS5fZHJvcGRvd252YWx1ZV0gfHwgcmF3VmFsdWVbJ3ZhbHVlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNBcnJheShyYXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJhd1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2godGhpcy5nZXRWYWx1ZShpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYXdWYWx1ZTtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29sZE1lc3NhZ2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5pcXVlRmllbGRJblRhYmxlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBfZmllbGQ7XG5cbiAgICBjb25zdHJ1Y3RvcihmaWVsZCkge1xuICAgICAgICB0aGlzLl9maWVsZCA9IGZpZWxkO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCEoZXZlbnQuY3VycmVudE5vZGUuY29udHJvbCBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IGRpYyA9IHt9O1xuICAgICAgICBjb25zdCBjb250cm9sID0gZXZlbnQuY3VycmVudE5vZGUuY29udHJvbC5yb3dUZW1wbGF0ZS5maW5kKGl0ZW0gPT4gaXRlbS5maWVsZCA9PSB0aGlzLl9maWVsZCk7XG4gICAgICAgIGlmICghY29udHJvbCkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgZXJyb3JNZXMgPSAnVHLGsOG7nW5nICcgKyBjb250cm9sLmxhYmVsICsgJyBraMO0bmcgxJHGsOG7o2MgdHLDuW5nIG5oYXUnO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZXZlbnQudmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChpdGVtW3RoaXMuX2ZpZWxkXSAhPSBudWxsICYmIGl0ZW1bdGhpcy5fZmllbGRdICE9PSAnJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbS5fZXJyb3JzW3RoaXMuX2ZpZWxkXS5pbmRleE9mKGVycm9yTWVzKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgaXRlbS5fZXJyb3JzW3RoaXMuX2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gaXRlbVt0aGlzLl9maWVsZF07XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdfZHJvcGRvd252YWx1ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbdmFsdWVbJ19kcm9wZG93bnZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghZGljW3ZhbHVlXSkge1xuICAgICAgICAgICAgICAgICAgICBkaWNbdmFsdWVdID0gW2l0ZW1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGljW3ZhbHVlXS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWMpIHtcbiAgICAgICAgICAgIGlmIChkaWNba2V5XS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkaWNba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLl9lcnJvcnNbdGhpcy5fZmllbGRdLnB1c2goZXJyb3JNZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWhhc0Vycm9yO1xuICAgIH1cblxuICAgIGdldEVycm9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIEV4YWN0T25lVmFsdWVJblRhYmxlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBfZmllbGQ7XG4gICAgcHJpdmF0ZSBfdmFsdWU7XG4gICAgcHJpdmF0ZSBfbGFiZWw7XG5cbiAgICBjb25zdHJ1Y3RvcihmaWVsZCwgdmFsdWUsIGxhYmVsPykge1xuICAgICAgICB0aGlzLl9maWVsZCA9IGZpZWxkO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9sYWJlbCA9IGxhYmVsID8gbGFiZWwgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZShldmVudDogRXZlbnREYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghKGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZVNjaGVtYSkpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zdCBkaWMgPSB7fTtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGV2ZW50LmN1cnJlbnROb2RlLmNvbnRyb2wucm93VGVtcGxhdGUuZmluZChpdGVtID0+IGl0ZW0uZmllbGQgPT0gdGhpcy5fZmllbGQpO1xuICAgICAgICBpZiAoIWNvbnRyb2wpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGVycm9yTWVzID0gJ0No4buJIMSRxrDhu6NjIG5o4bqtcCBt4buZdCBnacOhIHRy4buLICcgKyB0aGlzLl9sYWJlbDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGV2ZW50LnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW0uX2Vycm9yc1t0aGlzLl9maWVsZF0uaW5kZXhPZihlcnJvck1lcyk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgaXRlbS5fZXJyb3JzW3RoaXMuX2ZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBpdGVtW3RoaXMuX2ZpZWxkXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnX2Ryb3Bkb3dudmFsdWUnKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbdmFsdWVbJ19kcm9wZG93bnZhbHVlJ11dO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRpY1t2YWx1ZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgZGljW3ZhbHVlXSA9IFtpdGVtXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRpY1t2YWx1ZV0ucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGljKSB7XG4gICAgICAgICAgICBpZiAoZGljW2tleV0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGljW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5fZXJyb3JzW3RoaXMuX2ZpZWxkXS5wdXNoKGVycm9yTWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFoYXNFcnJvcjtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBTYW1lVmFsdWVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBfc2FtZUZpZWxkczogc3RyaW5nW107XG4gICAgX21lc3NhZ2U6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGR1cGxpY2F0ZUZpZWxkczogc3RyaW5nW10sIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9zYW1lRmllbGRzID0gZHVwbGljYXRlRmllbGRzO1xuICAgICAgICBpZiAodGhpcy5fc2FtZUZpZWxkcy5sZW5ndGggPT0gMCkgYWxlcnQoJ0PhuqV1IGjDrG5oIFNhbWVWYWxpZGF0b3Igc2FpJyk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIGdldFNhbWVGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zYW1lRmllbGRzO1xuICAgIH1cblxuICAgIGdldE1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpIHtcbiAgICAgICAgY29uc3QgYWxsRHVwbGljYXRlRmllbGRzID0gWy4uLnRoaXMuX3NhbWVGaWVsZHMsIGV2ZW50LmNvbnRyb2wuZmllbGRdO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudE1vZGVsID0gZXZlbnQuY3VycmVudE5vZGUucGFyZW50Tm9kZS5tb2RlbDtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBhbGxEdXBsaWNhdGVGaWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0uaW5kZXhPZih0aGlzLl9tZXNzYWdlKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgZXJyb3IgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxEdXBsaWNhdGVGaWVsZHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGFsbER1cGxpY2F0ZUZpZWxkc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gZXZlbnQuY3VycmVudE5vZGUuZ2V0Tm9kZUJ5UGF0aChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoY3VycmVudE5vZGUudmFsdWUgIT0gZXZlbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLl9zYW1lRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsLl9lcnJvcnNbZmllbGRdLnB1c2godGhpcy5fbWVzc2FnZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGdldEVycm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcbiAgICB9XG59XG5cbmV4cG9ydCBlbnVtIFZhbHVlVHlwZSB7XG4gICAgZGF0ZSA9ICdkYXRlJyxcbiAgICBkYXRldGltZSA9ICdkYXRldGltZScsXG4gICAgaW50ID0gJ2ludCcsXG4gICAgZGVjaW1hbCA9ICdkZWNpbWFsJyxcbiAgICBib29sZWFuID0gJ2Jvb2xlYW4nLFxuICAgIHN0cmluZyA9ICdzdHJpbmcnLFxufVxuXG5leHBvcnQgY2xhc3MgU2NhbGFyVmFsdWVWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yIHtcbiAgICBwcml2YXRlIF9vcGVyYXRvclRleHQ6IHN0cmluZyA9ICcnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX29wZXJhdG9yOiBPcGVyYXRvcixcbiAgICAgICAgcHJpdmF0ZSBfc2NhbGFyVmFsdWU6IGFueSxcbiAgICAgICAgcHJpdmF0ZSBfdHlwZTogVmFsdWVUeXBlID0gVmFsdWVUeXBlLnN0cmluZyxcbiAgICApIHtcbiAgICB9XG5cbiAgICBnZXRFcnJvcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYFBo4bqjaSAke3RoaXMuX29wZXJhdG9yVGV4dH0gJHt0aGlzLl9zY2FsYXJWYWx1ZX1gO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKGV2ZW50OiBFdmVudERhdGEpOiBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmdldFZhbHVlKGV2ZW50LnZhbHVlKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmdldFZhbHVlKHRoaXMuX3NjYWxhclZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVZhbHVlKGxlZnQsIHJpZ2h0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXBhcmVWYWx1ZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9vcGVyYXRvcikge1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5lcXVhbDpcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAnYuG6sW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCA9PSByaWdodDtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iubm90RXF1YWw6XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2tow7RuZyBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ICE9IHJpZ2h0O1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ncmVhdGVyOlxuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICds4bubbiBoxqFuJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCA+IHJpZ2h0O1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsOlxuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICds4bubbiBoxqFuIGhv4bq3YyBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID49IHJpZ2h0O1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5sb3dlcjpcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAnbmjhu48gaMahbic7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgPCByaWdodDtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IubG93ZXJUaGFuRXF1YWw6XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ25o4buPIGjGoW4gaG/hurdjIGLhurFuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgPD0gcmlnaHQ7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmluOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdDogYW55W10gPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdu4bqxbSB0cm9uZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Quc29tZSh4ID0+IHggPT0gbGVmdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdDogYW55W10gPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdu4bqxbSBuZ2/DoGknO1xuICAgICAgICAgICAgICAgIHJldHVybiBsaXN0LmV2ZXJ5KHggPT4geCAhPSBsZWZ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3Iuc3RhcnRXaXRoOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdi4bqvdCDEkeG6p3UgYuG6sW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnN0YXJ0c1dpdGgocmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ub3RTdGFydFdpdGg6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2tow7RuZyBi4bqvdCDEkeG6p3UgYuG6sW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnN0YXJ0c1dpdGgocmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5lbmRXaXRoOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdr4bq/dCB0aMO6YyBi4bqxbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHIuZW5kc1dpdGgocmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ub3RFbmRXaXRoOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdraMO0bmcga+G6v3QgdGjDumMgYuG6sW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLmVuZHNXaXRoKHJpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuY29udGFpbjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cjogc3RyaW5nID0gbGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRleHQgPSAnY8OzIGNo4bupYSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5pbmNsdWRlcyhyaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdENvbnRhaW46IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ2tow7RuZyBjaOG7qWEnO1xuICAgICAgICAgICAgICAgIHJldHVybiAhc3RyLmluY2x1ZGVzKHJpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaXNOdWxsOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0b3JUZXh0ID0gJ8SR4buDIHRy4buRbmcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID09IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmlzTm90TnVsbDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yVGV4dCA9ICdraMO0bmcgxJHhu4MgdHLhu5FuZyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgIT0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaW5Sb2xlOlxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ub3RJblJvbGU6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmluQ2F0ZWdvcnk6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluQ2F0ZWdvcnk6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmluUG9zaXRpb246XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluUG9zaXRpb246XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmluTGlzdFVzZXI6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLm5vdEluTGlzdFVzZXI6XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLmluTGlzdEdyb3VwOlxuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5ub3RJbkxpc3RHcm91cDpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaXNDdXJyZW50VXNlcjpcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuaXNDdXJyZW50Q2FuQm86XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5fdHlwZSkge1xuICAgICAgICAgICAgY2FzZSBWYWx1ZVR5cGUuZGF0ZTpcbiAgICAgICAgICAgIGNhc2UgVmFsdWVUeXBlLmRhdGV0aW1lOlxuICAgICAgICAgICAgICAgIHJldHVybiBtb21lbnQodmFsdWUsICdERC9NTS9ZWVlZIGhoOm1tOnNzJyk7XG4gICAgICAgICAgICBjYXNlIFZhbHVlVHlwZS5pbnQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgVmFsdWVUeXBlLmRlY2ltYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICAgICAgY2FzZSBWYWx1ZVR5cGUuYm9vbGVhbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIFZhbHVlVHlwZS5zdHJpbmc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|