@sumaris-net/ngx-components 2.0.4 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/src/app/core/graphql/graphql.service.mjs +17 -7
- package/esm2020/src/app/social/social.errors.mjs +3 -2
- package/fesm2015/sumaris-net.ngx-components.mjs +38 -23
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
- package/fesm2020/sumaris-net.ngx-components.mjs +18 -7
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/graphql/graphql.service.d.ts +2 -2
- package/src/app/social/social.errors.d.ts +1 -0
|
@@ -63,7 +63,7 @@ export class GraphqlService extends StartableService {
|
|
|
63
63
|
get defaultFetchPolicy() {
|
|
64
64
|
return this._defaultFetchPolicy;
|
|
65
65
|
}
|
|
66
|
-
setAuthToken(token) {
|
|
66
|
+
async setAuthToken(token) {
|
|
67
67
|
if (token) {
|
|
68
68
|
console.debug('[graphql] Apply token authentication to headers');
|
|
69
69
|
this.connectionParams.authToken = token;
|
|
@@ -72,11 +72,16 @@ export class GraphqlService extends StartableService {
|
|
|
72
72
|
else if (this.connectionParams.authToken) {
|
|
73
73
|
console.debug('[graphql] Remove token authentication from headers');
|
|
74
74
|
delete this.connectionParams.authToken;
|
|
75
|
-
//
|
|
76
|
-
this.
|
|
75
|
+
// Restart, to force client re-creation, and websocket to logout
|
|
76
|
+
if (this.started) {
|
|
77
|
+
await this.restart();
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
await this.clearCache();
|
|
81
|
+
}
|
|
77
82
|
}
|
|
78
83
|
}
|
|
79
|
-
setAuthBasic(basic) {
|
|
84
|
+
async setAuthBasic(basic) {
|
|
80
85
|
if (basic) {
|
|
81
86
|
console.debug('[graphql] Apply basic authentication to headers');
|
|
82
87
|
this.connectionParams.authBasic = basic;
|
|
@@ -85,8 +90,13 @@ export class GraphqlService extends StartableService {
|
|
|
85
90
|
else if (this.connectionParams.authBasic) {
|
|
86
91
|
console.debug('[graphql] Remove basic authentication from headers');
|
|
87
92
|
delete this.connectionParams.authBasic;
|
|
88
|
-
//
|
|
89
|
-
this.
|
|
93
|
+
// Restart, to force client re-creation, and websocket to logout
|
|
94
|
+
if (this.started) {
|
|
95
|
+
await this.restart();
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
await this.clearCache();
|
|
99
|
+
}
|
|
90
100
|
}
|
|
91
101
|
}
|
|
92
102
|
/**
|
|
@@ -732,4 +742,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
|
|
|
732
742
|
type: Inject,
|
|
733
743
|
args: [APP_GRAPHQL_TYPE_POLICIES]
|
|
734
744
|
}] }]; } });
|
|
735
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2dyYXBocWwvZ3JhcGhxbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFFTCxZQUFZLEVBQ1osVUFBVSxFQUdWLGFBQWEsRUFFYixhQUFhLEVBSWQsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDOUUsT0FBTyxFQUFDLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUcsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUzRSxPQUFPLEVBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDNUosT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8saUJBQWlCLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyx1QkFBdUIsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLGtCQUFrQixNQUFNLG9CQUFvQixDQUFDO0FBRXBELE9BQU8sRUFBQyxXQUFXLEVBQVUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0JBQXNC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LElBQUksR0FBRyxDQUFDO1FBQzFDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNFLElBQUk7Z0JBQ0YsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTztvQkFDeEIscUZBQXFGO3FCQUNwRixPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztxQkFDbEIsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3ZCO1lBQ0QsT0FBTyxVQUFVLEVBQUU7Z0JBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDOUQ7U0FDRjtRQUNELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDdkIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQztTQUNqRjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7OzJHQXoxQlUsY0FBYyxpTEE4QmYsV0FBVyxhQUNDLHlCQUF5QjsrR0EvQnBDLGNBQWMsY0FGYixNQUFNOzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkErQkksTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09ic2VydmFibGUsIG9mLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7QXBvbGxvLCBFeHRyYVN1YnNjcmlwdGlvbk9wdGlvbnMsIFF1ZXJ5UmVmfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQge1xuICBBcG9sbG9DYWNoZSxcbiAgQXBvbGxvQ2xpZW50LFxuICBBcG9sbG9MaW5rLFxuICBBcG9sbG9RdWVyeVJlc3VsdCxcbiAgRmV0Y2hQb2xpY3ksXG4gIEluTWVtb3J5Q2FjaGUsXG4gIE11dGF0aW9uVXBkYXRlckZuLFxuICBOZXR3b3JrU3RhdHVzLFxuICBPcGVyYXRpb25WYXJpYWJsZXMsXG4gIFR5cGVQb2xpY2llcyxcbiAgV2F0Y2hRdWVyeUZldGNoUG9saWN5XG59IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHtFcnJvckNvZGVzLCBTZXJ2ZXJFcnJvckNvZGVzLCBTZXJ2aWNlRXJyb3J9IGZyb20gJy4uL3NlcnZpY2VzL2Vycm9ycyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpcnN0LCBtYXAsIG1lcmdlTWFwLCB0aHJvdHRsZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Nvbm5lY3Rpb25UeXBlLCBOZXR3b3JrU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7QXBwV2ViU29ja2V0LCBjcmVhdGVUcmFja2VyTGluaywgaXNNdXRhdGlvbk9wZXJhdGlvbiwgaXNTdWJzY3JpcHRpb25PcGVyYXRpb24sIHJlc3RvcmVUcmFja2VkUXVlcmllcywgU3RvcmFnZVNlcnZpY2VXcmFwcGVyfSBmcm9tICcuL2dyYXBocWwudXRpbHMnO1xuaW1wb3J0IHtSZXRyeUxpbmt9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2xpbmsvcmV0cnknO1xuaW1wb3J0IHF1ZXVlTGlua0ltcG9ydGVkIGZyb20gJ2Fwb2xsby1saW5rLXF1ZXVlJztcbmltcG9ydCBzZXJpYWxpemluZ0xpbmtJbXBvcnRlZCBmcm9tICdhcG9sbG8tbGluay1zZXJpYWxpemUnO1xuaW1wb3J0IGxvZ2dlckxpbmtJbXBvcnRlZCBmcm9tICdhcG9sbG8tbGluay1sb2dnZXInO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtFbnRpdHlVdGlscywgSUVudGl0eX0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7aXNOaWwsIGlzTm90TmlsLCB0b051bWJlcn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge1Jlc29sdmVyc30gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZS90eXBlcyc7XG5pbXBvcnQge0h0dHBIZWFkZXJzfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0VtcHR5T2JqZWN0fSBmcm9tICdhcG9sbG8tYW5ndWxhci90eXBlcyc7XG5pbXBvcnQge0h0dHBMaW5rLCBPcHRpb25zfSBmcm9tICdhcG9sbG8tYW5ndWxhci9odHRwJztcbmltcG9ydCB7cGVyc2lzdENhY2hlLCBQZXJzaXN0ZW50U3RvcmFnZX0gZnJvbSAnYXBvbGxvMy1jYWNoZS1wZXJzaXN0JztcbmltcG9ydCB7RXJyb3JQb2xpY3ksIE11dGF0aW9uQmFzZU9wdGlvbnN9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUvd2F0Y2hRdWVyeU9wdGlvbnMnO1xuaW1wb3J0IHtDYWNoZX0gZnJvbSAnQGFwb2xsby9jbGllbnQvY2FjaGUvY29yZS90eXBlcy9DYWNoZSc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtDcnlwdG9TZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9jcnlwdG8uc2VydmljZSc7XG5pbXBvcnQge1Byb3BlcnRpZXNNYXB9IGZyb20gJy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQge1N0YXJ0YWJsZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge2lzTW9iaWxlfSBmcm9tICcuLi8uLi9zaGFyZWQvcGxhdGZvcm1zJztcbmltcG9ydCB7U3RvcmFnZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdG9yYWdlL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQge0dyYXBoUUxXc0xpbmt9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2xpbmsvc3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQge0NsaWVudE9wdGlvbnMsIGNyZWF0ZUNsaWVudH0gZnJvbSAnZ3JhcGhxbC13cyc7XG5pbXBvcnQge3Vud3JhcEVTTW9kdWxlfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kdWxlcyc7XG5cbi8vIFdvcmthcm91bmQgZm9yIGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1wYWNrYWdyL25nLXBhY2thZ3IvaXNzdWVzLzIyMTVcbmNvbnN0IFF1ZXVlTGluayA9IHVud3JhcEVTTW9kdWxlKHF1ZXVlTGlua0ltcG9ydGVkKTtcbmNvbnN0IFNlcmlhbGl6aW5nTGluayA9IHVud3JhcEVTTW9kdWxlKHNlcmlhbGl6aW5nTGlua0ltcG9ydGVkKTtcbmNvbnN0IGxvZ2dlckxpbmsgPSB1bndyYXBFU01vZHVsZShsb2dnZXJMaW5rSW1wb3J0ZWQpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdhdGNoUXVlcnlPcHRpb25zPFY+IHtcbiAgcXVlcnk6IGFueTtcbiAgdmFyaWFibGVzPzogVjtcbiAgZXJyb3I/OiBTZXJ2aWNlRXJyb3I7XG4gIGZldGNoUG9saWN5PzogV2F0Y2hRdWVyeUZldGNoUG9saWN5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11dGF0ZVF1ZXJ5T3B0aW9uczxULCBWID0gT3BlcmF0aW9uVmFyaWFibGVzPiBleHRlbmRzIE11dGF0aW9uQmFzZU9wdGlvbnM8VCwgVj4ge1xuICBtdXRhdGlvbjogYW55O1xuICB2YXJpYWJsZXM/OiBWO1xuICBlcnJvcj86IFNlcnZpY2VFcnJvcjtcbiAgY29udGV4dD86IHtcbiAgICBzZXJpYWxpemF0aW9uS2V5Pzogc3RyaW5nO1xuICAgIHRyYWNrZWQ/OiBib29sZWFuO1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gIH07XG4gIG9wdGltaXN0aWNSZXNwb25zZT86IFQ7XG4gIG9mZmxpbmVSZXNwb25zZT86IFQgfCAoKGNvbnRleHQ6IGFueSkgPT4gUHJvbWlzZTxUPik7XG4gIHVwZGF0ZT86IE11dGF0aW9uVXBkYXRlckZuPFQ+O1xuICBmb3JjZU9mZmxpbmU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQVBQX0dSQVBIUUxfVFlQRV9QT0xJQ0lFUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxUeXBlUG9saWNpZXM+KCdncmFwaHFsVHlwZVBvbGljaWVzJyk7XG5cbmV4cG9ydCB0eXBlIENvbm5lY3Rpb25QYXJhbXMgPSB7XG4gIGF1dGhUb2tlbj86IHN0cmluZztcbiAgYXV0aEJhc2ljPzogc3RyaW5nO1xufTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgR3JhcGhxbFNlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVTZXJ2aWNlPEFwb2xsb0NsaWVudDxhbnk+PiB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya1N0YXR1c0NoYW5nZWQkOiBPYnNlcnZhYmxlPENvbm5lY3Rpb25UeXBlPjtcblxuICBwcml2YXRlIGh0dHBQYXJhbXM6IE9wdGlvbnM7XG4gIHByaXZhdGUgd3NQYXJhbXM6IENsaWVudE9wdGlvbnM8Q29ubmVjdGlvblBhcmFtcz47XG4gIHByaXZhdGUgY29ubmVjdGlvblBhcmFtczogQ29ubmVjdGlvblBhcmFtcyA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0RmV0Y2hQb2xpY3k6IFdhdGNoUXVlcnlGZXRjaFBvbGljeTtcbiAgcHJpdmF0ZSBvbk5ldHdvcmtFcnJvciA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgY3VzdG9tRXJyb3JzOiBQcm9wZXJ0aWVzTWFwID0ge307XG5cbiAgZ2V0IGNsaWVudCgpOiBBcG9sbG9DbGllbnQ8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBnZXQgY2FjaGUoKTogQXBvbGxvQ2FjaGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYXBvbGxvLmNsaWVudC5jYWNoZTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0RmV0Y2hQb2xpY3koKTogV2F0Y2hRdWVyeUZldGNoUG9saWN5IHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEZldGNoUG9saWN5O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBhcG9sbG86IEFwb2xsbyxcbiAgICBwcml2YXRlIGh0dHBMaW5rOiBIdHRwTGluayxcbiAgICBwcml2YXRlIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjcnlwdG9TZXJ2aWNlOiBDcnlwdG9TZXJ2aWNlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9HUkFQSFFMX1RZUEVfUE9MSUNJRVMpIHByaXZhdGUgdHlwZVBvbGljaWVzOiBUeXBlUG9saWNpZXNcbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm0pOyAvLyBXYWl0IHBsYXRmb3JtXG5cbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIHRoaXMuX2RlZmF1bHRGZXRjaFBvbGljeSA9IGVudmlyb25tZW50LmFwb2xsb0ZldGNoUG9saWN5O1xuXG4gICAgLy8gTGlzdGVuIG5ldHdvcmsgc3RhdHVzXG4gICAgdGhpcy5fbmV0d29ya1N0YXR1c0NoYW5nZWQkID0gbmV0d29yay5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGlzTm90TmlsKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgKTtcblxuICAgIC8vIFdoZW4gZ2V0dGluZyBuZXR3b3JrIGVycm9yOiB0cnkgdG8gcGluZyBwZWVyLCBhbmQgdG9nZ2xlIHRvIG9mZmxpbmVcbiAgICB0aGlzLm9uTmV0d29ya0Vycm9yXG4gICAgICAucGlwZShcbiAgICAgICAgdGhyb3R0bGVUaW1lKDMwMCksXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLm5ldHdvcmsub25saW5lKSxcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5uZXR3b3JrLmNoZWNrUGVlckFsaXZlKCkpLFxuICAgICAgICBmaWx0ZXIoYWxpdmUgPT4gIWFsaXZlKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm5ldHdvcmsuc2V0Rm9yY2VPZmZsaW5lKHRydWUsIHtzaG93VG9hc3Q6IHRydWV9KSk7XG5cbiAgfVxuXG4gIHNldEF1dGhUb2tlbih0b2tlbjogc3RyaW5nKSB7XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZ3JhcGhxbF0gQXBwbHkgdG9rZW4gYXV0aGVudGljYXRpb24gdG8gaGVhZGVycycpO1xuICAgICAgdGhpcy5jb25uZWN0aW9uUGFyYW1zLmF1dGhUb2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICAvLyBDbGVhbiBhdXRoIHRva2VuXG4gICAgZWxzZSBpZiAodGhpcy5jb25uZWN0aW9uUGFyYW1zLmF1dGhUb2tlbikge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2dyYXBocWxdIFJlbW92ZSB0b2tlbiBhdXRoZW50aWNhdGlvbiBmcm9tIGhlYWRlcnMnKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmNvbm5lY3Rpb25QYXJhbXMuYXV0aFRva2VuO1xuICAgICAgLy8gQ2xlYXIgY2FjaGVcbiAgICAgIHRoaXMuY2xlYXJDYWNoZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldEF1dGhCYXNpYyhiYXNpYzogc3RyaW5nKSB7XG4gICAgaWYgKGJhc2ljKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZ3JhcGhxbF0gQXBwbHkgYmFzaWMgYXV0aGVudGljYXRpb24gdG8gaGVhZGVycycpO1xuICAgICAgdGhpcy5jb25uZWN0aW9uUGFyYW1zLmF1dGhCYXNpYyA9IGJhc2ljO1xuICAgIH1cbiAgICAvLyBDbGVhbiBhdXRoIGJhc2ljXG4gICAgZWxzZSBpZiAodGhpcy5jb25uZWN0aW9uUGFyYW1zLmF1dGhCYXNpYykge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2dyYXBocWxdIFJlbW92ZSBiYXNpYyBhdXRoZW50aWNhdGlvbiBmcm9tIGhlYWRlcnMnKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmNvbm5lY3Rpb25QYXJhbXMuYXV0aEJhc2ljO1xuICAgICAgLy8gQ2xlYXIgY2FjaGVcbiAgICAgIHRoaXMuY2xlYXJDYWNoZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byBhZGQgYSBmaWVsZCByZXNvbHZlclxuICAgKiAgKHNlZSBkb2M6IGh0dHBzOi8vd3d3LmFwb2xsb2dyYXBocWwuY29tL2RvY3MvcmVhY3QvZGF0YS9sb2NhbC1zdGF0ZS8jaGFuZGxpbmctY2xpZW50LWZpZWxkcy13aXRoLXJlc29sdmVycylcbiAgICpcbiAgICogQHBhcmFtIHJlc29sdmVyc1xuICAgKi9cbiAgYXN5bmMgYWRkUmVzb2x2ZXIocmVzb2x2ZXJzOiBSZXNvbHZlcnMgfCBSZXNvbHZlcnNbXSkge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgdGhpcy5hcG9sbG8uY2xpZW50LmFkZFJlc29sdmVycyhyZXNvbHZlcnMpO1xuICB9XG5cbiAgYXN5bmMgcXVlcnk8VCwgViA9IEVtcHR5T2JqZWN0PihvcHRzOiB7XG4gICAgcXVlcnk6IGFueTtcbiAgICB2YXJpYWJsZXM/OiBWO1xuICAgIGVycm9yPzogU2VydmljZUVycm9yO1xuICAgIGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3k7XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIGxldCByZXM7XG4gICAgdHJ5IHtcbiAgICAgIHJlcyA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5PEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+LCBWPih7XG4gICAgICAgIHF1ZXJ5OiBvcHRzLnF1ZXJ5LFxuICAgICAgICB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzLFxuICAgICAgICBmZXRjaFBvbGljeTogb3B0cy5mZXRjaFBvbGljeSB8fCAodGhpcy5fZGVmYXVsdEZldGNoUG9saWN5IGFzIEZldGNoUG9saWN5KSB8fCB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVzID0gdGhpcy50b0Fwb2xsb0Vycm9yPFQ+KGVyciwgb3B0cy5lcnJvcik7XG4gICAgfVxuICAgIGlmIChyZXMuZXJyb3JzKSB7XG4gICAgICB0aHJvdyByZXMuZXJyb3JzWzBdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLmRhdGE7XG4gIH1cblxuICB3YXRjaFF1ZXJ5UmVmPFQsIFYgPSBFbXB0eU9iamVjdD4ob3B0czogV2F0Y2hRdWVyeU9wdGlvbnM8Vj4pOiBRdWVyeVJlZjxULCBWPiB7XG4gICAgcmV0dXJuIHRoaXMuYXBvbGxvLndhdGNoUXVlcnk8VCwgVj4oe1xuICAgICAgcXVlcnk6IG9wdHMucXVlcnksXG4gICAgICB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzLFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdHMuZmV0Y2hQb2xpY3kgfHwgKHRoaXMuX2RlZmF1bHRGZXRjaFBvbGljeSBhcyBGZXRjaFBvbGljeSkgfHwgdW5kZWZpbmVkLFxuICAgICAgbm90aWZ5T25OZXR3b3JrU3RhdHVzQ2hhbmdlOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBxdWVyeVJlZlZhbHVlc0NoYW5nZXM8VCwgViA9IEVtcHR5T2JqZWN0PihxdWVyeVJlZjogUXVlcnlSZWY8VCwgVj4sIG9wdHM6IFdhdGNoUXVlcnlPcHRpb25zPFY+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHF1ZXJ5UmVmXG4gICAgICAudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLm9uQXBvbGxvRXJyb3I8VD4oZXJyb3IsIG9wdHMuZXJyb3IpKSxcbiAgICAgICAgZmlsdGVyKHZhbHVlID0+IHZhbHVlLm5ldHdvcmtTdGF0dXMgPT09IE5ldHdvcmtTdGF0dXMucmVhZHkgfHwgdmFsdWUubmV0d29ya1N0YXR1cyA9PT0gTmV0d29ya1N0YXR1cy5lcnJvciksXG4gICAgICAgIG1hcCgoe2RhdGEsIGVycm9yc30pID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcnNbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHdhdGNoUXVlcnk8VCwgViA9IEVtcHR5T2JqZWN0PihvcHRzOiBXYXRjaFF1ZXJ5T3B0aW9uczxWPik6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IHF1ZXJ5UmVmOiBRdWVyeVJlZjxULCBWPiA9IHRoaXMud2F0Y2hRdWVyeVJlZihvcHRzKTtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVJlZlZhbHVlc0NoYW5nZXMocXVlcnlSZWYsIG9wdHMpO1xuICB9XG5cbiAgYXN5bmMgbXV0YXRlPFQsIFYgPSBFbXB0eU9iamVjdD4ob3B0czogTXV0YXRlUXVlcnlPcHRpb25zPFQsIFY+KTogUHJvbWlzZTxUPiB7XG5cbiAgICAvLyBJZiBvZmZsaW5lLCBjb21wdXRlIGFuIG9wdGltaXN0aWMgcmVzcG9uc2UgZm9yIHRyYWNrZWQgcXVlcmllc1xuICAgIGlmICgob3B0cy5mb3JjZU9mZmxpbmUgfHwgdGhpcy5uZXR3b3JrLm9mZmxpbmUpICYmIG9wdHMub2ZmbGluZVJlc3BvbnNlKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMub2ZmbGluZVJlc3BvbnNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9wdHMuY29udGV4dCA9IG9wdHMuY29udGV4dCB8fCB7fTtcbiAgICAgICAgY29uc3Qgb3B0aW1pc3RpY1Jlc3BvbnNlRm4gPSAob3B0cy5vZmZsaW5lUmVzcG9uc2UgYXMgKChjb250ZXh0OiBhbnkpID0+IFByb21pc2U8VD4pKTtcbiAgICAgICAgb3B0cy5vcHRpbWlzdGljUmVzcG9uc2UgPSBhd2FpdCBvcHRpbWlzdGljUmVzcG9uc2VGbihvcHRzLmNvbnRleHQpO1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tncmFwaHFsXSBbb2ZmbGluZV0gVXNpbmcgYW4gb3B0aW1pc3RpYyByZXNwb25zZTogJywgb3B0cy5vcHRpbWlzdGljUmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG9wdHMub3B0aW1pc3RpY1Jlc3BvbnNlID0gb3B0cy5vZmZsaW5lUmVzcG9uc2UgYXMgVDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRzLmZvcmNlT2ZmbGluZSkge1xuICAgICAgICBjb25zdCByZXMgPSB7ZGF0YTogb3B0cy5vcHRpbWlzdGljUmVzcG9uc2V9O1xuICAgICAgICBpZiAob3B0cy51cGRhdGUpIHtcbiAgICAgICAgICBvcHRzLnVwZGF0ZSh0aGlzLmFwb2xsby5jbGllbnQuY2FjaGUsIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcy5kYXRhO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYXBvbGxvLm11dGF0ZTxBcG9sbG9RdWVyeVJlc3VsdDxUPiwgVj4oe1xuICAgICAgbXV0YXRpb246IG9wdHMubXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzLFxuICAgICAgY29udGV4dDogb3B0cy5jb250ZXh0LFxuICAgICAgb3B0aW1pc3RpY1Jlc3BvbnNlOiBvcHRzLm9wdGltaXN0aWNSZXNwb25zZSBhcyBhbnksXG4gICAgICB1cGRhdGU6IG9wdHMudXBkYXRlIGFzIGFueVxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLm9uQXBvbGxvRXJyb3I8VD4oZXJyb3IsIG9wdHMuZXJyb3IpKSxcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgLy8gVG8gZGVidWcsIGlmIG5lZWQ6XG4gICAgICAgIC8vdGFwKChyZXMpID0+ICghcmVzKSAmJiBjb25zb2xlLmVycm9yKCdbZ3JhcGhxbF0gVW5rbm93biBlcnJvciBkdXJpbmcgbXV0YXRpb24uIENoZWNrIGVycm9ycyBpbiBjb25zb2xlIChtYXkgYmUgYW4gaW52YWxpZCBnZW5lcmF0ZWQgY2FjaGUgaWQgPyknKSlcbiAgICAgICkudG9Qcm9taXNlKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzLmVycm9ycykpIHtcbiAgICAgIHRocm93IHJlcy5lcnJvcnNbMF07XG4gICAgfVxuICAgIHJldHVybiByZXMuZGF0YSBhcyBUO1xuICB9XG5cbiAgc3Vic2NyaWJlPFQsIFYgPSBFbXB0eU9iamVjdD4ob3B0czoge1xuICAgIHF1ZXJ5OiBhbnk7XG4gICAgdmFyaWFibGVzOiBWO1xuICAgIGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3k7XG4gICAgZXJyb3JQb2xpY3k/OiBFcnJvclBvbGljeTtcbiAgICBlcnJvcj86IFNlcnZpY2VFcnJvcjtcbiAgfSwgZXh0cmE/OiBFeHRyYVN1YnNjcmlwdGlvbk9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+IHtcblxuICAgIHJldHVybiB0aGlzLmFwb2xsby5zdWJzY3JpYmU8VD4oe1xuICAgICAgcXVlcnk6IG9wdHMucXVlcnksXG4gICAgICBmZXRjaFBvbGljeTogb3B0cyAmJiBvcHRzLmZldGNoUG9saWN5IHx8ICduZXR3b3JrLW9ubHknLFxuICAgICAgZXJyb3JQb2xpY3k6IG9wdHMgJiYgb3B0cy5lcnJvclBvbGljeSB8fCB1bmRlZmluZWQsXG4gICAgICB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzXG4gICAgfSwge1xuICAgICAgdXNlWm9uZTogdHJ1ZSxcbiAgICAgIC4uLmV4dHJhXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMub25BcG9sbG9FcnJvcjxUPihlcnJvciwgb3B0cy5lcnJvcikpLFxuICAgICAgICBtYXAoKHtkYXRhLCBlcnJvcnN9KSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3JzWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBpbnNlcnRJbnRvUXVlcnlDYWNoZTxULCBWID0gRW1wdHlPYmplY3Q+KGNhY2hlOiBBcG9sbG9DYWNoZTxhbnk+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM6IENhY2hlLlJlYWRRdWVyeU9wdGlvbnM8ViwgYW55PiAmIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5RmllbGROYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEZpZWxkTmFtZT86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0Rm4/OiAoZDE6IFQsIGQyOiBUKSA9PiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIHtcblxuICAgIGNhY2hlID0gY2FjaGUgfHwgdGhpcy5hcG9sbG8uY2xpZW50LmNhY2hlO1xuICAgIG9wdHMuYXJyYXlGaWVsZE5hbWUgPSBvcHRzLmFycmF5RmllbGROYW1lIHx8ICdkYXRhJztcblxuICAgIHRyeSB7XG4gICAgICBsZXQgZGF0YSA9IGNhY2hlLnJlYWRRdWVyeTxhbnksIFY+KHtxdWVyeTogb3B0cy5xdWVyeSwgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlc30pO1xuXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdKSB7XG4gICAgICAgIC8vIENvcHkgYmVjYXVzZSBpbW11dGFibGVcbiAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSB9O1xuXG4gICAgICAgIC8vIEFwcGVuZCB0byByZXN1bHQgYXJyYXlcbiAgICAgICAgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXSA9IFsgLi4uZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXSwgey4uLm9wdHMuZGF0YX1dO1xuXG4gICAgICAgIC8vIFJlc29ydCwgaWYgbmVlZFxuICAgICAgICBpZiAob3B0cy5zb3J0Rm4pIHtcbiAgICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLnNvcnQob3B0cy5zb3J0Rm4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXhjbHVkZSBpZiBleGNlZWQgbWF4IHNpemVcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRvTnVtYmVyKG9wdHMudmFyaWFibGVzICYmIG9wdHMudmFyaWFibGVzWydzaXplJ10sIC0xKTtcbiAgICAgICAgaWYgKHNpemUgPiAwICYmIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0ubGVuZ3RoID4gc2l6ZSkge1xuICAgICAgICAgIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc3BsaWNlKHNpemUsIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0ubGVuZ3RoIC0gc2l6ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbmNyZW1lbnQgdG90YWxcbiAgICAgICAgaWYgKGlzTm90TmlsKG9wdHMudG90YWxGaWVsZE5hbWUpKSB7XG4gICAgICAgICAgaWYgKGlzTm90TmlsKGRhdGFbb3B0cy50b3RhbEZpZWxkTmFtZV0pKSB7XG4gICAgICAgICAgICBkYXRhW29wdHMudG90YWxGaWVsZE5hbWVdICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbZ3JhcGhxbF0gVW5hYmxlIHRvIHVwZGF0ZSBjYWNoZWQgcXVlcnkuIFVua25vd24gcmVzdWx0IHBhcnQ6ICcgKyBvcHRzLnRvdGFsRmllbGROYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjYWNoZS53cml0ZVF1ZXJ5KHtcbiAgICAgICAgICBxdWVyeTogb3B0cy5xdWVyeSxcbiAgICAgICAgICB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzLFxuICAgICAgICAgIGRhdGFcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbZ3JhcGhxbF0gVW5hYmxlIHRvIHVwZGF0ZSBjYWNoZWQgcXVlcnkuIFVua25vd24gcmVzdWx0IHBhcnQ6ICcgKyBvcHRzLmFycmF5RmllbGROYW1lKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGNvbnRpbnVlXG4gICAgICAvLyByZWFkIGluIGNhY2hlIGlzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhIHJlc3VsdC4gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcG9sbG9ncmFwaHFsL3JlYWN0LWFwb2xsby9pc3N1ZXMvMTc3NiNpc3N1ZWNvbW1lbnQtMzcyMjM3OTQwXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZXJyb3IoJ1tncmFwaHFsXSBFcnJvciB3aGlsZSB1cGRhdGluZyBjYWNoZTogJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICBhZGRNYW55VG9RdWVyeUNhY2hlPFQgPSBhbnksIFYgPSBFbXB0eU9iamVjdD4oY2FjaGU6IEFwb2xsb0NhY2hlPGFueT4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzOiBDYWNoZS5SZWFkUXVlcnlPcHRpb25zPFYsIGFueT4gJiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5RmllbGROYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRmllbGROYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBUW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsc0ZuPzogKGQxOiBULCBkMjogVCkgPT4gYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydEZuPzogKGQxOiBULCBkMjogVCkgPT4gbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkge1xuXG4gICAgaWYgKCFvcHRzLmRhdGEgfHwgIW9wdHMuZGF0YS5sZW5ndGgpIHJldHVybjsgLy8gbm90aGluZyB0byBwcm9jZXNzXG5cbiAgICBjYWNoZSA9IGNhY2hlIHx8IHRoaXMuYXBvbGxvLmNsaWVudC5jYWNoZTtcbiAgICBvcHRzLmFycmF5RmllbGROYW1lID0gb3B0cy5hcnJheUZpZWxkTmFtZSB8fCAnZGF0YSc7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IGRhdGEgPSBjYWNoZS5yZWFkUXVlcnk8YW55LCBWPih7cXVlcnk6IG9wdHMucXVlcnksIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXN9KTtcblxuICAgICAgaWYgKGRhdGEgJiYgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXSkge1xuICAgICAgICAvLyBDb3B5IGJlY2F1c2UgaW1tdXRhYmxlXG4gICAgICAgIGRhdGEgPSB7IC4uLmRhdGEgfTtcblxuICAgICAgICAvLyBLZWVwIG9ubHkgbm90IGV4aXN0aW5nIHJlc1xuICAgICAgICBjb25zdCBlcXVhbHNGbiA9IG9wdHMuZXF1YWxzRm4gfHwgKChkMSwgZDIpID0+IGQxWydpZCddID09PSBkMlsnaWQnXSAmJiBkMVsnZW50aXR5TmFtZSddID09PSBkMlsnZW50aXR5TmFtZSddKTtcbiAgICAgICAgY29uc3QgbmV3SXRlbXMgPSBvcHRzLmRhdGEuZmlsdGVyKGlucHV0VmFsdWUgPT4gZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5maW5kSW5kZXgoZXhpc3RpbmdWYWx1ZSA9PiBlcXVhbHNGbihpbnB1dFZhbHVlLCBleGlzdGluZ1ZhbHVlKSkgPT09IC0xKTtcblxuICAgICAgICBpZiAoIW5ld0l0ZW1zLmxlbmd0aCkgcmV0dXJuOyAvLyBObyBuZXcgdmFsdWVcblxuICAgICAgICAvLyBBcHBlbmQgdG8gYXJyYXlcbiAgICAgICAgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXSA9IFsgLi4uZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXSwgLi4ubmV3SXRlbXNdO1xuXG4gICAgICAgIC8vIFJlc29ydCwgaWYgbmVlZFxuICAgICAgICBpZiAob3B0cy5zb3J0Rm4pIHtcbiAgICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLnNvcnQob3B0cy5zb3J0Rm4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXhjbHVkZSBpZiBleGNlZWQgbWF4IHNpemVcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRvTnVtYmVyKG9wdHMudmFyaWFibGVzICYmIG9wdHMudmFyaWFibGVzWydzaXplJ10sIC0xKTtcbiAgICAgICAgaWYgKHNpemUgPiAwICYmIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0ubGVuZ3RoID4gc2l6ZSkge1xuICAgICAgICAgIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc3BsaWNlKHNpemUsIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0ubGVuZ3RoIC0gc2l6ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIHRvdGFsXG4gICAgICAgIGlmIChpc05vdE5pbChvcHRzLnRvdGFsRmllbGROYW1lKSkge1xuICAgICAgICAgIGlmIChpc05vdE5pbChkYXRhW29wdHMudG90YWxGaWVsZE5hbWVdKSkge1xuICAgICAgICAgICAgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXSArPSBuZXdJdGVtcy5sZW5ndGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbZ3JhcGhxbF0gVW5hYmxlIHRvIHVwZGF0ZSBjYWNoZWQgcXVlcnkuIFVua25vd24gcmVzdWx0IHBhcnQ6ICcgKyBvcHRzLnRvdGFsRmllbGROYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXcml0ZSB0byBjYWNoZVxuICAgICAgICBjYWNoZS53cml0ZVF1ZXJ5KHtcbiAgICAgICAgICBxdWVyeTogb3B0cy5xdWVyeSxcbiAgICAgICAgICB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzLFxuICAgICAgICAgIGRhdGFcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbZ3JhcGhxbF0gVW5hYmxlIHRvIHVwZGF0ZSBjYWNoZWQgcXVlcnkuIFVua25vd24gcmVzdWx0IHBhcnQ6ICcgKyBvcHRzLmFycmF5RmllbGROYW1lKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGNvbnRpbnVlXG4gICAgICAvLyByZWFkIGluIGNhY2hlIGlzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhIHJlc3VsdC4gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcG9sbG9ncmFwaHFsL3JlYWN0LWFwb2xsby9pc3N1ZXMvMTc3NiNpc3N1ZWNvbW1lbnQtMzcyMjM3OTQwXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUud2FybignW2dyYXBocWxdIEVycm9yIHdoaWxlIHVwZGF0aW5nIGNhY2hlOiAnLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZnJvbSBjYWNoZSwgYW5kIHJldHVybiBpZiByZW1vdmVkIG9yIG5vdFxuICAgKlxuICAgKiBAcGFyYW0gY2FjaGVcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIHJlbW92ZUZyb21DYWNoZWRRdWVyeUJ5SWQ8ViA9IEVtcHR5T2JqZWN0LCBJRCA9IG51bWJlcj4oY2FjaGU6IEFwb2xsb0NhY2hlPGFueT4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0czogQ2FjaGUuUmVhZFF1ZXJ5T3B0aW9uczxWLCBhbnk+ICYge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlGaWVsZE5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRmllbGROYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzOiBJRDsgLy8gRG8gTk9UIHVzZSAnaWQnLCBhcyBhbHJlYWR5IHVzZWQgYnkgdGhlIEFwb2xsbyBBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTogYm9vbGVhbiB7XG5cbiAgICBjYWNoZSA9IGNhY2hlIHx8IHRoaXMuYXBvbGxvLmNsaWVudC5jYWNoZTtcbiAgICBvcHRzLmFycmF5RmllbGROYW1lID0gb3B0cy5hcnJheUZpZWxkTmFtZSB8fCAnZGF0YSc7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IGRhdGEgPSBjYWNoZS5yZWFkUXVlcnk8YW55LCBWPih7cXVlcnk6IG9wdHMucXVlcnksIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXN9KTtcblxuICAgICAgaWYgKGRhdGEgJiYgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXSkge1xuICAgICAgICAvLyBDb3B5IGJlY2F1c2UgaW1tdXRhYmxlXG4gICAgICAgIGRhdGEgPSB7IC4uLmRhdGEgfTtcblxuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uZmluZEluZGV4KGl0ZW0gPT4gaXRlbVsnaWQnXSA9PT0gb3B0cy5pZHMpO1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gZmFsc2U7IC8vIFNraXAgKG5vdGhpbmcgcmVtb3ZlZClcblxuICAgICAgICAvLyBDb3B5LCB0aGVuIHJlbW92ZSBkZWxldGVkIGl0ZW1cbiAgICAgICAgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXSA9IGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc2xpY2UoKTtcbiAgICAgICAgY29uc3QgZGVsZXRlZEl0ZW0gPSBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLnNwbGljZShpbmRleCwgMSlbMF07XG4gICAgICAgIGNhY2hlLmV2aWN0KHtpZDogY2FjaGUuaWRlbnRpZnkoZGVsZXRlZEl0ZW0pfSk7XG5cbiAgICAgICAgLy8gRGVjcmVtZW50IHRoZSB0b3RhbFxuICAgICAgICBpZiAoaXNOb3ROaWwob3B0cy50b3RhbEZpZWxkTmFtZSkpIHtcbiAgICAgICAgICBpZiAoaXNOb3ROaWwoZGF0YVtvcHRzLnRvdGFsRmllbGROYW1lXSkpIHtcbiAgICAgICAgICAgIGRhdGFbb3B0cy50b3RhbEZpZWxkTmFtZV0gLT0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMudG90YWxGaWVsZE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdyaXRlIHRvIGNhY2hlXG4gICAgICAgIGNhY2hlLndyaXRlUXVlcnkoe1xuICAgICAgICAgIHF1ZXJ5OiBvcHRzLnF1ZXJ5LFxuICAgICAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbZ3JhcGhxbF0gVW5hYmxlIHRvIHVwZGF0ZSBjYWNoZWQgcXVlcnkuIFVua25vd24gcmVzdWx0IHBhcnQ6ICcgKyBvcHRzLmFycmF5RmllbGROYW1lKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gY29udGludWVcbiAgICAgIC8vIHJlYWQgaW4gY2FjaGUgaXMgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGEgcmVzdWx0LiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvcmVhY3QtYXBvbGxvL2lzc3Vlcy8xNzc2I2lzc3VlY29tbWVudC0zNzIyMzc5NDBcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS53YXJuKCdbZ3JhcGhxbF0gRXJyb3Igd2hpbGUgcmVtb3ZpbmcgZnJvbSBjYWNoZTogJywgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGlkcyBmcm9tIGNhY2hlLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgcmVtb3ZlZFxuICAgKlxuICAgKiBAcGFyYW0gY2FjaGVcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIHJlbW92ZUZyb21DYWNoZWRRdWVyeUJ5SWRzPFYgPSBFbXB0eU9iamVjdCwgSUQgPSBudW1iZXI+KGNhY2hlOiBBcG9sbG9DYWNoZTxhbnk+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzOiBDYWNoZS5SZWFkUXVlcnlPcHRpb25zPFYsIGFueT4gJiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlGaWVsZE5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEZpZWxkTmFtZT86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHM6IElEW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOiBudW1iZXIge1xuXG4gICAgY2FjaGUgPSBjYWNoZSB8fCB0aGlzLmFwb2xsby5jbGllbnQuY2FjaGU7XG4gICAgb3B0cy5hcnJheUZpZWxkTmFtZSA9IG9wdHMuYXJyYXlGaWVsZE5hbWUgfHwgJ2RhdGEnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBkYXRhID0gY2FjaGUucmVhZFF1ZXJ5KG9wdHMpO1xuXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdKSB7XG4gICAgICAgIC8vIENvcHkgYmVjYXVzZSBpbW11dGFibGVcbiAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSB9O1xuXG4gICAgICAgIGNvbnN0IGRlbGV0ZWRJbmRleGVzID0gZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5yZWR1Y2UoKHJlcywgaXRlbSwgaW5kZXgpID0+IG9wdHMuaWRzLmluY2x1ZGVzKGl0ZW1bJ2lkJ10pID8gcmVzLmNvbmNhdChpbmRleCkgOiByZXMsIFtdKTtcblxuICAgICAgICBpZiAoZGVsZXRlZEluZGV4ZXMubGVuZ3RoIDw9IDApIHJldHVybiAwOyAvLyBTa2lwIChub3RoaW5nIHJlbW92ZWQpXG5cbiAgICAgICAgLy8gUXVlcnkgaGFzIE5PIHRvdGFsXG4gICAgICAgIGlmIChpc05pbChvcHRzLnRvdGFsRmllbGROYW1lKSkge1xuXG4gICAgICAgICAgLy8gRXZpY3QgZWFjaCBvYmplY3RcbiAgICAgICAgICBkZWxldGVkSW5kZXhlc1xuICAgICAgICAgICAgLm1hcChpbmRleCA9PiBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdW2luZGV4XSlcbiAgICAgICAgICAgIC5tYXAoaXRlbSA9PiBjYWNoZS5pZGVudGlmeShpdGVtKSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGlkID0+IGNhY2hlLmV2aWN0KHtpZH0pKTtcblxuICAgICAgICB9XG4gICAgICAgIC8vIFF1ZXJ5IGhhcyBhIHRvdGFsXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIENvcHkgdGhlIGFycmF5XG4gICAgICAgICAgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXSA9IGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc2xpY2UoKTtcblxuICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIGFycmF5LCB0aGVuIGV2aWN0XG4gICAgICAgICAgZGVsZXRlZEluZGV4ZXNcbiAgICAgICAgICAgIC8vIFJldmVyc2U6IHRvIGtlZXAgdmFsaWQgaW5kZXhcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIHRoZSBhcnJheVxuICAgICAgICAgICAgLm1hcChpbmRleCA9PiBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLnNwbGljZShpbmRleCwgMSlbMF0pXG4gICAgICAgICAgICAvLyBFdmljdCBmcm9tIGNhY2hlXG4gICAgICAgICAgICAubWFwKGl0ZW0gPT4gY2FjaGUuaWRlbnRpZnkoaXRlbSkpXG4gICAgICAgICAgICAuZm9yRWFjaChpZCA9PiBjYWNoZS5ldmljdCh7aWR9KSk7XG5cbiAgICAgICAgICBpZiAoaXNOb3ROaWwoZGF0YVtvcHRzLnRvdGFsRmllbGROYW1lXSkpIHtcbiAgICAgICAgICAgIGRhdGFbb3B0cy50b3RhbEZpZWxkTmFtZV0gLT0gZGVsZXRlZEluZGV4ZXMubGVuZ3RoOyAvLyBSZW1vdmUgZGVsZXRpb24gY291bnRcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIHRoZSB0b3RhbCBpbiBjYWNoZWQgcXVlcnkuIFVua25vd24gcmVzdWx0IHBhcnQ6ICcgKyBvcHRzLnRvdGFsRmllbGROYW1lKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYWNoZS53cml0ZVF1ZXJ5KHtcbiAgICAgICAgICAgIHF1ZXJ5OiBvcHRzLnF1ZXJ5LFxuICAgICAgICAgICAgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlcyxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBkZWxldGVkSW5kZXhlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMuYXJyYXlGaWVsZE5hbWUpO1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGNvbnRpbnVlXG4gICAgICAvLyByZWFkIGluIGNhY2hlIGlzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhIHJlc3VsdC4gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcG9sbG9ncmFwaHFsL3JlYWN0LWFwb2xsby9pc3N1ZXMvMTc3NiNpc3N1ZWNvbW1lbnQtMzcyMjM3OTQwXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUud2FybignW2dyYXBocWxdIEVycm9yIHdoaWxlIHJlbW92aW5nIGZyb20gY2FjaGU6ICcsIGVycik7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVUb1F1ZXJ5Q2FjaGU8VCBleHRlbmRzIElFbnRpdHk8YW55PixcbiAgICBWID0gRW1wdHlPYmplY3Q+KGNhY2hlOiBBcG9sbG9DYWNoZTxhbnk+LFxuICAgICAgICAgICAgICAgICAgICAgb3B0czogQ2FjaGUuUmVhZFF1ZXJ5T3B0aW9uczxWLCBhbnk+ICYge1xuICAgICAgICAgICAgICAgICAgICAgICBhcnJheUZpZWxkTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEZpZWxkTmFtZT86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogVDtcbiAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxzRm4/OiAoZDE6IFQsIGQyOiBUKSA9PiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgfSkge1xuICAgIGNhY2hlID0gY2FjaGUgfHwgdGhpcy5hcG9sbG8uY2xpZW50LmNhY2hlO1xuICAgIG9wdHMuYXJyYXlGaWVsZE5hbWUgPSBvcHRzLmFycmF5RmllbGROYW1lIHx8ICdkYXRhJztcblxuICAgIHRyeSB7XG4gICAgICBsZXQgZGF0YTogYW55ID0gY2FjaGUucmVhZFF1ZXJ5KG9wdHMpO1xuXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdKSB7XG4gICAgICAgIC8vIENvcHkgYmVjYXVzZSBpbW11dGFibGVcbiAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSB9O1xuXG4gICAgICAgIGNvbnN0IGVxdWFsc0ZuID0gb3B0cy5lcXVhbHNGbiB8fCAoKGQxLCBkMikgPT4gRW50aXR5VXRpbHMuZXF1YWxzKGQxLCBkMiwgJ2lkJykpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBpZiBleGlzdHMsIG9yIGluc2VydFxuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uZmluZEluZGV4KHYgPT4gZXF1YWxzRm4ob3B0cy5kYXRhLCB2KSk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdID0gZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5zbGljZSgpLnNwbGljZShpbmRleCwgMSwgb3B0cy5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdID0gWyAuLi5kYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLCBvcHRzLmRhdGFdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5jcmVtZW50IHRvdGFsIChpZiBjaGFuZ2VkKVxuICAgICAgICBpZiAoaXNOb3ROaWwob3B0cy50b3RhbEZpZWxkTmFtZSkgJiYgaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgaWYgKGlzTm90TmlsKGRhdGFbb3B0cy50b3RhbEZpZWxkTmFtZV0pKSB7XG4gICAgICAgICAgICBkYXRhW29wdHMudG90YWxGaWVsZE5hbWVdICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbZ3JhcGhxbF0gVW5hYmxlIHRvIHVwZGF0ZSBjYWNoZWQgcXVlcnkuIFVua25vd24gcmVzdWx0IHBhcnQ6ICcgKyBvcHRzLnRvdGFsRmllbGROYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjYWNoZS53cml0ZVF1ZXJ5KHtcbiAgICAgICAgICBxdWVyeTogb3B0cy5xdWVyeSxcbiAgICAgICAgICB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzLFxuICAgICAgICAgIGRhdGFcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjsgLy8gT0s6IHN0b3AgaGVyZVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gY29udGludWVcbiAgICAgIC8vIHJlYWQgaW4gY2FjaGUgaXMgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGEgcmVzdWx0LiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvcmVhY3QtYXBvbGxvL2lzc3Vlcy8xNzc2I2lzc3VlY29tbWVudC0zNzIyMzc5NDBcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS53YXJuKCdbZ3JhcGhxbF0gRXJyb3Igd2hpbGUgdXBkYXRpbmcgY2FjaGU6ICcsIGVycik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2xlYXJDYWNoZShjbGllbnQ/OiBBcG9sbG9DbGllbnQ8YW55Pik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNsaWVudCA9IChjbGllbnQgfHwgdGhpcy5jbGllbnQpIGFzIEFwb2xsb0NsaWVudDxhbnk+O1xuICAgIGlmIChjbGllbnQpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW2dyYXBocWxdIENsZWFuaW5nIGNhY2hlLi4uICcpO1xuICAgICAgY29uc3Qgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcblxuICAgICAgLy8gQ2xlYXJpbmcgdGhlIGNhY2hlXG4gICAgICBhd2FpdCBjbGllbnQuY2FjaGUucmVzZXQoKTtcblxuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbZ3JhcGhxbF0gQ2xlYW5pbmcgY2FjaGUgW09LXSBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3RlckN1c3RvbUVycm9yKGVycm9yOiBQcm9wZXJ0aWVzTWFwKSB7XG4gICAgdGhpcy5jdXN0b21FcnJvcnMgPSB7Li4udGhpcy5jdXN0b21FcnJvcnMsIC4uLmVycm9yfTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydCgpOiBQcm9taXNlPEFwb2xsb0NsaWVudDxhbnk+PiB7XG5cbiAgICAvLyBXYWl0IG5ldHdvcmsgYW5kIHN0b3JhZ2VcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLnN0b3JhZ2UucmVhZHkoKSxcbiAgICAgIHRoaXMubmV0d29yay5yZWFkeSgpXG4gICAgXSk7XG5cbiAgICBjb25zb2xlLmluZm8oJ1tncmFwaHFsXSBTdGFydGluZyBncmFwaHFsLi4uJyk7XG4gICAgY29uc3QgbW9iaWxlID0gaXNNb2JpbGUod2luZG93KTtcbiAgICBjb25zdCBlbmFibGVUcmFja011dGF0aW9uUXVlcmllcyA9ICFtb2JpbGU7XG5cbiAgICBjb25zdCBwZWVyID0gdGhpcy5uZXR3b3JrLnBlZXI7XG4gICAgaWYgKCFwZWVyKSB0aHJvdyBFcnJvcignW2dyYXBocWxdIE1pc3NpbmcgcGVlci4gVW5hYmxlIHRvIHN0YXJ0IGdyYXBocWwgc2VydmljZScpO1xuXG4gICAgY29uc3QgdXJpID0gcGVlci51cmwgKyAnL2dyYXBocWwnO1xuICAgIGNvbnN0IHdzVXJsID0gdXJpLnJlcGxhY2UoL15odHRwKHMpPzovLCAnd3MkMTonKSArICcvd2Vic29ja2V0JztcbiAgICBjb25zb2xlLmluZm8oJ1tncmFwaHFsXSBCYXNlIHVyaTogJyArIHVyaSk7XG4gICAgY29uc29sZS5pbmZvKCdbZ3JhcGhxbF0gU3Vic2NyaXB0aW9uIHVyaTogJyArIHdzVXJsKTtcblxuICAgIHRoaXMuaHR0cFBhcmFtcyA9IHRoaXMuaHR0cFBhcmFtcyB8fCB7fTtcbiAgICB0aGlzLmh0dHBQYXJhbXMudXJpID0gdXJpO1xuXG4gICAgdGhpcy53c1BhcmFtcyA9IHtcbiAgICAgIC4uLnRoaXMud3NQYXJhbXMsXG4gICAgICBsYXp5OiB0cnVlLFxuICAgICAgY29ubmVjdGlvblBhcmFtczogdGhpcy5jb25uZWN0aW9uUGFyYW1zLFxuICAgICAgd2ViU29ja2V0SW1wbDogQXBwV2ViU29ja2V0LFxuICAgICAgdXJsOiB3c1VybCxcbiAgICAgIHNob3VsZFJldHJ5OiAoZXJyT3JDbG9zZUV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybignW2dyYXBocWwtc2VydmljZV0gW1dTXSBUcnlpbmcgdG8gcmVjb25uZWN0Li4uJywgZXJyT3JDbG9zZUV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgICAgcmV0cnlBdHRlbXB0czogMTBcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIGEgc3RvcmFnZSBjb25maWd1cmF0aW9uXG4gICAgY29uc3Qgc3RvcmFnZTogUGVyc2lzdGVudFN0b3JhZ2U8c3RyaW5nPiA9IG5ldyBTdG9yYWdlU2VydmljZVdyYXBwZXIodGhpcy5zdG9yYWdlKTtcblxuICAgIGxldCBjbGllbnQgPSB0aGlzLmFwb2xsby5jbGllbnQ7XG4gICAgaWYgKCFjbGllbnQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1thcG9sbG9dIENyZWF0aW5nIEdyYXBoUUwgY2xpZW50Li4uJyk7XG5cbiAgICAgIC8vIFdlYnNvY2tldCBsaW5rXG4gICAgICBjb25zdCB3c0xpbmsgPSBuZXcgR3JhcGhRTFdzTGluayhjcmVhdGVDbGllbnQodGhpcy53c1BhcmFtcykpO1xuXG4gICAgICAvLyBSZXRyeSB3aGVuIGZhaWxlZCBsaW5rXG4gICAgICBjb25zdCByZXRyeUxpbmsgPSBuZXcgUmV0cnlMaW5rKCk7XG4gICAgICBjb25zdCBhdXRoTGluayA9IG5ldyBBcG9sbG9MaW5rKChvcGVyYXRpb24sIGZvcndhcmQpID0+IHtcblxuICAgICAgICBjb25zdCBhdXRob3JpemF0aW9uID0gW107XG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25QYXJhbXMuYXV0aFRva2VuKSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbi5wdXNoKGB0b2tlbiAke3RoaXMuY29ubmVjdGlvblBhcmFtcy5hdXRoVG9rZW59YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblBhcmFtcy5hdXRoQmFzaWMpIHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uLnB1c2goYEJhc2ljICR7dGhpcy5jb25uZWN0aW9uUGFyYW1zLmF1dGhCYXNpY31gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKClcbiAgICAgICAgICAuYXBwZW5kKCdBdXRob3JpemF0aW9uJywgYXV0aG9yaXphdGlvbik7XG5cbiAgICAgICAgLy8gVXNlIHRoZSBzZXRDb250ZXh0IG1ldGhvZCB0byBzZXQgdGhlIEhUVFAgaGVhZGVycy5cbiAgICAgICAgb3BlcmF0aW9uLnNldENvbnRleHQoe1xuICAgICAgICAgIC4uLm9wZXJhdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgLi4ue2hlYWRlcnN9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENhbGwgdGhlIG5leHQgbGluayBpbiB0aGUgbWlkZGxld2FyZSBjaGFpbi5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQob3BlcmF0aW9uKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBIdHRwIGxpbmtcbiAgICAgIGNvbnN0IGh0dHBMaW5rID0gdGhpcy5odHRwTGluay5jcmVhdGUodGhpcy5odHRwUGFyYW1zKTtcblxuICAgICAgLy8gQ2FjaGVcbiAgICAgIGNvbnN0IGNhY2hlID0gbmV3IEluTWVtb3J5Q2FjaGUoe1xuICAgICAgICB0eXBlUG9saWNpZXM6IHRoaXMudHlwZVBvbGljaWVzXG4gICAgICB9KTtcblxuICAgICAgLy8gQWRkIGNhY2hlIHBlcnNpc3RlbmNlXG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wZXJzaXN0Q2FjaGUpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW2dyYXBocWxdIFN0YXJ0aW5nIHBlcnNpc3RlbmNlIGNhY2hlLi4uJyk7XG4gICAgICAgIGF3YWl0IHBlcnNpc3RDYWNoZSh7XG4gICAgICAgICAgY2FjaGUsXG4gICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICB0cmlnZ2VyOiB0aGlzLnBsYXRmb3JtLmlzKCdhbmRyb2lkJykgPyAnYmFja2dyb3VuZCcgOiAnd3JpdGUnLFxuICAgICAgICAgIGRlYm91bmNlOiAxMDAwLFxuICAgICAgICAgIGRlYnVnOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBsZXQgbXV0YXRpb25MaW5rczogQXJyYXk8QXBvbGxvTGluaz47XG5cbiAgICAgIC8vIEFkZCBxdWV1ZSB0byBzdG9yZSB0cmFja2VkIHF1ZXJpZXMsIHdoZW4gb2ZmbGluZVxuICAgICAgaWYgKGVuYWJsZVRyYWNrTXV0YXRpb25RdWVyaWVzKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6aW5nTGluayA9IG5ldyBTZXJpYWxpemluZ0xpbmsoKTtcbiAgICAgICAgY29uc3QgdHJhY2tlckxpbmsgPSBjcmVhdGVUcmFja2VyTGluayh7XG4gICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICBvbk5ldHdvcmtTdGF0dXNDaGFuZ2U6IHRoaXMuX25ldHdvcmtTdGF0dXNDaGFuZ2VkJCxcbiAgICAgICAgICBkZWJvdW5jZTogMTAwMCxcbiAgICAgICAgICBkZWJ1ZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQ3JlYXRpbmcgYSBtdXRhdGlvbiBxdWV1ZVxuICAgICAgICBjb25zdCBxdWV1ZUxpbmsgPSBuZXcgUXVldWVMaW5rKCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5fbmV0d29ya1N0YXR1c0NoYW5nZWQkXG4gICAgICAgICAgLnN1YnNjcmliZSh0eXBlID0+IHtcbiAgICAgICAgICAgIC8vIE5ldHdvcmsgaXMgb2ZmbGluZTogc3RhcnQgYnVmZmVyaW5nIGludG8gcXVldWVcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5pbmZvKCdbZ3JhcGhxbF0gb2ZmbGluZSBtb2RlOiBlbmFibGUgbXV0YXRpb25zIGJ1ZmZlcicpO1xuICAgICAgICAgICAgICBxdWV1ZUxpbmsuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE5ldHdvcmsgaXMgb25saW5lXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5pbmZvKCdbZ3JhcGhxbF0gb25saW5lIG1vZGU6IGRpc2FibGUgbXV0YXRpb25zIGJ1ZmZlcicpO1xuICAgICAgICAgICAgICBxdWV1ZUxpbmsub3BlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgbXV0YXRpb25MaW5rcyA9IFtcbiAgICAgICAgICBsb2dnZXJMaW5rLFxuICAgICAgICAgIHF1ZXVlTGluayxcbiAgICAgICAgICB0cmFja2VyTGluayxcbiAgICAgICAgICBxdWV1ZUxpbmssXG4gICAgICAgICAgc2VyaWFsaXppbmdMaW5rLFxuICAgICAgICAgIHJldHJ5TGluayxcbiAgICAgICAgICBhdXRoTGluayxcbiAgICAgICAgICBodHRwTGlua1xuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG11dGF0aW9uTGlua3MgPSBbXG4gICAgICAgICAgcmV0cnlMaW5rLFxuICAgICAgICAgIGF1dGhMaW5rLFxuICAgICAgICAgIGh0dHBMaW5rXG4gICAgICAgIF07XG4gICAgICB9XG5cbiAgICAgIC8vIGNyZWF0ZSBBcG9sbG9cbiAgICAgIGNsaWVudCA9IG5ldyBBcG9sbG9DbGllbnQoe1xuICAgICAgICBjYWNoZSxcbiAgICAgICAgbGluazpcbiAgICAgICAgICBBcG9sbG9MaW5rLnNwbGl0KFxuICAgICAgICAgICAgLy8gSGFuZGxlIG11dGF0aW9uc1xuICAgICAgICAgICAgaXNNdXRhdGlvbk9wZXJhdGlvbixcbiAgICAgICAgICAgIEFwb2xsb0xpbmsuZnJvbShtdXRhdGlvbkxpbmtzKSxcblxuICAgICAgICAgICAgQXBvbGxvTGluay5zcGxpdChcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgICAgICAgaXNTdWJzY3JpcHRpb25PcGVyYXRpb24sXG4gICAgICAgICAgICAgIHdzTGluayxcblxuICAgICAgICAgICAgICAvLyBIYW5kbGUgcXVlcmllc1xuICAgICAgICAgICAgICBBcG9sbG9MaW5rLmZyb20oW1xuICAgICAgICAgICAgICAgIHJldHJ5TGluayxcbiAgICAgICAgICAgICAgICBhdXRoTGluayxcbiAgICAgICAgICAgICAgICBodHRwTGlua1xuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgIGNvbm5lY3RUb0RldlRvb2xzOiAhdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5hcG9sbG8uY2xpZW50ID0gY2xpZW50O1xuICAgIH1cblxuICAgIC8vIEVuYWJsZSB0cmFja2VkIHF1ZXJpZXMgcGVyc2lzdGVuY2VcbiAgICBpZiAoZW5hYmxlVHJhY2tNdXRhdGlvblF1ZXJpZXMgJiYgdGhpcy5lbnZpcm9ubWVudC5wZXJzaXN0Q2FjaGUpIHtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgcmVzdG9yZVRyYWNrZWRRdWVyaWVzKHtcbiAgICAgICAgICBhcG9sbG9DbGllbnQ6IGNsaWVudCxcbiAgICAgICAgICBzdG9yYWdlLFxuICAgICAgICAgIGRlYnVnOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tncmFwaHFsXSBGYWlsZWQgdG8gcmVzdG9yZSB0cmFja2VkIHF1ZXJpZXMgZnJvbSBzdG9yYWdlOiAnICsgKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpLCBlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExpc3RlbiBmb3IgbmV0d29yayByZXN0YXJ0XG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMubmV0d29yay5vbignc3RhcnQnLCAoKSA9PiB0aGlzLnJlc3RhcnQoKSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIGZvciBjbGVhciBjYWNoZSByZXF1ZXN0LCBmcm9tIG5ldHdvcmtcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5uZXR3b3JrLm9uKCdyZXNldENhY2hlJywgKCkgPT4gdGhpcy5jbGVhckNhY2hlKCkpXG4gICAgKTtcblxuICAgIGNvbnNvbGUuaW5mbygnW2dyYXBocWxdIFN0YXJ0aW5nIGdyYXBocWwgW09LXScpO1xuICAgIHJldHVybiBjbGllbnQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0b3AoKSB7XG4gICAgY29uc29sZS5pbmZvKCdbZ3JhcGhxbF0gU3RvcHBpbmcgZ3JhcGhxbCBzZXJ2aWNlLi4uJyk7XG4gICAgYXdhaXQgdGhpcy5yZXNldENsaWVudCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc2V0Q2xpZW50KGNsaWVudD86IEFwb2xsb0NsaWVudDxhbnk+KSB7XG4gICAgY2xpZW50ID0gKGNsaWVudCB8fCB0aGlzLmFwb2xsby5jbGllbnQpIGFzIEFwb2xsb0NsaWVudDxhbnk+O1xuICAgIGlmICghY2xpZW50KSByZXR1cm47XG5cbiAgICBjb25zb2xlLmluZm8oJ1tncmFwaHFsXSBSZXNldHRpbmcgQXBvbGxvIGNsaWVudC4uLicpO1xuICAgIGNsaWVudC5zdG9wKCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgY2xpZW50LmNsZWFyU3RvcmUoKSxcbiAgICAgIHRoaXMuY2xlYXJDYWNoZShjbGllbnQpXG4gICAgXSk7XG4gIH1cblxuICBwcml2YXRlIG9uQXBvbGxvRXJyb3I8VD4oZXJyOiBhbnksIGRlZmF1bHRFcnJvcj86IGFueSk6IE9ic2VydmFibGU8QXBvbGxvUXVlcnlSZXN1bHQ8VD4+IHtcbiAgICByZXR1cm4gb2YodGhpcy50b0Fwb2xsb0Vycm9yPFQ+KGVyciwgZGVmYXVsdEVycm9yKSk7XG4gIH1cblxuICBwcml2YXRlIHRvQXBvbGxvRXJyb3I8VD4oZXJyOiBhbnksIGRlZmF1bHRFcnJvcj86IGFueSk6IEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+IHtcbiAgICBsZXQgZXJyb3IgPVxuICAgICAgLy8gSWYgbmV0d29yayBlcnJvcjogdHJ5IHRvIGNvbnZlcnQgdG8gQXBwIChyZWFkIGFzIEpTT04pLCBvciBjcmVhdGUgYW4gVU5LTk9XTl9ORVRXT1JLX0VSUk9SXG4gICAgICAoZXJyLm5ldHdvcmtFcnJvciAmJiAoXG4gICAgICAgICAgKGVyci5uZXR3b3JrRXJyb3IuZXJyb3IgJiYgdGhpcy50b0FwcEVycm9yKGVyci5uZXR3b3JrRXJyb3IuZXJyb3IpKVxuICAgICAgICAgIHx8IHRoaXMudG9BcHBFcnJvcihlcnIubmV0d29ya0Vycm9yKVxuICAgICAgICAgIHx8IChlcnIubmV0d29ya0Vycm9yLmVycm9yICYmIHRoaXMuY3JlYXRlQXBwRXJyb3JCeUNvZGUoZXJyLm5ldHdvcmtFcnJvci5lcnJvci5zdGF0dXMpKVxuICAgICAgICAgIHx8IHRoaXMuY3JlYXRlQXBwRXJyb3JCeUNvZGUoRXJyb3JDb2Rlcy5VTktOT1dOX05FVFdPUktfRVJST1IpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC8vIElmIGdyYXBoUUw6IHRyeSB0byBjb252ZXJ0IHRoZSBmaXJzdCBlcnJvciBmb3VuZFxuICAgICAgfHwgKGVyci5ncmFwaFFMRXJyb3JzICYmIGVyci5ncmFwaFFMRXJyb3JzLmxlbmd0aCAmJiB0aGlzLnRvQXBwRXJyb3IoZXJyLmdyYXBoUUxFcnJvcnNbMF0pKVxuICAgICAgfHwgdGhpcy50b0FwcEVycm9yKGVycilcbiAgICAgIHx8IHRoaXMudG9BcHBFcnJvcihlcnIub3JpZ2luYWxFcnJvcilcbiAgICAgIHx8IChlcnIuZ3JhcGhRTEVycm9ycyAmJiBlcnIuZ3JhcGhRTEVycm9yc1swXSlcbiAgICAgIHx8IGVycjtcbiAgICBjb25zb2xlLmVycm9yKCdbZ3JhcGhxbF0gJyArIChlcnJvciAmJiBlcnJvci5tZXNzYWdlIHx8IGVycm9yKSwgZXJyb3Iuc3RhY2sgfHwgJycpO1xuICAgIGlmIChlcnJvciAmJiBlcnJvci5jb2RlID09PSBFcnJvckNvZGVzLlVOS05PV05fTkVUV09SS19FUlJPUiAmJiBlcnIubmV0d29ya0Vycm9yICYmIGVyci5uZXR3b3JrRXJyb3IubWVzc2FnZSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2dyYXBocWxdIG9yaWdpbmFsIGVycm9yOiAnICsgZXJyLm5ldHdvcmtFcnJvci5tZXNzYWdlKTtcbiAgICAgIHRoaXMub25OZXR3b3JrRXJyb3IubmV4dChlcnJvcik7XG4gICAgfVxuICAgIGlmICgoIWVycm9yIHx8ICFlcnJvci5jb2RlKSAmJiBkZWZhdWx0RXJyb3IpIHtcbiAgICAgIGVycm9yID0gey4uLmRlZmF1bHRFcnJvciwgZGV0YWlsczogZXJyb3IsIHN0YWNrOiBlcnIuc3RhY2t9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogbnVsbCxcbiAgICAgIGVycm9yczogW2Vycm9yXSxcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgbmV0d29ya1N0YXR1czogTmV0d29ya1N0YXR1cy5lcnJvclxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFwcEVycm9yQnlDb2RlKGVycm9yQ29kZTogbnVtYmVyKTogYW55IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5nZXRJMThuRXJyb3JNZXNzYWdlQnlDb2RlKGVycm9yQ29kZSk7XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvZGU6IGVycm9yQ29kZSxcbiAgICAgICAgbWVzc2FnZTogdGhpcy5nZXRJMThuRXJyb3JNZXNzYWdlQnlDb2RlKGVycm9yQ29kZSlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldEkxOG5FcnJvck1lc3NhZ2VCeUNvZGUoZXJyb3JDb2RlOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXG4gICAgLy8gbG9vayBpbiByZWdpc3RlcmVkIGVycm9yIGNvZGVzXG4gICAgY29uc3QgY3VzdG9tRXJyb3JNZXNzYWdlID0gdGhpcy5jdXN0b21FcnJvcnNbZXJyb3JDb2RlXTtcbiAgICBpZiAoY3VzdG9tRXJyb3JNZXNzYWdlKSB7XG4gICAgICByZXR1cm4gY3VzdG9tRXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQsIHN3aXRjaCBvbiBlcnJvciBjb2RlXG4gICAgc3dpdGNoIChlcnJvckNvZGUpIHtcbiAgICAgIGNhc2UgU2VydmVyRXJyb3JDb2Rlcy5VTkFVVEhPUklaRUQ6XG4gICAgICAgIHJldHVybiAnRVJST1IuVU5BVVRIT1JJWkVEJztcbiAgICAgIGNhc2UgU2VydmVyRXJyb3JDb2Rlcy5GT1JCSURERU46XG4gICAgICAgIHJldHVybiAnRVJST1IuRk9SQklEREVOJztcbiAgICAgIGNhc2UgRXJyb3JDb2Rlcy5VTktOT1dOX05FVFdPUktfRVJST1I6XG4gICAgICAgIHJldHVybiAnRVJST1IuVU5LTk9XTl9ORVRXT1JLX0VSUk9SJztcbiAgICAgIGNhc2UgU2VydmVyRXJyb3JDb2Rlcy5CQURfVVBEQVRFX0RBVEU6XG4gICAgICAgIHJldHVybiAnRVJST1IuQkFEX1VQREFURV9EQVRFJztcbiAgICAgIGNhc2UgU2VydmVyRXJyb3JDb2Rlcy5EQVRBX0xPQ0tFRDpcbiAgICAgICAgcmV0dXJuICdFUlJPUi5EQVRBX0xPQ0tFRCc7XG4gICAgICBjYXNlIFNlcnZlckVycm9yQ29kZXMuQkFEX0FQUF9WRVJTSU9OOlxuICAgICAgICByZXR1cm4gJ0VSUk9SLkJBRF9BUFBfVkVSU0lPTic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgdG9BcHBFcnJvcihlcnI6IGFueSk6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGVycm9yID0gZXJyO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyO1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS50cmltKCkuaW5kZXhPZigne1wiY29kZVwiOicpID09PSAwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBlcnJvciA9IEpTT04ucGFyc2UobWVzc2FnZVxuICAgICAgICAgIC8vIFJlbW92ZSBzcGVjaWFsIGNoYXJhY3RlcnMgYmVmb3JlIHBhcnNpbmcgKGUuZy4gU1FMIGVycm9ycyBmcm9tIGFuIE9yYWNsZSBkYXRhYmFzZSlcbiAgICAgICAgICAucmVwbGFjZSgnXFxuJywgJyAnKVxuICAgICAgICAgIC5yZXBsYWNlKCdcXHInLCAnJykpO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignVW5hYmxlIHRvIHBhcnNlIGVycm9yIGFzIEpTT046ICcsIHBhcnNlRXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXJyb3IgJiYgZXJyb3IuY29kZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQXBwRXJyb3JCeUNvZGUoZXJyb3IuY29kZSkgfHwgZXJyb3IgJiYgZXJyb3IubWVzc2FnZSB8fCBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG59XG4iXX0=
|
|
745
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2dyYXBocWwvZ3JhcGhxbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFFTCxZQUFZLEVBQ1osVUFBVSxFQUdWLGFBQWEsRUFFYixhQUFhLEVBSWQsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDOUUsT0FBTyxFQUFDLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUcsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUzRSxPQUFPLEVBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDNUosT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8saUJBQWlCLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyx1QkFBdUIsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLGtCQUFrQixNQUFNLG9CQUFvQixDQUFDO0FBRXBELE9BQU8sRUFBQyxXQUFXLEVBQVUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0JBQXNC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OzJCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JzZXJ2YWJsZSwgb2YsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBcG9sbG8sIEV4dHJhU3Vic2NyaXB0aW9uT3B0aW9ucywgUXVlcnlSZWZ9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7XG4gIEFwb2xsb0NhY2hlLFxuICBBcG9sbG9DbGllbnQsXG4gIEFwb2xsb0xpbmssXG4gIEFwb2xsb1F1ZXJ5UmVzdWx0LFxuICBGZXRjaFBvbGljeSxcbiAgSW5NZW1vcnlDYWNoZSxcbiAgTXV0YXRpb25VcGRhdGVyRm4sXG4gIE5ldHdvcmtTdGF0dXMsXG4gIE9wZXJhdGlvblZhcmlhYmxlcyxcbiAgVHlwZVBvbGljaWVzLFxuICBXYXRjaFF1ZXJ5RmV0Y2hQb2xpY3lcbn0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge0Vycm9yQ29kZXMsIFNlcnZlckVycm9yQ29kZXMsIFNlcnZpY2VFcnJvcn0gZnJvbSAnLi4vc2VydmljZXMvZXJyb3JzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIG1hcCwgbWVyZ2VNYXAsIHRocm90dGxlVGltZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29ubmVjdGlvblR5cGUsIE5ldHdvcmtTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHtBcHBXZWJTb2NrZXQsIGNyZWF0ZVRyYWNrZXJMaW5rLCBpc011dGF0aW9uT3BlcmF0aW9uLCBpc1N1YnNjcmlwdGlvbk9wZXJhdGlvbiwgcmVzdG9yZVRyYWNrZWRRdWVyaWVzLCBTdG9yYWdlU2VydmljZVdyYXBwZXJ9IGZyb20gJy4vZ3JhcGhxbC51dGlscyc7XG5pbXBvcnQge1JldHJ5TGlua30gZnJvbSAnQGFwb2xsby9jbGllbnQvbGluay9yZXRyeSc7XG5pbXBvcnQgcXVldWVMaW5rSW1wb3J0ZWQgZnJvbSAnYXBvbGxvLWxpbmstcXVldWUnO1xuaW1wb3J0IHNlcmlhbGl6aW5nTGlua0ltcG9ydGVkIGZyb20gJ2Fwb2xsby1saW5rLXNlcmlhbGl6ZSc7XG5pbXBvcnQgbG9nZ2VyTGlua0ltcG9ydGVkIGZyb20gJ2Fwb2xsby1saW5rLWxvZ2dlcic7XG5pbXBvcnQge1BsYXRmb3JtfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge0VudGl0eVV0aWxzLCBJRW50aXR5fSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtpc05pbCwgaXNOb3ROaWwsIHRvTnVtYmVyfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7UmVzb2x2ZXJzfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlL3R5cGVzJztcbmltcG9ydCB7SHR0cEhlYWRlcnN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7RW1wdHlPYmplY3R9IGZyb20gJ2Fwb2xsby1hbmd1bGFyL3R5cGVzJztcbmltcG9ydCB7SHR0cExpbmssIE9wdGlvbnN9IGZyb20gJ2Fwb2xsby1hbmd1bGFyL2h0dHAnO1xuaW1wb3J0IHtwZXJzaXN0Q2FjaGUsIFBlcnNpc3RlbnRTdG9yYWdlfSBmcm9tICdhcG9sbG8zLWNhY2hlLXBlcnNpc3QnO1xuaW1wb3J0IHtFcnJvclBvbGljeSwgTXV0YXRpb25CYXNlT3B0aW9uc30gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZS93YXRjaFF1ZXJ5T3B0aW9ucyc7XG5pbXBvcnQge0NhY2hlfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jYWNoZS9jb3JlL3R5cGVzL0NhY2hlJztcbmltcG9ydCB7RU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge0NyeXB0b1NlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2NyeXB0by5zZXJ2aWNlJztcbmltcG9ydCB7UHJvcGVydGllc01hcH0gZnJvbSAnLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7U3RhcnRhYmxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7aXNNb2JpbGV9IGZyb20gJy4uLy4uL3NoYXJlZC9wbGF0Zm9ybXMnO1xuaW1wb3J0IHtTdG9yYWdlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0b3JhZ2Uvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7R3JhcGhRTFdzTGlua30gZnJvbSAnQGFwb2xsby9jbGllbnQvbGluay9zdWJzY3JpcHRpb25zJztcbmltcG9ydCB7Q2xpZW50T3B0aW9ucywgY3JlYXRlQ2xpZW50fSBmcm9tICdncmFwaHFsLXdzJztcbmltcG9ydCB7dW53cmFwRVNNb2R1bGV9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2R1bGVzJztcblxuLy8gV29ya2Fyb3VuZCBmb3IgaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL25nLXBhY2thZ3IvbmctcGFja2Fnci9pc3N1ZXMvMjIxNVxuY29uc3QgUXVldWVMaW5rID0gdW53cmFwRVNNb2R1bGUocXVldWVMaW5rSW1wb3J0ZWQpO1xuY29uc3QgU2VyaWFsaXppbmdMaW5rID0gdW53cmFwRVNNb2R1bGUoc2VyaWFsaXppbmdMaW5rSW1wb3J0ZWQpO1xuY29uc3QgbG9nZ2VyTGluayA9IHVud3JhcEVTTW9kdWxlKGxvZ2dlckxpbmtJbXBvcnRlZCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hRdWVyeU9wdGlvbnM8Vj4ge1xuICBxdWVyeTogYW55O1xuICB2YXJpYWJsZXM/OiBWO1xuICBlcnJvcj86IFNlcnZpY2VFcnJvcjtcbiAgZmV0Y2hQb2xpY3k/OiBXYXRjaFF1ZXJ5RmV0Y2hQb2xpY3k7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXV0YXRlUXVlcnlPcHRpb25zPFQsIFYgPSBPcGVyYXRpb25WYXJpYWJsZXM+IGV4dGVuZHMgTXV0YXRpb25CYXNlT3B0aW9uczxULCBWPiB7XG4gIG11dGF0aW9uOiBhbnk7XG4gIHZhcmlhYmxlcz86IFY7XG4gIGVycm9yPzogU2VydmljZUVycm9yO1xuICBjb250ZXh0Pzoge1xuICAgIHNlcmlhbGl6YXRpb25LZXk/OiBzdHJpbmc7XG4gICAgdHJhY2tlZD86IGJvb2xlYW47XG4gICAgdGltZW91dD86IG51bWJlcjtcbiAgfTtcbiAgb3B0aW1pc3RpY1Jlc3BvbnNlPzogVDtcbiAgb2ZmbGluZVJlc3BvbnNlPzogVCB8ICgoY29udGV4dDogYW55KSA9PiBQcm9taXNlPFQ+KTtcbiAgdXBkYXRlPzogTXV0YXRpb25VcGRhdGVyRm48VD47XG4gIGZvcmNlT2ZmbGluZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBBUFBfR1JBUEhRTF9UWVBFX1BPTElDSUVTID0gbmV3IEluamVjdGlvblRva2VuPFR5cGVQb2xpY2llcz4oJ2dyYXBocWxUeXBlUG9saWNpZXMnKTtcblxuZXhwb3J0IHR5cGUgQ29ubmVjdGlvblBhcmFtcyA9IHtcbiAgYXV0aFRva2VuPzogc3RyaW5nO1xuICBhdXRoQmFzaWM/OiBzdHJpbmc7XG59O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBHcmFwaHFsU2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2U8QXBvbGxvQ2xpZW50PGFueT4+IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrU3RhdHVzQ2hhbmdlZCQ6IE9ic2VydmFibGU8Q29ubmVjdGlvblR5cGU+O1xuXG4gIHByaXZhdGUgaHR0cFBhcmFtczogT3B0aW9ucztcbiAgcHJpdmF0ZSB3c1BhcmFtczogQ2xpZW50T3B0aW9uczxDb25uZWN0aW9uUGFyYW1zPjtcbiAgcHJpdmF0ZSBjb25uZWN0aW9uUGFyYW1zOiBDb25uZWN0aW9uUGFyYW1zID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRGZXRjaFBvbGljeTogV2F0Y2hRdWVyeUZldGNoUG9saWN5O1xuICBwcml2YXRlIG9uTmV0d29ya0Vycm9yID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBjdXN0b21FcnJvcnM6IFByb3BlcnRpZXNNYXAgPSB7fTtcblxuICBnZXQgY2xpZW50KCk6IEFwb2xsb0NsaWVudDxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIGdldCBjYWNoZSgpOiBBcG9sbG9DYWNoZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5hcG9sbG8uY2xpZW50LmNhY2hlO1xuICB9XG5cbiAgZ2V0IGRlZmF1bHRGZXRjaFBvbGljeSgpOiBXYXRjaFF1ZXJ5RmV0Y2hQb2xpY3kge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0RmV0Y2hQb2xpY3k7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIGFwb2xsbzogQXBvbGxvLFxuICAgIHByaXZhdGUgaHR0cExpbms6IEh0dHBMaW5rLFxuICAgIHByaXZhdGUgbmV0d29yazogTmV0d29ya1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGNyeXB0b1NlcnZpY2U6IENyeXB0b1NlcnZpY2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0dSQVBIUUxfVFlQRV9QT0xJQ0lFUykgcHJpdmF0ZSB0eXBlUG9saWNpZXM6IFR5cGVQb2xpY2llc1xuICApIHtcbiAgICBzdXBlcihwbGF0Zm9ybSk7IC8vIFdhaXQgcGxhdGZvcm1cblxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgdGhpcy5fZGVmYXVsdEZldGNoUG9saWN5ID0gZW52aXJvbm1lbnQuYXBvbGxvRmV0Y2hQb2xpY3k7XG5cbiAgICAvLyBMaXN0ZW4gbmV0d29yayBzdGF0dXNcbiAgICB0aGlzLl9uZXR3b3JrU3RhdHVzQ2hhbmdlZCQgPSBuZXR3b3JrLm9uTmV0d29ya1N0YXR1c0NoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoaXNOb3ROaWwpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICApO1xuXG4gICAgLy8gV2hlbiBnZXR0aW5nIG5ldHdvcmsgZXJyb3I6IHRyeSB0byBwaW5nIHBlZXIsIGFuZCB0b2dnbGUgdG8gb2ZmbGluZVxuICAgIHRoaXMub25OZXR3b3JrRXJyb3JcbiAgICAgIC5waXBlKFxuICAgICAgICB0aHJvdHRsZVRpbWUoMzAwKSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMubmV0d29yay5vbmxpbmUpLFxuICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLm5ldHdvcmsuY2hlY2tQZWVyQWxpdmUoKSksXG4gICAgICAgIGZpbHRlcihhbGl2ZSA9PiAhYWxpdmUpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubmV0d29yay5zZXRGb3JjZU9mZmxpbmUodHJ1ZSwge3Nob3dUb2FzdDogdHJ1ZX0pKTtcblxuICB9XG5cbiAgYXN5bmMgc2V0QXV0aFRva2VuKHRva2VuOiBzdHJpbmcpIHtcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tncmFwaHFsXSBBcHBseSB0b2tlbiBhdXRoZW50aWNhdGlvbiB0byBoZWFkZXJzJyk7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25QYXJhbXMuYXV0aFRva2VuID0gdG9rZW47XG4gICAgfVxuICAgIC8vIENsZWFuIGF1dGggdG9rZW5cbiAgICBlbHNlIGlmICh0aGlzLmNvbm5lY3Rpb25QYXJhbXMuYXV0aFRva2VuKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZ3JhcGhxbF0gUmVtb3ZlIHRva2VuIGF1dGhlbnRpY2F0aW9uIGZyb20gaGVhZGVycycpO1xuICAgICAgZGVsZXRlIHRoaXMuY29ubmVjdGlvblBhcmFtcy5hdXRoVG9rZW47XG5cbiAgICAgIC8vIFJlc3RhcnQsIHRvIGZvcmNlIGNsaWVudCByZS1jcmVhdGlvbiwgYW5kIHdlYnNvY2tldCB0byBsb2dvdXRcbiAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXN0YXJ0KCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jbGVhckNhY2hlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2V0QXV0aEJhc2ljKGJhc2ljOiBzdHJpbmcpIHtcbiAgICBpZiAoYmFzaWMpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tncmFwaHFsXSBBcHBseSBiYXNpYyBhdXRoZW50aWNhdGlvbiB0byBoZWFkZXJzJyk7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25QYXJhbXMuYXV0aEJhc2ljID0gYmFzaWM7XG4gICAgfVxuICAgIC8vIENsZWFuIGF1dGggYmFzaWNcbiAgICBlbHNlIGlmICh0aGlzLmNvbm5lY3Rpb25QYXJhbXMuYXV0aEJhc2ljKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZ3JhcGhxbF0gUmVtb3ZlIGJhc2ljIGF1dGhlbnRpY2F0aW9uIGZyb20gaGVhZGVycycpO1xuICAgICAgZGVsZXRlIHRoaXMuY29ubmVjdGlvblBhcmFtcy5hdXRoQmFzaWM7XG5cbiAgICAgIC8vIFJlc3RhcnQsIHRvIGZvcmNlIGNsaWVudCByZS1jcmVhdGlvbiwgYW5kIHdlYnNvY2tldCB0byBsb2dvdXRcbiAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXN0YXJ0KCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jbGVhckNhY2hlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHRvIGFkZCBhIGZpZWxkIHJlc29sdmVyXG4gICAqICAoc2VlIGRvYzogaHR0cHM6Ly93d3cuYXBvbGxvZ3JhcGhxbC5jb20vZG9jcy9yZWFjdC9kYXRhL2xvY2FsLXN0YXRlLyNoYW5kbGluZy1jbGllbnQtZmllbGRzLXdpdGgtcmVzb2x2ZXJzKVxuICAgKlxuICAgKiBAcGFyYW0gcmVzb2x2ZXJzXG4gICAqL1xuICBhc3luYyBhZGRSZXNvbHZlcihyZXNvbHZlcnM6IFJlc29sdmVycyB8IFJlc29sdmVyc1tdKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICB0aGlzLmFwb2xsby5jbGllbnQuYWRkUmVzb2x2ZXJzKHJlc29sdmVycyk7XG4gIH1cblxuICBhc3luYyBxdWVyeTxULCBWID0gRW1wdHlPYmplY3Q+KG9wdHM6IHtcbiAgICBxdWVyeTogYW55O1xuICAgIHZhcmlhYmxlcz86IFY7XG4gICAgZXJyb3I/OiBTZXJ2aWNlRXJyb3I7XG4gICAgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTtcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgbGV0IHJlcztcbiAgICB0cnkge1xuICAgICAgcmVzID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnk8QXBvbGxvUXVlcnlSZXN1bHQ8VD4sIFY+KHtcbiAgICAgICAgcXVlcnk6IG9wdHMucXVlcnksXG4gICAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICAgIGZldGNoUG9saWN5OiBvcHRzLmZldGNoUG9saWN5IHx8ICh0aGlzLl9kZWZhdWx0RmV0Y2hQb2xpY3kgYXMgRmV0Y2hQb2xpY3kpIHx8IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXMgPSB0aGlzLnRvQXBvbGxvRXJyb3I8VD4oZXJyLCBvcHRzLmVycm9yKTtcbiAgICB9XG4gICAgaWYgKHJlcy5lcnJvcnMpIHtcbiAgICAgIHRocm93IHJlcy5lcnJvcnNbMF07XG4gICAgfVxuICAgIHJldHVybiByZXMuZGF0YTtcbiAgfVxuXG4gIHdhdGNoUXVlcnlSZWY8VCwgViA9IEVtcHR5T2JqZWN0PihvcHRzOiBXYXRjaFF1ZXJ5T3B0aW9uczxWPik6IFF1ZXJ5UmVmPFQsIFY+IHtcbiAgICByZXR1cm4gdGhpcy5hcG9sbG8ud2F0Y2hRdWVyeTxULCBWPih7XG4gICAgICBxdWVyeTogb3B0cy5xdWVyeSxcbiAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICBmZXRjaFBvbGljeTogb3B0cy5mZXRjaFBvbGljeSB8fCAodGhpcy5fZGVmYXVsdEZldGNoUG9saWN5IGFzIEZldGNoUG9saWN5KSB8fCB1bmRlZmluZWQsXG4gICAgICBub3RpZnlPbk5ldHdvcmtTdGF0dXNDaGFuZ2U6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHF1ZXJ5UmVmVmFsdWVzQ2hhbmdlczxULCBWID0gRW1wdHlPYmplY3Q+KHF1ZXJ5UmVmOiBRdWVyeVJlZjxULCBWPiwgb3B0czogV2F0Y2hRdWVyeU9wdGlvbnM8Vj4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gcXVlcnlSZWZcbiAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMub25BcG9sbG9FcnJvcjxUPihlcnJvciwgb3B0cy5lcnJvcikpLFxuICAgICAgICBmaWx0ZXIodmFsdWUgPT4gdmFsdWUubmV0d29ya1N0YXR1cyA9PT0gTmV0d29ya1N0YXR1cy5yZWFkeSB8fCB2YWx1ZS5uZXR3b3JrU3RhdHVzID09PSBOZXR3b3JrU3RhdHVzLmVycm9yKSxcbiAgICAgICAgbWFwKCh7ZGF0YSwgZXJyb3JzfSkgPT4ge1xuICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yc1swXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgd2F0Y2hRdWVyeTxULCBWID0gRW1wdHlPYmplY3Q+KG9wdHM6IFdhdGNoUXVlcnlPcHRpb25zPFY+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc3QgcXVlcnlSZWY6IFF1ZXJ5UmVmPFQsIFY+ID0gdGhpcy53YXRjaFF1ZXJ5UmVmKG9wdHMpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5UmVmVmFsdWVzQ2hhbmdlcyhxdWVyeVJlZiwgb3B0cyk7XG4gIH1cblxuICBhc3luYyBtdXRhdGU8VCwgViA9IEVtcHR5T2JqZWN0PihvcHRzOiBNdXRhdGVRdWVyeU9wdGlvbnM8VCwgVj4pOiBQcm9taXNlPFQ+IHtcblxuICAgIC8vIElmIG9mZmxpbmUsIGNvbXB1dGUgYW4gb3B0aW1pc3RpYyByZXNwb25zZSBmb3IgdHJhY2tlZCBxdWVyaWVzXG4gICAgaWYgKChvcHRzLmZvcmNlT2ZmbGluZSB8fCB0aGlzLm5ldHdvcmsub2ZmbGluZSkgJiYgb3B0cy5vZmZsaW5lUmVzcG9uc2UpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5vZmZsaW5lUmVzcG9uc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3B0cy5jb250ZXh0ID0gb3B0cy5jb250ZXh0IHx8IHt9O1xuICAgICAgICBjb25zdCBvcHRpbWlzdGljUmVzcG9uc2VGbiA9IChvcHRzLm9mZmxpbmVSZXNwb25zZSBhcyAoKGNvbnRleHQ6IGFueSkgPT4gUHJvbWlzZTxUPikpO1xuICAgICAgICBvcHRzLm9wdGltaXN0aWNSZXNwb25zZSA9IGF3YWl0IG9wdGltaXN0aWNSZXNwb25zZUZuKG9wdHMuY29udGV4dCk7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2dyYXBocWxdIFtvZmZsaW5lXSBVc2luZyBhbiBvcHRpbWlzdGljIHJlc3BvbnNlOiAnLCBvcHRzLm9wdGltaXN0aWNSZXNwb25zZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgb3B0cy5vcHRpbWlzdGljUmVzcG9uc2UgPSBvcHRzLm9mZmxpbmVSZXNwb25zZSBhcyBUO1xuICAgICAgfVxuICAgICAgaWYgKG9wdHMuZm9yY2VPZmZsaW5lKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHtkYXRhOiBvcHRzLm9wdGltaXN0aWNSZXNwb25zZX07XG4gICAgICAgIGlmIChvcHRzLnVwZGF0ZSkge1xuICAgICAgICAgIG9wdHMudXBkYXRlKHRoaXMuYXBvbGxvLmNsaWVudC5jYWNoZSwgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmRhdGE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5hcG9sbG8ubXV0YXRlPEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+LCBWPih7XG4gICAgICBtdXRhdGlvbjogb3B0cy5tdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICBjb250ZXh0OiBvcHRzLmNvbnRleHQsXG4gICAgICBvcHRpbWlzdGljUmVzcG9uc2U6IG9wdHMub3B0aW1pc3RpY1Jlc3BvbnNlIGFzIGFueSxcbiAgICAgIHVwZGF0ZTogb3B0cy51cGRhdGUgYXMgYW55XG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMub25BcG9sbG9FcnJvcjxUPihlcnJvciwgb3B0cy5lcnJvcikpLFxuICAgICAgICBmaXJzdCgpLFxuICAgICAgICAvLyBUbyBkZWJ1ZywgaWYgbmVlZDpcbiAgICAgICAgLy90YXAoKHJlcykgPT4gKCFyZXMpICYmIGNvbnNvbGUuZXJyb3IoJ1tncmFwaHFsXSBVbmtub3duIGVycm9yIGR1cmluZyBtdXRhdGlvbi4gQ2hlY2sgZXJyb3JzIGluIGNvbnNvbGUgKG1heSBiZSBhbiBpbnZhbGlkIGdlbmVyYXRlZCBjYWNoZSBpZCA/KScpKVxuICAgICAgKS50b1Byb21pc2UoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMuZXJyb3JzKSkge1xuICAgICAgdGhyb3cgcmVzLmVycm9yc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcy5kYXRhIGFzIFQ7XG4gIH1cblxuICBzdWJzY3JpYmU8VCwgViA9IEVtcHR5T2JqZWN0PihvcHRzOiB7XG4gICAgcXVlcnk6IGFueTtcbiAgICB2YXJpYWJsZXM6IFY7XG4gICAgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTtcbiAgICBlcnJvclBvbGljeT86IEVycm9yUG9saWN5O1xuICAgIGVycm9yPzogU2VydmljZUVycm9yO1xuICB9LCBleHRyYT86IEV4dHJhU3Vic2NyaXB0aW9uT3B0aW9ucyk6IE9ic2VydmFibGU8VD4ge1xuXG4gICAgcmV0dXJuIHRoaXMuYXBvbGxvLnN1YnNjcmliZTxUPih7XG4gICAgICBxdWVyeTogb3B0cy5xdWVyeSxcbiAgICAgIGZldGNoUG9saWN5OiBvcHRzICYmIG9wdHMuZmV0Y2hQb2xpY3kgfHwgJ25ldHdvcmstb25seScsXG4gICAgICBlcnJvclBvbGljeTogb3B0cyAmJiBvcHRzLmVycm9yUG9saWN5IHx8IHVuZGVmaW5lZCxcbiAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXNcbiAgICB9LCB7XG4gICAgICB1c2Vab25lOiB0cnVlLFxuICAgICAgLi4uZXh0cmFcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5vbkFwb2xsb0Vycm9yPFQ+KGVycm9yLCBvcHRzLmVycm9yKSksXG4gICAgICAgIG1hcCgoe2RhdGEsIGVycm9yc30pID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcnNbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGluc2VydEludG9RdWVyeUNhY2hlPFQsIFYgPSBFbXB0eU9iamVjdD4oY2FjaGU6IEFwb2xsb0NhY2hlPGFueT4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0czogQ2FjaGUuUmVhZFF1ZXJ5T3B0aW9uczxWLCBhbnk+ICYge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlGaWVsZE5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRmllbGROYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRGbj86IChkMTogVCwgZDI6IFQpID0+IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU/OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkge1xuXG4gICAgY2FjaGUgPSBjYWNoZSB8fCB0aGlzLmFwb2xsby5jbGllbnQuY2FjaGU7XG4gICAgb3B0cy5hcnJheUZpZWxkTmFtZSA9IG9wdHMuYXJyYXlGaWVsZE5hbWUgfHwgJ2RhdGEnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBkYXRhID0gY2FjaGUucmVhZFF1ZXJ5PGFueSwgVj4oe3F1ZXJ5OiBvcHRzLnF1ZXJ5LCB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzfSk7XG5cbiAgICAgIGlmIChkYXRhICYmIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0pIHtcbiAgICAgICAgLy8gQ29weSBiZWNhdXNlIGltbXV0YWJsZVxuICAgICAgICBkYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICAgICAgLy8gQXBwZW5kIHRvIHJlc3VsdCBhcnJheVxuICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdID0gWyAuLi5kYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLCB7Li4ub3B0cy5kYXRhfV07XG5cbiAgICAgICAgLy8gUmVzb3J0LCBpZiBuZWVkXG4gICAgICAgIGlmIChvcHRzLnNvcnRGbikge1xuICAgICAgICAgIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc29ydChvcHRzLnNvcnRGbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeGNsdWRlIGlmIGV4Y2VlZCBtYXggc2l6ZVxuICAgICAgICBjb25zdCBzaXplID0gdG9OdW1iZXIob3B0cy52YXJpYWJsZXMgJiYgb3B0cy52YXJpYWJsZXNbJ3NpemUnXSwgLTEpO1xuICAgICAgICBpZiAoc2l6ZSA+IDAgJiYgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5sZW5ndGggPiBzaXplKSB7XG4gICAgICAgICAgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5zcGxpY2Uoc2l6ZSwgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5sZW5ndGggLSBzaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluY3JlbWVudCB0b3RhbFxuICAgICAgICBpZiAoaXNOb3ROaWwob3B0cy50b3RhbEZpZWxkTmFtZSkpIHtcbiAgICAgICAgICBpZiAoaXNOb3ROaWwoZGF0YVtvcHRzLnRvdGFsRmllbGROYW1lXSkpIHtcbiAgICAgICAgICAgIGRhdGFbb3B0cy50b3RhbEZpZWxkTmFtZV0gKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMudG90YWxGaWVsZE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNhY2hlLndyaXRlUXVlcnkoe1xuICAgICAgICAgIHF1ZXJ5OiBvcHRzLnF1ZXJ5LFxuICAgICAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMuYXJyYXlGaWVsZE5hbWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gY29udGludWVcbiAgICAgIC8vIHJlYWQgaW4gY2FjaGUgaXMgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGEgcmVzdWx0LiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvcmVhY3QtYXBvbGxvL2lzc3Vlcy8xNzc2I2lzc3VlY29tbWVudC0zNzIyMzc5NDBcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5lcnJvcignW2dyYXBocWxdIEVycm9yIHdoaWxlIHVwZGF0aW5nIGNhY2hlOiAnLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGFkZE1hbnlUb1F1ZXJ5Q2FjaGU8VCA9IGFueSwgViA9IEVtcHR5T2JqZWN0PihjYWNoZTogQXBvbGxvQ2FjaGU8YW55PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM6IENhY2hlLlJlYWRRdWVyeU9wdGlvbnM8ViwgYW55PiAmIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlGaWVsZE5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxGaWVsZE5hbWU/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IFRbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxzRm4/OiAoZDE6IFQsIGQyOiBUKSA9PiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0Rm4/OiAoZDE6IFQsIGQyOiBUKSA9PiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB7XG5cbiAgICBpZiAoIW9wdHMuZGF0YSB8fCAhb3B0cy5kYXRhLmxlbmd0aCkgcmV0dXJuOyAvLyBub3RoaW5nIHRvIHByb2Nlc3NcblxuICAgIGNhY2hlID0gY2FjaGUgfHwgdGhpcy5hcG9sbG8uY2xpZW50LmNhY2hlO1xuICAgIG9wdHMuYXJyYXlGaWVsZE5hbWUgPSBvcHRzLmFycmF5RmllbGROYW1lIHx8ICdkYXRhJztcblxuICAgIHRyeSB7XG4gICAgICBsZXQgZGF0YSA9IGNhY2hlLnJlYWRRdWVyeTxhbnksIFY+KHtxdWVyeTogb3B0cy5xdWVyeSwgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlc30pO1xuXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdKSB7XG4gICAgICAgIC8vIENvcHkgYmVjYXVzZSBpbW11dGFibGVcbiAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSB9O1xuXG4gICAgICAgIC8vIEtlZXAgb25seSBub3QgZXhpc3RpbmcgcmVzXG4gICAgICAgIGNvbnN0IGVxdWFsc0ZuID0gb3B0cy5lcXVhbHNGbiB8fCAoKGQxLCBkMikgPT4gZDFbJ2lkJ10gPT09IGQyWydpZCddICYmIGQxWydlbnRpdHlOYW1lJ10gPT09IGQyWydlbnRpdHlOYW1lJ10pO1xuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IG9wdHMuZGF0YS5maWx0ZXIoaW5wdXRWYWx1ZSA9PiBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLmZpbmRJbmRleChleGlzdGluZ1ZhbHVlID0+IGVxdWFsc0ZuKGlucHV0VmFsdWUsIGV4aXN0aW5nVmFsdWUpKSA9PT0gLTEpO1xuXG4gICAgICAgIGlmICghbmV3SXRlbXMubGVuZ3RoKSByZXR1cm47IC8vIE5vIG5ldyB2YWx1ZVxuXG4gICAgICAgIC8vIEFwcGVuZCB0byBhcnJheVxuICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdID0gWyAuLi5kYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLCAuLi5uZXdJdGVtc107XG5cbiAgICAgICAgLy8gUmVzb3J0LCBpZiBuZWVkXG4gICAgICAgIGlmIChvcHRzLnNvcnRGbikge1xuICAgICAgICAgIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc29ydChvcHRzLnNvcnRGbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeGNsdWRlIGlmIGV4Y2VlZCBtYXggc2l6ZVxuICAgICAgICBjb25zdCBzaXplID0gdG9OdW1iZXIob3B0cy52YXJpYWJsZXMgJiYgb3B0cy52YXJpYWJsZXNbJ3NpemUnXSwgLTEpO1xuICAgICAgICBpZiAoc2l6ZSA+IDAgJiYgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5sZW5ndGggPiBzaXplKSB7XG4gICAgICAgICAgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5zcGxpY2Uoc2l6ZSwgZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5sZW5ndGggLSBzaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluY3JlbWVudCB0aGUgdG90YWxcbiAgICAgICAgaWYgKGlzTm90TmlsKG9wdHMudG90YWxGaWVsZE5hbWUpKSB7XG4gICAgICAgICAgaWYgKGlzTm90TmlsKGRhdGFbb3B0cy50b3RhbEZpZWxkTmFtZV0pKSB7XG4gICAgICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdICs9IG5ld0l0ZW1zLmxlbmd0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMudG90YWxGaWVsZE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdyaXRlIHRvIGNhY2hlXG4gICAgICAgIGNhY2hlLndyaXRlUXVlcnkoe1xuICAgICAgICAgIHF1ZXJ5OiBvcHRzLnF1ZXJ5LFxuICAgICAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMuYXJyYXlGaWVsZE5hbWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gY29udGludWVcbiAgICAgIC8vIHJlYWQgaW4gY2FjaGUgaXMgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGEgcmVzdWx0LiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvcmVhY3QtYXBvbGxvL2lzc3Vlcy8xNzc2I2lzc3VlY29tbWVudC0zNzIyMzc5NDBcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS53YXJuKCdbZ3JhcGhxbF0gRXJyb3Igd2hpbGUgdXBkYXRpbmcgY2FjaGU6ICcsIGVycik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBmcm9tIGNhY2hlLCBhbmQgcmV0dXJuIGlmIHJlbW92ZWQgb3Igbm90XG4gICAqXG4gICAqIEBwYXJhbSBjYWNoZVxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgcmVtb3ZlRnJvbUNhY2hlZFF1ZXJ5QnlJZDxWID0gRW1wdHlPYmplY3QsIElEID0gbnVtYmVyPihjYWNoZTogQXBvbGxvQ2FjaGU8YW55PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzOiBDYWNoZS5SZWFkUXVlcnlPcHRpb25zPFYsIGFueT4gJiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheUZpZWxkTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxGaWVsZE5hbWU/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHM6IElEOyAvLyBEbyBOT1QgdXNlICdpZCcsIGFzIGFscmVhZHkgdXNlZCBieSB0aGUgQXBvbGxvIEFQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOiBib29sZWFuIHtcblxuICAgIGNhY2hlID0gY2FjaGUgfHwgdGhpcy5hcG9sbG8uY2xpZW50LmNhY2hlO1xuICAgIG9wdHMuYXJyYXlGaWVsZE5hbWUgPSBvcHRzLmFycmF5RmllbGROYW1lIHx8ICdkYXRhJztcblxuICAgIHRyeSB7XG4gICAgICBsZXQgZGF0YSA9IGNhY2hlLnJlYWRRdWVyeTxhbnksIFY+KHtxdWVyeTogb3B0cy5xdWVyeSwgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlc30pO1xuXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdKSB7XG4gICAgICAgIC8vIENvcHkgYmVjYXVzZSBpbW11dGFibGVcbiAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSB9O1xuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtWydpZCddID09PSBvcHRzLmlkcyk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiBmYWxzZTsgLy8gU2tpcCAobm90aGluZyByZW1vdmVkKVxuXG4gICAgICAgIC8vIENvcHksIHRoZW4gcmVtb3ZlIGRlbGV0ZWQgaXRlbVxuICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdID0gZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5zbGljZSgpO1xuICAgICAgICBjb25zdCBkZWxldGVkSXRlbSA9IGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc3BsaWNlKGluZGV4LCAxKVswXTtcbiAgICAgICAgY2FjaGUuZXZpY3Qoe2lkOiBjYWNoZS5pZGVudGlmeShkZWxldGVkSXRlbSl9KTtcblxuICAgICAgICAvLyBEZWNyZW1lbnQgdGhlIHRvdGFsXG4gICAgICAgIGlmIChpc05vdE5pbChvcHRzLnRvdGFsRmllbGROYW1lKSkge1xuICAgICAgICAgIGlmIChpc05vdE5pbChkYXRhW29wdHMudG90YWxGaWVsZE5hbWVdKSkge1xuICAgICAgICAgICAgZGF0YVtvcHRzLnRvdGFsRmllbGROYW1lXSAtPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW2dyYXBocWxdIFVuYWJsZSB0byB1cGRhdGUgY2FjaGVkIHF1ZXJ5LiBVbmtub3duIHJlc3VsdCBwYXJ0OiAnICsgb3B0cy50b3RhbEZpZWxkTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gV3JpdGUgdG8gY2FjaGVcbiAgICAgICAgY2FjaGUud3JpdGVRdWVyeSh7XG4gICAgICAgICAgcXVlcnk6IG9wdHMucXVlcnksXG4gICAgICAgICAgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlcyxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMuYXJyYXlGaWVsZE5hbWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBjb250aW51ZVxuICAgICAgLy8gcmVhZCBpbiBjYWNoZSBpcyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYSByZXN1bHQuIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9yZWFjdC1hcG9sbG8vaXNzdWVzLzE3NzYjaXNzdWVjb21tZW50LTM3MjIzNzk0MFxuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBFcnJvciB3aGlsZSByZW1vdmluZyBmcm9tIGNhY2hlOiAnLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgaWRzIGZyb20gY2FjaGUsIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyByZW1vdmVkXG4gICAqXG4gICAqIEBwYXJhbSBjYWNoZVxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgcmVtb3ZlRnJvbUNhY2hlZFF1ZXJ5QnlJZHM8ViA9IEVtcHR5T2JqZWN0LCBJRCA9IG51bWJlcj4oY2FjaGU6IEFwb2xsb0NhY2hlPGFueT4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM6IENhY2hlLlJlYWRRdWVyeU9wdGlvbnM8ViwgYW55PiAmIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheUZpZWxkTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRmllbGROYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkczogSURbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk6IG51bWJlciB7XG5cbiAgICBjYWNoZSA9IGNhY2hlIHx8IHRoaXMuYXBvbGxvLmNsaWVudC5jYWNoZTtcbiAgICBvcHRzLmFycmF5RmllbGROYW1lID0gb3B0cy5hcnJheUZpZWxkTmFtZSB8fCAnZGF0YSc7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IGRhdGEgPSBjYWNoZS5yZWFkUXVlcnkob3B0cyk7XG5cbiAgICAgIGlmIChkYXRhICYmIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0pIHtcbiAgICAgICAgLy8gQ29weSBiZWNhdXNlIGltbXV0YWJsZVxuICAgICAgICBkYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICAgICAgY29uc3QgZGVsZXRlZEluZGV4ZXMgPSBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLnJlZHVjZSgocmVzLCBpdGVtLCBpbmRleCkgPT4gb3B0cy5pZHMuaW5jbHVkZXMoaXRlbVsnaWQnXSkgPyByZXMuY29uY2F0KGluZGV4KSA6IHJlcywgW10pO1xuXG4gICAgICAgIGlmIChkZWxldGVkSW5kZXhlcy5sZW5ndGggPD0gMCkgcmV0dXJuIDA7IC8vIFNraXAgKG5vdGhpbmcgcmVtb3ZlZClcblxuICAgICAgICAvLyBRdWVyeSBoYXMgTk8gdG90YWxcbiAgICAgICAgaWYgKGlzTmlsKG9wdHMudG90YWxGaWVsZE5hbWUpKSB7XG5cbiAgICAgICAgICAvLyBFdmljdCBlYWNoIG9iamVjdFxuICAgICAgICAgIGRlbGV0ZWRJbmRleGVzXG4gICAgICAgICAgICAubWFwKGluZGV4ID0+IGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV1baW5kZXhdKVxuICAgICAgICAgICAgLm1hcChpdGVtID0+IGNhY2hlLmlkZW50aWZ5KGl0ZW0pKVxuICAgICAgICAgICAgLmZvckVhY2goaWQgPT4gY2FjaGUuZXZpY3Qoe2lkfSkpO1xuXG4gICAgICAgIH1cbiAgICAgICAgLy8gUXVlcnkgaGFzIGEgdG90YWxcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gQ29weSB0aGUgYXJyYXlcbiAgICAgICAgICBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdID0gZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5zbGljZSgpO1xuXG4gICAgICAgICAgLy8gcmVtb3ZlIGZyb20gYXJyYXksIHRoZW4gZXZpY3RcbiAgICAgICAgICBkZWxldGVkSW5kZXhlc1xuICAgICAgICAgICAgLy8gUmV2ZXJzZTogdG8ga2VlcCB2YWxpZCBpbmRleFxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gdGhlIGFycmF5XG4gICAgICAgICAgICAubWFwKGluZGV4ID0+IGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0uc3BsaWNlKGluZGV4LCAxKVswXSlcbiAgICAgICAgICAgIC8vIEV2aWN0IGZyb20gY2FjaGVcbiAgICAgICAgICAgIC5tYXAoaXRlbSA9PiBjYWNoZS5pZGVudGlmeShpdGVtKSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGlkID0+IGNhY2hlLmV2aWN0KHtpZH0pKTtcblxuICAgICAgICAgIGlmIChpc05vdE5pbChkYXRhW29wdHMudG90YWxGaWVsZE5hbWVdKSkge1xuICAgICAgICAgICAgZGF0YVtvcHRzLnRvdGFsRmllbGROYW1lXSAtPSBkZWxldGVkSW5kZXhlcy5sZW5ndGg7IC8vIFJlbW92ZSBkZWxldGlvbiBjb3VudFxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW2dyYXBocWxdIFVuYWJsZSB0byB1cGRhdGUgdGhlIHRvdGFsIGluIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMudG90YWxGaWVsZE5hbWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhY2hlLndyaXRlUXVlcnkoe1xuICAgICAgICAgICAgcXVlcnk6IG9wdHMucXVlcnksXG4gICAgICAgICAgICB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIGRlbGV0ZWRJbmRleGVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW2dyYXBocWxdIFVuYWJsZSB0byB1cGRhdGUgY2FjaGVkIHF1ZXJ5LiBVbmtub3duIHJlc3VsdCBwYXJ0OiAnICsgb3B0cy5hcnJheUZpZWxkTmFtZSk7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gY29udGludWVcbiAgICAgIC8vIHJlYWQgaW4gY2FjaGUgaXMgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGEgcmVzdWx0LiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvcmVhY3QtYXBvbGxvL2lzc3Vlcy8xNzc2I2lzc3VlY29tbWVudC0zNzIyMzc5NDBcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS53YXJuKCdbZ3JhcGhxbF0gRXJyb3Igd2hpbGUgcmVtb3ZpbmcgZnJvbSBjYWNoZTogJywgZXJyKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRvUXVlcnlDYWNoZTxUIGV4dGVuZHMgSUVudGl0eTxhbnk+LFxuICAgIFYgPSBFbXB0eU9iamVjdD4oY2FjaGU6IEFwb2xsb0NhY2hlPGFueT4sXG4gICAgICAgICAgICAgICAgICAgICBvcHRzOiBDYWNoZS5SZWFkUXVlcnlPcHRpb25zPFYsIGFueT4gJiB7XG4gICAgICAgICAgICAgICAgICAgICAgIGFycmF5RmllbGROYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRmllbGROYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBUO1xuICAgICAgICAgICAgICAgICAgICAgICBlcXVhbHNGbj86IChkMTogVCwgZDI6IFQpID0+IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICB9KSB7XG4gICAgY2FjaGUgPSBjYWNoZSB8fCB0aGlzLmFwb2xsby5jbGllbnQuY2FjaGU7XG4gICAgb3B0cy5hcnJheUZpZWxkTmFtZSA9IG9wdHMuYXJyYXlGaWVsZE5hbWUgfHwgJ2RhdGEnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBkYXRhOiBhbnkgPSBjYWNoZS5yZWFkUXVlcnkob3B0cyk7XG5cbiAgICAgIGlmIChkYXRhICYmIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0pIHtcbiAgICAgICAgLy8gQ29weSBiZWNhdXNlIGltbXV0YWJsZVxuICAgICAgICBkYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICAgICAgY29uc3QgZXF1YWxzRm4gPSBvcHRzLmVxdWFsc0ZuIHx8ICgoZDEsIGQyKSA9PiBFbnRpdHlVdGlscy5lcXVhbHMoZDEsIGQyLCAnaWQnKSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGlmIGV4aXN0cywgb3IgaW5zZXJ0XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVtvcHRzLmFycmF5RmllbGROYW1lXS5maW5kSW5kZXgodiA9PiBlcXVhbHNGbihvcHRzLmRhdGEsIHYpKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0gPSBkYXRhW29wdHMuYXJyYXlGaWVsZE5hbWVdLnNsaWNlKCkuc3BsaWNlKGluZGV4LCAxLCBvcHRzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0gPSBbIC4uLmRhdGFbb3B0cy5hcnJheUZpZWxkTmFtZV0sIG9wdHMuZGF0YV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbmNyZW1lbnQgdG90YWwgKGlmIGNoYW5nZWQpXG4gICAgICAgIGlmIChpc05vdE5pbChvcHRzLnRvdGFsRmllbGROYW1lKSAmJiBpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICBpZiAoaXNOb3ROaWwoZGF0YVtvcHRzLnRvdGFsRmllbGROYW1lXSkpIHtcbiAgICAgICAgICAgIGRhdGFbb3B0cy50b3RhbEZpZWxkTmFtZV0gKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBxdWVyeS4gVW5rbm93biByZXN1bHQgcGFydDogJyArIG9wdHMudG90YWxGaWVsZE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNhY2hlLndyaXRlUXVlcnkoe1xuICAgICAgICAgIHF1ZXJ5OiBvcHRzLnF1ZXJ5LFxuICAgICAgICAgIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuOyAvLyBPSzogc3RvcCBoZXJlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBjb250aW51ZVxuICAgICAgLy8gcmVhZCBpbiBjYWNoZSBpcyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYSByZXN1bHQuIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9yZWFjdC1hcG9sbG8vaXNzdWVzLzE3NzYjaXNzdWVjb21tZW50LTM3MjIzNzk0MFxuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLndhcm4oJ1tncmFwaHFsXSBFcnJvciB3aGlsZSB1cGRhdGluZyBjYWNoZTogJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjbGVhckNhY2hlKGNsaWVudD86IEFwb2xsb0NsaWVudDxhbnk+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY2xpZW50ID0gKGNsaWVudCB8fCB0aGlzLmNsaWVudCkgYXMgQXBvbGxvQ2xpZW50PGFueT47XG4gICAgaWYgKGNsaWVudCkge1xuICAgICAgY29uc29sZS5pbmZvKCdbZ3JhcGhxbF0gQ2xlYW5pbmcgY2FjaGUuLi4gJyk7XG4gICAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuXG4gICAgICAvLyBDbGVhcmluZyB0aGUgY2FjaGVcbiAgICAgIGF3YWl0IGNsaWVudC5jYWNoZS5yZXNldCgpO1xuXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtncmFwaHFsXSBDbGVhbmluZyBjYWNoZSBbT0tdIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyQ3VzdG9tRXJyb3IoZXJyb3I6IFByb3BlcnRpZXNNYXApIHtcbiAgICB0aGlzLmN1c3RvbUVycm9ycyA9IHsuLi50aGlzLmN1c3RvbUVycm9ycywgLi4uZXJyb3J9O1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8QXBvbGxvQ2xpZW50PGFueT4+IHtcblxuICAgIC8vIFdhaXQgbmV0d29yayBhbmQgc3RvcmFnZVxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuc3RvcmFnZS5yZWFkeSgpLFxuICAgICAgdGhpcy5uZXR3b3JrLnJlYWR5KClcbiAgICBdKTtcblxuICAgIGNvbnNvbGUuaW5mbygnW2dyYXBocWxdIFN0YXJ0aW5nIGdyYXBocWwuLi4nKTtcbiAgICBjb25zdCBtb2JpbGUgPSBpc01vYmlsZSh3aW5kb3cpO1xuICAgIGNvbnN0IGVuYWJsZVRyYWNrTXV0YXRpb25RdWVyaWVzID0gIW1vYmlsZTtcblxuICAgIGNvbnN0IHBlZXIgPSB0aGlzLm5ldHdvcmsucGVlcjtcbiAgICBpZiAoIXBlZXIpIHRocm93IEVycm9yKCdbZ3JhcGhxbF0gTWlzc2luZyBwZWVyLiBVbmFibGUgdG8gc3RhcnQgZ3JhcGhxbCBzZXJ2aWNlJyk7XG5cbiAgICBjb25zdCB1cmkgPSBwZWVyLnVybCArICcvZ3JhcGhxbCc7XG4gICAgY29uc3Qgd3NVcmwgPSB1cmkucmVwbGFjZSgvXmh0dHAocyk/Oi8sICd3cyQxOicpICsgJy93ZWJzb2NrZXQnO1xuICAgIGNvbnNvbGUuaW5mbygnW2dyYXBocWxdIEJhc2UgdXJpOiAnICsgdXJpKTtcbiAgICBjb25zb2xlLmluZm8oJ1tncmFwaHFsXSBTdWJzY3JpcHRpb24gdXJpOiAnICsgd3NVcmwpO1xuXG4gICAgdGhpcy5odHRwUGFyYW1zID0gdGhpcy5odHRwUGFyYW1zIHx8IHt9O1xuICAgIHRoaXMuaHR0cFBhcmFtcy51cmkgPSB1cmk7XG5cbiAgICB0aGlzLndzUGFyYW1zID0ge1xuICAgICAgLi4udGhpcy53c1BhcmFtcyxcbiAgICAgIGxhenk6IHRydWUsXG4gICAgICBjb25uZWN0aW9uUGFyYW1zOiB0aGlzLmNvbm5lY3Rpb25QYXJhbXMsXG4gICAgICB3ZWJTb2NrZXRJbXBsOiBBcHBXZWJTb2NrZXQsXG4gICAgICB1cmw6IHdzVXJsLFxuICAgICAgc2hvdWxkUmV0cnk6IChlcnJPckNsb3NlRXZlbnQpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbZ3JhcGhxbC1zZXJ2aWNlXSBbV1NdIFRyeWluZyB0byByZWNvbm5lY3QuLi4nLCBlcnJPckNsb3NlRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICByZXRyeUF0dGVtcHRzOiAxMFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgYSBzdG9yYWdlIGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBzdG9yYWdlOiBQZXJzaXN0ZW50U3RvcmFnZTxzdHJpbmc+ID0gbmV3IFN0b3JhZ2VTZXJ2aWNlV3JhcHBlcih0aGlzLnN0b3JhZ2UpO1xuXG4gICAgbGV0IGNsaWVudCA9IHRoaXMuYXBvbGxvLmNsaWVudDtcbiAgICBpZiAoIWNsaWVudCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2Fwb2xsb10gQ3JlYXRpbmcgR3JhcGhRTCBjbGllbnQuLi4nKTtcblxuICAgICAgLy8gV2Vic29ja2V0IGxpbmtcbiAgICAgIGNvbnN0IHdzTGluayA9IG5ldyBHcmFwaFFMV3NMaW5rKGNyZWF0ZUNsaWVudCh0aGlzLndzUGFyYW1zKSk7XG5cbiAgICAgIC8vIFJldHJ5IHdoZW4gZmFpbGVkIGxpbmtcbiAgICAgIGNvbnN0IHJldHJ5TGluayA9IG5ldyBSZXRyeUxpbmsoKTtcbiAgICAgIGNvbnN0IGF1dGhMaW5rID0gbmV3IEFwb2xsb0xpbmsoKG9wZXJhdGlvbiwgZm9yd2FyZCkgPT4ge1xuXG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblBhcmFtcy5hdXRoVG9rZW4pIHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uLnB1c2goYHRva2VuICR7dGhpcy5jb25uZWN0aW9uUGFyYW1zLmF1dGhUb2tlbn1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uUGFyYW1zLmF1dGhCYXNpYykge1xuICAgICAgICAgIGF1dGhvcml6YXRpb24ucHVzaChgQmFzaWMgJHt0aGlzLmNvbm5lY3Rpb25QYXJhbXMuYXV0aEJhc2ljfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgICAgIC5hcHBlbmQoJ0F1dGhvcml6YXRpb24nLCBhdXRob3JpemF0aW9uKTtcblxuICAgICAgICAvLyBVc2UgdGhlIHNldENvbnRleHQgbWV0aG9kIHRvIHNldCB0aGUgSFRUUCBoZWFkZXJzLlxuICAgICAgICBvcGVyYXRpb24uc2V0Q29udGV4dCh7XG4gICAgICAgICAgLi4ub3BlcmF0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICAuLi57aGVhZGVyc31cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ2FsbCB0aGUgbmV4dCBsaW5rIGluIHRoZSBtaWRkbGV3YXJlIGNoYWluLlxuICAgICAgICByZXR1cm4gZm9yd2FyZChvcGVyYXRpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEh0dHAgbGlua1xuICAgICAgY29uc3QgaHR0cExpbmsgPSB0aGlzLmh0dHBMaW5rLmNyZWF0ZSh0aGlzLmh0dHBQYXJhbXMpO1xuXG4gICAgICAvLyBDYWNoZVxuICAgICAgY29uc3QgY2FjaGUgPSBuZXcgSW5NZW1vcnlDYWNoZSh7XG4gICAgICAgIHR5cGVQb2xpY2llczogdGhpcy50eXBlUG9saWNpZXNcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgY2FjaGUgcGVyc2lzdGVuY2VcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnBlcnNpc3RDYWNoZSkge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbZ3JhcGhxbF0gU3RhcnRpbmcgcGVyc2lzdGVuY2UgY2FjaGUuLi4nKTtcbiAgICAgICAgYXdhaXQgcGVyc2lzdENhY2hlKHtcbiAgICAgICAgICBjYWNoZSxcbiAgICAgICAgICBzdG9yYWdlLFxuICAgICAgICAgIHRyaWdnZXI6IHRoaXMucGxhdGZvcm0uaXMoJ2FuZHJvaWQnKSA/ICdiYWNrZ3JvdW5kJyA6ICd3cml0ZScsXG4gICAgICAgICAgZGVib3VuY2U6IDEwMDAsXG4gICAgICAgICAgZGVidWc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGxldCBtdXRhdGlvbkxpbmtzOiBBcnJheTxBcG9sbG9MaW5rPjtcblxuICAgICAgLy8gQWRkIHF1ZXVlIHRvIHN0b3JlIHRyYWNrZWQgcXVlcmllcywgd2hlbiBvZmZsaW5lXG4gICAgICBpZiAoZW5hYmxlVHJhY2tNdXRhdGlvblF1ZXJpZXMpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXppbmdMaW5rID0gbmV3IFNlcmlhbGl6aW5nTGluaygpO1xuICAgICAgICBjb25zdCB0cmFja2VyTGluayA9IGNyZWF0ZVRyYWNrZXJMaW5rKHtcbiAgICAgICAgICBzdG9yYWdlLFxuICAgICAgICAgIG9uTmV0d29ya1N0YXR1c0NoYW5nZTogdGhpcy5fbmV0d29ya1N0YXR1c0NoYW5nZWQkLFxuICAgICAgICAgIGRlYm91bmNlOiAxMDAwLFxuICAgICAgICAgIGRlYnVnOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBDcmVhdGluZyBhIG11dGF0aW9uIHF1ZXVlXG4gICAgICAgIGNvbnN0IHF1ZXVlTGluayA9IG5ldyBRdWV1ZUxpbmsoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLl9uZXR3b3JrU3RhdHVzQ2hhbmdlZCRcbiAgICAgICAgICAuc3Vic2NyaWJlKHR5cGUgPT4ge1xuICAgICAgICAgICAgLy8gTmV0d29yayBpcyBvZmZsaW5lOiBzdGFydCBidWZmZXJpbmcgaW50byBxdWV1ZVxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdub25lJykge1xuICAgICAgICAgICAgICBjb25zb2xlLmluZm8oJ1tncmFwaHFsXSBvZmZsaW5lIG1vZGU6IGVuYWJsZSBtdXRhdGlvbnMgYnVmZmVyJyk7XG4gICAgICAgICAgICAgIHF1ZXVlTGluay5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTmV0d29yayBpcyBvbmxpbmVcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmluZm8oJ1tncmFwaHFsXSBvbmxpbmUgbW9kZTogZGlzYWJsZSBtdXRhdGlvbnMgYnVmZmVyJyk7XG4gICAgICAgICAgICAgIHF1ZXVlTGluay5vcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICBtdXRhdGlvbkxpbmtzID0gW1xuICAgICAgICAgIGxvZ2dlckxpbmssXG4gICAgICAgICAgcXVldWVMaW5rLFxuICAgICAgICAgIHRyYWNrZXJMaW5rLFxuICAgICAgICAgIHF1ZXVlTGluayxcbiAgICAgICAgICBzZXJpYWxpemluZ0xpbmssXG4gICAgICAgICAgcmV0cnlMaW5rLFxuICAgICAgICAgIGF1dGhMaW5rLFxuICAgICAgICAgIGh0dHBMaW5rXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbXV0YXRpb25MaW5rcyA9IFtcbiAgICAgICAgICByZXRyeUxpbmssXG4gICAgICAgICAgYXV0aExpbmssXG4gICAgICAgICAgaHR0cExpbmtcbiAgICAgICAgXTtcbiAgICAgIH1cblxuICAgICAgLy8gY3JlYXRlIEFwb2xsb1xuICAgICAgY2xpZW50ID0gbmV3IEFwb2xsb0NsaWVudCh7XG4gICAgICAgIGNhY2hlLFxuICAgICAgICBsaW5rOlxuICAgICAgICAgIEFwb2xsb0xpbmsuc3BsaXQoXG4gICAgICAgICAgICAvLyBIYW5kbGUgbXV0YXRpb25zXG4gICAgICAgICAgICBpc011dGF0aW9uT3BlcmF0aW9uLFxuICAgICAgICAgICAgQXBvbGxvTGluay5mcm9tKG11dGF0aW9uTGlua3MpLFxuXG4gICAgICAgICAgICBBcG9sbG9MaW5rLnNwbGl0KFxuICAgICAgICAgICAgICAvLyBIYW5kbGUgc3Vic2NyaXB0aW9uc1xuICAgICAgICAgICAgICBpc1N1YnNjcmlwdGlvbk9wZXJhdGlvbixcbiAgICAgICAgICAgICAgd3NMaW5rLFxuXG4gICAgICAgICAgICAgIC8vIEhhbmRsZSBxdWVyaWVzXG4gICAgICAgICAgICAgIEFwb2xsb0xpbmsuZnJvbShbXG4gICAgICAgICAgICAgICAgcmV0cnlMaW5rLFxuICAgICAgICAgICAgICAgIGF1dGhMaW5rLFxuICAgICAgICAgICAgICAgIGh0dHBMaW5rXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgY29ubmVjdFRvRGV2VG9vbHM6ICF0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb25cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFwb2xsby5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuXG4gICAgLy8gRW5hYmxlIHRyYWNrZWQgcXVlcmllcyBwZXJzaXN0ZW5jZVxuICAgIGlmIChlbmFibGVUcmFja011dGF0aW9uUXVlcmllcyAmJiB0aGlzLmVudmlyb25tZW50LnBlcnNpc3RDYWNoZSkge1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCByZXN0b3JlVHJhY2tlZFF1ZXJpZXMoe1xuICAgICAgICAgIGFwb2xsb0NsaWVudDogY2xpZW50LFxuICAgICAgICAgIHN0b3JhZ2UsXG4gICAgICAgICAgZGVidWc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW2dyYXBocWxdIEZhaWxlZCB0byByZXN0b3JlIHRyYWNrZWQgcXVlcmllcyBmcm9tIHN0b3JhZ2U6ICcgKyAoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVyciksIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGlzdGVuIGZvciBuZXR3b3JrIHJlc3RhcnRcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5uZXR3b3JrLm9uKCdzdGFydCcsICgpID0+IHRoaXMucmVzdGFydCgpKVxuICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIGNsZWFyIGNhY2hlIHJlcXVlc3QsIGZyb20gbmV0d29ya1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm5ldHdvcmsub24oJ3Jlc2V0Q2FjaGUnLCAoKSA9PiB0aGlzLmNsZWFyQ2FjaGUoKSlcbiAgICApO1xuXG4gICAgY29uc29sZS5pbmZvKCdbZ3JhcGhxbF0gU3RhcnRpbmcgZ3JhcGhxbCBbT0tdJyk7XG4gICAgcmV0dXJuIGNsaWVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RvcCgpIHtcbiAgICBjb25zb2xlLmluZm8oJ1tncmFwaHFsXSBTdG9wcGluZyBncmFwaHFsIHNlcnZpY2UuLi4nKTtcbiAgICBhd2FpdCB0aGlzLnJlc2V0Q2xpZW50KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVzZXRDbGllbnQoY2xpZW50PzogQXBvbGxvQ2xpZW50PGFueT4pIHtcbiAgICBjbGllbnQgPSAoY2xpZW50IHx8IHRoaXMuYXBvbGxvLmNsaWVudCkgYXMgQXBvbGxvQ2xpZW50PGFueT47XG4gICAgaWYgKCFjbGllbnQpIHJldHVybjtcblxuICAgIGNvbnNvbGUuaW5mbygnW2dyYXBocWxdIFJlc2V0dGluZyBBcG9sbG8gY2xpZW50Li4uJyk7XG4gICAgY2xpZW50LnN0b3AoKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBjbGllbnQuY2xlYXJTdG9yZSgpLFxuICAgICAgdGhpcy5jbGVhckNhY2hlKGNsaWVudClcbiAgICBdKTtcbiAgfVxuXG4gIHByaXZhdGUgb25BcG9sbG9FcnJvcjxUPihlcnI6IGFueSwgZGVmYXVsdEVycm9yPzogYW55KTogT2JzZXJ2YWJsZTxBcG9sbG9RdWVyeVJlc3VsdDxUPj4ge1xuICAgIHJldHVybiBvZih0aGlzLnRvQXBvbGxvRXJyb3I8VD4oZXJyLCBkZWZhdWx0RXJyb3IpKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9BcG9sbG9FcnJvcjxUPihlcnI6IGFueSwgZGVmYXVsdEVycm9yPzogYW55KTogQXBvbGxvUXVlcnlSZXN1bHQ8VD4ge1xuICAgIGxldCBlcnJvciA9XG4gICAgICAvLyBJZiBuZXR3b3JrIGVycm9yOiB0cnkgdG8gY29udmVydCB0byBBcHAgKHJlYWQgYXMgSlNPTiksIG9yIGNyZWF0ZSBhbiBVTktOT1dOX05FVFdPUktfRVJST1JcbiAgICAgIChlcnIubmV0d29ya0Vycm9yICYmIChcbiAgICAgICAgICAoZXJyLm5ldHdvcmtFcnJvci5lcnJvciAmJiB0aGlzLnRvQXBwRXJyb3IoZXJyLm5ldHdvcmtFcnJvci5lcnJvcikpXG4gICAgICAgICAgfHwgdGhpcy50b0FwcEVycm9yKGVyci5uZXR3b3JrRXJyb3IpXG4gICAgICAgICAgfHwgKGVyci5uZXR3b3JrRXJyb3IuZXJyb3IgJiYgdGhpcy5jcmVhdGVBcHBFcnJvckJ5Q29kZShlcnIubmV0d29ya0Vycm9yLmVycm9yLnN0YXR1cykpXG4gICAgICAgICAgfHwgdGhpcy5jcmVhdGVBcHBFcnJvckJ5Q29kZShFcnJvckNvZGVzLlVOS05PV05fTkVUV09SS19FUlJPUilcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLy8gSWYgZ3JhcGhRTDogdHJ5IHRvIGNvbnZlcnQgdGhlIGZpcnN0IGVycm9yIGZvdW5kXG4gICAgICB8fCAoZXJyLmdyYXBoUUxFcnJvcnMgJiYgZXJyLmdyYXBoUUxFcnJvcnMubGVuZ3RoICYmIHRoaXMudG9BcHBFcnJvcihlcnIuZ3JhcGhRTEVycm9yc1swXSkpXG4gICAgICB8fCB0aGlzLnRvQXBwRXJyb3IoZXJyKVxuICAgICAgfHwgdGhpcy50b0FwcEVycm9yKGVyci5vcmlnaW5hbEVycm9yKVxuICAgICAgfHwgKGVyci5ncmFwaFFMRXJyb3JzICYmIGVyci5ncmFwaFFMRXJyb3JzWzBdKVxuICAgICAgfHwgZXJyO1xuICAgIGNvbnNvbGUuZXJyb3IoJ1tncmFwaHFsXSAnICsgKGVycm9yICYmIGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpLCBlcnJvci5zdGFjayB8fCAnJyk7XG4gICAgaWYgKGVycm9yICYmIGVycm9yLmNvZGUgPT09IEVycm9yQ29kZXMuVU5LTk9XTl9ORVRXT1JLX0VSUk9SICYmIGVyci5uZXR3b3JrRXJyb3IgJiYgZXJyLm5ldHdvcmtFcnJvci5tZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbZ3JhcGhxbF0gb3JpZ2luYWwgZXJyb3I6ICcgKyBlcnIubmV0d29ya0Vycm9yLm1lc3NhZ2UpO1xuICAgICAgdGhpcy5vbk5ldHdvcmtFcnJvci5uZXh0KGVycm9yKTtcbiAgICB9XG4gICAgaWYgKCghZXJyb3IgfHwgIWVycm9yLmNvZGUpICYmIGRlZmF1bHRFcnJvcikge1xuICAgICAgZXJyb3IgPSB7Li4uZGVmYXVsdEVycm9yLCBkZXRhaWxzOiBlcnJvciwgc3RhY2s6IGVyci5zdGFja307XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBudWxsLFxuICAgICAgZXJyb3JzOiBbZXJyb3JdLFxuICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICBuZXR3b3JrU3RhdHVzOiBOZXR3b3JrU3RhdHVzLmVycm9yXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQXBwRXJyb3JCeUNvZGUoZXJyb3JDb2RlOiBudW1iZXIpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmdldEkxOG5FcnJvck1lc3NhZ2VCeUNvZGUoZXJyb3JDb2RlKTtcbiAgICBpZiAobWVzc2FnZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZTogZXJyb3JDb2RlLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLmdldEkxOG5FcnJvck1lc3NhZ2VCeUNvZGUoZXJyb3JDb2RlKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0STE4bkVycm9yTWVzc2FnZUJ5Q29kZShlcnJvckNvZGU6IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cbiAgICAvLyBsb29rIGluIHJlZ2lzdGVyZWQgZXJyb3IgY29kZXNcbiAgICBjb25zdCBjdXN0b21FcnJvck1lc3NhZ2UgPSB0aGlzLmN1c3RvbUVycm9yc1tlcnJvckNvZGVdO1xuICAgIGlmIChjdXN0b21FcnJvck1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiBjdXN0b21FcnJvck1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCwgc3dpdGNoIG9uIGVycm9yIGNvZGVcbiAgICBzd2l0Y2ggKGVycm9yQ29kZSkge1xuICAgICAgY2FzZSBTZXJ2ZXJFcnJvckNvZGVzLlVOQVVUSE9SSVpFRDpcbiAgICAgICAgcmV0dXJuICdFUlJPUi5VTkFVVEhPUklaRUQnO1xuICAgICAgY2FzZSBTZXJ2ZXJFcnJvckNvZGVzLkZPUkJJRERFTjpcbiAgICAgICAgcmV0dXJuICdFUlJPUi5GT1JCSURERU4nO1xuICAgICAgY2FzZSBFcnJvckNvZGVzLlVOS05PV05fTkVUV09SS19FUlJPUjpcbiAgICAgICAgcmV0dXJuICdFUlJPUi5VTktOT1dOX05FVFdPUktfRVJST1InO1xuICAgICAgY2FzZSBTZXJ2ZXJFcnJvckNvZGVzLkJBRF9VUERBVEVfREFURTpcbiAgICAgICAgcmV0dXJuICdFUlJPUi5CQURfVVBEQVRFX0RBVEUnO1xuICAgICAgY2FzZSBTZXJ2ZXJFcnJvckNvZGVzLkRBVEFfTE9DS0VEOlxuICAgICAgICByZXR1cm4gJ0VSUk9SLkRBVEFfTE9DS0VEJztcbiAgICAgIGNhc2UgU2VydmVyRXJyb3JDb2Rlcy5CQURfQVBQX1ZFUlNJT046XG4gICAgICAgIHJldHVybiAnRVJST1IuQkFEX0FQUF9WRVJTSU9OJztcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0FwcEVycm9yKGVycjogYW55KTogYW55IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgZXJyb3IgPSBlcnI7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnI7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLnRyaW0oKS5pbmRleE9mKCd7XCJjb2RlXCI6JykgPT09IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVycm9yID0gSlNPTi5wYXJzZShtZXNzYWdlXG4gICAgICAgICAgLy8gUmVtb3ZlIHNwZWNpYWwgY2hhcmFjdGVycyBiZWZvcmUgcGFyc2luZyAoZS5nLiBTUUwgZXJyb3JzIGZyb20gYW4gT3JhY2xlIGRhdGFiYXNlKVxuICAgICAgICAgIC5yZXBsYWNlKCdcXG4nLCAnICcpXG4gICAgICAgICAgLnJlcGxhY2UoJ1xccicsICcnKSk7XG4gICAgICB9XG4gICAgICBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdVbmFibGUgdG8gcGFyc2UgZXJyb3IgYXMgSlNPTjogJywgcGFyc2VFcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlcnJvciAmJiBlcnJvci5jb2RlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVBcHBFcnJvckJ5Q29kZShlcnJvci5jb2RlKSB8fCBlcnJvciAmJiBlcnJvci5tZXNzYWdlIHx8IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -4,6 +4,7 @@ export const SocialErrorCodes = {
|
|
|
4
4
|
COUNT_USER_EVENT_ERROR: 50002,
|
|
5
5
|
SEND_MESSAGE_ERROR: 50003,
|
|
6
6
|
SUBSCRIBE_USER_EVENTS_ERROR: 50005,
|
|
7
|
-
SUBSCRIBE_JOB_PROGRESSION_ERROR: 50010
|
|
7
|
+
SUBSCRIBE_JOB_PROGRESSION_ERROR: 50010,
|
|
8
|
+
LOAD_JOB_PROGRESSIONS_ERROR: 50011
|
|
8
9
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29jaWFsLmVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc29jaWFsL3NvY2lhbC5lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7SUFDOUIsc0JBQXNCLEVBQUUsS0FBSztJQUM3QixxQkFBcUIsRUFBRSxLQUFLO0lBQzVCLHNCQUFzQixFQUFFLEtBQUs7SUFDN0Isa0JBQWtCLEVBQUUsS0FBSztJQUN6QiwyQkFBMkIsRUFBRSxLQUFLO0lBR2xDLCtCQUErQixFQUFFLEtBQUs7SUFDdEMsMkJBQTJCLEVBQUUsS0FBSztDQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNvY2lhbEVycm9yQ29kZXMgPSB7XG4gIExPQURfVVNFUl9FVkVOVFNfRVJST1I6IDUwMDAwLFxuICBTQVZFX1VTRVJfRVZFTlRfRVJST1I6IDUwMDAxLFxuICBDT1VOVF9VU0VSX0VWRU5UX0VSUk9SOiA1MDAwMixcbiAgU0VORF9NRVNTQUdFX0VSUk9SOiA1MDAwMyxcbiAgU1VCU0NSSUJFX1VTRVJfRVZFTlRTX0VSUk9SOiA1MDAwNSxcblxuXG4gIFNVQlNDUklCRV9KT0JfUFJPR1JFU1NJT05fRVJST1I6IDUwMDEwLFxuICBMT0FEX0pPQl9QUk9HUkVTU0lPTlNfRVJST1I6IDUwMDExXG59O1xuIl19
|
|
@@ -15762,30 +15762,44 @@ class GraphqlService extends StartableService {
|
|
|
15762
15762
|
return this._defaultFetchPolicy;
|
|
15763
15763
|
}
|
|
15764
15764
|
setAuthToken(token) {
|
|
15765
|
-
|
|
15766
|
-
|
|
15767
|
-
|
|
15768
|
-
|
|
15769
|
-
|
|
15770
|
-
|
|
15771
|
-
|
|
15772
|
-
|
|
15773
|
-
|
|
15774
|
-
|
|
15775
|
-
|
|
15765
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15766
|
+
if (token) {
|
|
15767
|
+
console.debug('[graphql] Apply token authentication to headers');
|
|
15768
|
+
this.connectionParams.authToken = token;
|
|
15769
|
+
}
|
|
15770
|
+
// Clean auth token
|
|
15771
|
+
else if (this.connectionParams.authToken) {
|
|
15772
|
+
console.debug('[graphql] Remove token authentication from headers');
|
|
15773
|
+
delete this.connectionParams.authToken;
|
|
15774
|
+
// Restart, to force client re-creation, and websocket to logout
|
|
15775
|
+
if (this.started) {
|
|
15776
|
+
yield this.restart();
|
|
15777
|
+
}
|
|
15778
|
+
else {
|
|
15779
|
+
yield this.clearCache();
|
|
15780
|
+
}
|
|
15781
|
+
}
|
|
15782
|
+
});
|
|
15776
15783
|
}
|
|
15777
15784
|
setAuthBasic(basic) {
|
|
15778
|
-
|
|
15779
|
-
|
|
15780
|
-
|
|
15781
|
-
|
|
15782
|
-
|
|
15783
|
-
|
|
15784
|
-
|
|
15785
|
-
|
|
15786
|
-
|
|
15787
|
-
|
|
15788
|
-
|
|
15785
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15786
|
+
if (basic) {
|
|
15787
|
+
console.debug('[graphql] Apply basic authentication to headers');
|
|
15788
|
+
this.connectionParams.authBasic = basic;
|
|
15789
|
+
}
|
|
15790
|
+
// Clean auth basic
|
|
15791
|
+
else if (this.connectionParams.authBasic) {
|
|
15792
|
+
console.debug('[graphql] Remove basic authentication from headers');
|
|
15793
|
+
delete this.connectionParams.authBasic;
|
|
15794
|
+
// Restart, to force client re-creation, and websocket to logout
|
|
15795
|
+
if (this.started) {
|
|
15796
|
+
yield this.restart();
|
|
15797
|
+
}
|
|
15798
|
+
else {
|
|
15799
|
+
yield this.clearCache();
|
|
15800
|
+
}
|
|
15801
|
+
}
|
|
15802
|
+
});
|
|
15789
15803
|
}
|
|
15790
15804
|
/**
|
|
15791
15805
|
* Allow to add a field resolver
|
|
@@ -29205,7 +29219,8 @@ const SocialErrorCodes = {
|
|
|
29205
29219
|
COUNT_USER_EVENT_ERROR: 50002,
|
|
29206
29220
|
SEND_MESSAGE_ERROR: 50003,
|
|
29207
29221
|
SUBSCRIBE_USER_EVENTS_ERROR: 50005,
|
|
29208
|
-
SUBSCRIBE_JOB_PROGRESSION_ERROR: 50010
|
|
29222
|
+
SUBSCRIBE_JOB_PROGRESSION_ERROR: 50010,
|
|
29223
|
+
LOAD_JOB_PROGRESSIONS_ERROR: 50011
|
|
29209
29224
|
};
|
|
29210
29225
|
|
|
29211
29226
|
const APP_USER_EVENT_SERVICE = new InjectionToken('UserEventService');
|