agenticpool 1.0.13 → 1.0.15
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/dist/auth/AuthHelper.js +6 -6
- package/dist/commands/auth.js +23 -20
- package/dist/commands/config.js +13 -10
- package/dist/commands/connections.js +48 -45
- package/dist/commands/contacts.js +47 -44
- package/dist/commands/conversations.js +13 -13
- package/dist/commands/errors.js +4 -4
- package/dist/commands/humans.js +58 -56
- package/dist/commands/identities.js +24 -21
- package/dist/commands/messages.js +6 -6
- package/dist/commands/networks.js +30 -30
- package/dist/commands/profile.js +41 -38
- package/dist/datamodel/toon/index.js +63 -65
- package/dist/index.js +0 -0
- package/dist/utils/colors.d.ts +16 -0
- package/dist/utils/colors.js +23 -0
- package/dist/utils/logger.js +7 -7
- package/package.json +1 -1
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.registerConnectionCommands = registerConnectionCommands;
|
|
4
7
|
const api_1 = require("../api");
|
|
5
8
|
const config_1 = require("../config");
|
|
6
9
|
const AuthHelper_1 = require("../auth/AuthHelper");
|
|
7
|
-
const
|
|
10
|
+
const colors_1 = __importDefault(require("../utils/colors"));
|
|
8
11
|
const DEFAULT_HUMANS_API_URL = 'https://us-central1-agenticpool-humans.cloudfunctions.net/api';
|
|
9
12
|
async function getHumanAuthenticatedClient() {
|
|
10
13
|
const config = await config_1.configManager.getGlobalConfig();
|
|
@@ -41,17 +44,17 @@ function registerConnectionCommands(program) {
|
|
|
41
44
|
});
|
|
42
45
|
if (response.success && response.data) {
|
|
43
46
|
const conn = response.data;
|
|
44
|
-
console.log(
|
|
45
|
-
console.log(
|
|
46
|
-
console.log(
|
|
47
|
-
console.log(
|
|
47
|
+
console.log(colors_1.default.green('✓ Connection proposed!'));
|
|
48
|
+
console.log(colors_1.default.gray('ID:'), conn.id || conn.connectionId);
|
|
49
|
+
console.log(colors_1.default.gray('To:'), options.toToken);
|
|
50
|
+
console.log(colors_1.default.gray('Network:'), options.network);
|
|
48
51
|
}
|
|
49
52
|
else {
|
|
50
|
-
console.error(
|
|
53
|
+
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to propose connection');
|
|
51
54
|
}
|
|
52
55
|
}
|
|
53
56
|
catch (error) {
|
|
54
|
-
console.error(
|
|
57
|
+
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
55
58
|
}
|
|
56
59
|
});
|
|
57
60
|
connections
|
|
@@ -69,30 +72,30 @@ function registerConnectionCommands(program) {
|
|
|
69
72
|
});
|
|
70
73
|
if (response.success && response.data) {
|
|
71
74
|
if (response.data.length === 0) {
|
|
72
|
-
console.log(
|
|
75
|
+
console.log(colors_1.default.yellow('No pending connections.'));
|
|
73
76
|
return;
|
|
74
77
|
}
|
|
75
|
-
console.log(
|
|
78
|
+
console.log(colors_1.default.green.bold(`\nPending Connections (${response.data.length}):\n`));
|
|
76
79
|
response.data.forEach((conn) => {
|
|
77
|
-
console.log(
|
|
78
|
-
console.log(
|
|
79
|
-
console.log(
|
|
80
|
-
console.log(
|
|
80
|
+
console.log(colors_1.default.cyan.bold(`Connection ${conn.id}`));
|
|
81
|
+
console.log(colors_1.default.gray(' From:'), conn.fromAgentToken);
|
|
82
|
+
console.log(colors_1.default.gray(' Network:'), conn.networkId);
|
|
83
|
+
console.log(colors_1.default.gray(' Status:'), conn.status);
|
|
81
84
|
if (conn.fromExplanation) {
|
|
82
|
-
console.log(
|
|
85
|
+
console.log(colors_1.default.gray(' Explanation:'), conn.fromExplanation);
|
|
83
86
|
}
|
|
84
87
|
if (conn.proposedAt) {
|
|
85
|
-
console.log(
|
|
88
|
+
console.log(colors_1.default.gray(' Proposed:'), formatTimestamp(conn.proposedAt));
|
|
86
89
|
}
|
|
87
90
|
console.log();
|
|
88
91
|
});
|
|
89
92
|
}
|
|
90
93
|
else {
|
|
91
|
-
console.error(
|
|
94
|
+
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to list pending connections');
|
|
92
95
|
}
|
|
93
96
|
}
|
|
94
97
|
catch (error) {
|
|
95
|
-
console.error(
|
|
98
|
+
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
96
99
|
}
|
|
97
100
|
});
|
|
98
101
|
connections
|
|
@@ -111,15 +114,15 @@ function registerConnectionCommands(program) {
|
|
|
111
114
|
toExplanation: options.explanation
|
|
112
115
|
});
|
|
113
116
|
if (response.success) {
|
|
114
|
-
console.log(
|
|
115
|
-
console.log(
|
|
117
|
+
console.log(colors_1.default.green('✓ Connection accepted!'));
|
|
118
|
+
console.log(colors_1.default.gray('ID:'), options.id);
|
|
116
119
|
}
|
|
117
120
|
else {
|
|
118
|
-
console.error(
|
|
121
|
+
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to accept connection');
|
|
119
122
|
}
|
|
120
123
|
}
|
|
121
124
|
catch (error) {
|
|
122
|
-
console.error(
|
|
125
|
+
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
123
126
|
}
|
|
124
127
|
});
|
|
125
128
|
connections
|
|
@@ -135,15 +138,15 @@ function registerConnectionCommands(program) {
|
|
|
135
138
|
humansClient.setAuthToken(credentials.jwt || '');
|
|
136
139
|
const response = await humansClient.post(`/v1/connections/${options.id}/reject`);
|
|
137
140
|
if (response.success) {
|
|
138
|
-
console.log(
|
|
139
|
-
console.log(
|
|
141
|
+
console.log(colors_1.default.green('✓ Connection rejected.'));
|
|
142
|
+
console.log(colors_1.default.gray('ID:'), options.id);
|
|
140
143
|
}
|
|
141
144
|
else {
|
|
142
|
-
console.error(
|
|
145
|
+
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to reject connection');
|
|
143
146
|
}
|
|
144
147
|
}
|
|
145
148
|
catch (error) {
|
|
146
|
-
console.error(
|
|
149
|
+
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
147
150
|
}
|
|
148
151
|
});
|
|
149
152
|
connections
|
|
@@ -155,31 +158,31 @@ function registerConnectionCommands(program) {
|
|
|
155
158
|
const response = await client.get('/v1/connections/mine');
|
|
156
159
|
if (response.success && response.data) {
|
|
157
160
|
if (response.data.length === 0) {
|
|
158
|
-
console.log(
|
|
161
|
+
console.log(colors_1.default.yellow('No connections found.'));
|
|
159
162
|
return;
|
|
160
163
|
}
|
|
161
|
-
console.log(
|
|
164
|
+
console.log(colors_1.default.green.bold(`\nYour Connections (${response.data.length}):\n`));
|
|
162
165
|
response.data.forEach((conn) => {
|
|
163
|
-
console.log(
|
|
164
|
-
console.log(
|
|
165
|
-
console.log(
|
|
166
|
-
console.log(
|
|
167
|
-
console.log(
|
|
166
|
+
console.log(colors_1.default.cyan.bold(`Connection ${conn.id}`));
|
|
167
|
+
console.log(colors_1.default.gray(' From:'), conn.fromAgentToken);
|
|
168
|
+
console.log(colors_1.default.gray(' To:'), conn.toAgentToken);
|
|
169
|
+
console.log(colors_1.default.gray(' Network:'), conn.networkId);
|
|
170
|
+
console.log(colors_1.default.gray(' Status:'), conn.status);
|
|
168
171
|
if (conn.fromExplanation) {
|
|
169
|
-
console.log(
|
|
172
|
+
console.log(colors_1.default.gray(' From explanation:'), conn.fromExplanation);
|
|
170
173
|
}
|
|
171
174
|
if (conn.toExplanation) {
|
|
172
|
-
console.log(
|
|
175
|
+
console.log(colors_1.default.gray(' To explanation:'), conn.toExplanation);
|
|
173
176
|
}
|
|
174
177
|
console.log();
|
|
175
178
|
});
|
|
176
179
|
}
|
|
177
180
|
else {
|
|
178
|
-
console.error(
|
|
181
|
+
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to list connections');
|
|
179
182
|
}
|
|
180
183
|
}
|
|
181
184
|
catch (error) {
|
|
182
|
-
console.error(
|
|
185
|
+
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
183
186
|
}
|
|
184
187
|
});
|
|
185
188
|
connections
|
|
@@ -191,15 +194,15 @@ function registerConnectionCommands(program) {
|
|
|
191
194
|
const { client } = await getHumanAuthenticatedClient();
|
|
192
195
|
const response = await client.post(`/v1/connections/${options.id}/human-accept`);
|
|
193
196
|
if (response.success) {
|
|
194
|
-
console.log(
|
|
195
|
-
console.log(
|
|
197
|
+
console.log(colors_1.default.green('✓ Connection accepted as human!'));
|
|
198
|
+
console.log(colors_1.default.gray('ID:'), options.id);
|
|
196
199
|
}
|
|
197
200
|
else {
|
|
198
|
-
console.error(
|
|
201
|
+
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to accept connection');
|
|
199
202
|
}
|
|
200
203
|
}
|
|
201
204
|
catch (error) {
|
|
202
|
-
console.error(
|
|
205
|
+
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
203
206
|
}
|
|
204
207
|
});
|
|
205
208
|
connections
|
|
@@ -211,15 +214,15 @@ function registerConnectionCommands(program) {
|
|
|
211
214
|
const { client } = await getHumanAuthenticatedClient();
|
|
212
215
|
const response = await client.post(`/v1/connections/${options.id}/revoke`);
|
|
213
216
|
if (response.success) {
|
|
214
|
-
console.log(
|
|
215
|
-
console.log(
|
|
217
|
+
console.log(colors_1.default.green('✓ Connection revoked.'));
|
|
218
|
+
console.log(colors_1.default.gray('ID:'), options.id);
|
|
216
219
|
}
|
|
217
220
|
else {
|
|
218
|
-
console.error(
|
|
221
|
+
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to revoke connection');
|
|
219
222
|
}
|
|
220
223
|
}
|
|
221
224
|
catch (error) {
|
|
222
|
-
console.error(
|
|
225
|
+
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
223
226
|
}
|
|
224
227
|
});
|
|
225
228
|
}
|
|
@@ -238,4 +241,4 @@ function formatTimestamp(ts) {
|
|
|
238
241
|
}
|
|
239
242
|
return String(ts);
|
|
240
243
|
}
|
|
241
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY29ubmVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEwQkEsZ0VBME5DO0FBblBELGdDQUFtQztBQUNuQyxzQ0FBMEM7QUFDMUMsbURBQWdEO0FBQ2hELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUUvQixNQUFNLHNCQUFzQixHQUFHLCtEQUErRCxDQUFDO0FBRS9GLEtBQUssVUFBVSwyQkFBMkI7SUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxzQkFBYSxDQUFDLGVBQWUsRUFBUyxDQUFDO0lBRTVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RFLE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksSUFBSSxzQkFBc0IsQ0FBQztJQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQWdCLDBCQUEwQixDQUFDLE9BQWdCO0lBQ3pELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFFdkcsV0FBVztTQUNSLE9BQU8sQ0FBQyxTQUFTLENBQUM7U0FDbEIsV0FBVyxDQUFDLHVDQUF1QyxDQUFDO1NBQ3BELGNBQWMsQ0FBQyx3QkFBd0IsRUFBRSwyQkFBMkIsQ0FBQztTQUNyRSxjQUFjLENBQUMsb0JBQW9CLEVBQUUsWUFBWSxDQUFDO1NBQ2xELGNBQWMsQ0FBQywwQkFBMEIsRUFBRSxnQ0FBZ0MsQ0FBQztTQUM1RSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ3hCLElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSx1QkFBVSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV0RixNQUFNLFlBQVksR0FBRyxNQUFNLGVBQWUsRUFBRSxDQUFDO1lBQzdDLE1BQU0sWUFBWSxHQUFHLElBQUksZUFBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pELFlBQVksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUVqRCxNQUFNLFFBQVEsR0FBRyxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzFELGNBQWMsRUFBRSxXQUFXLENBQUMsV0FBVztnQkFDdkMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxPQUFPO2dCQUM3QixTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0JBQzFCLGVBQWUsRUFBRSxPQUFPLENBQUMsV0FBVzthQUNyQyxDQUFDLENBQUM7WUFFSCxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBVyxDQUFDO2dCQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzdELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSw4QkFBOEIsQ0FBQyxDQUFDO1lBQ2hHLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvRixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFTCxXQUFXO1NBQ1IsT0FBTyxDQUFDLFNBQVMsQ0FBQztTQUNsQixXQUFXLENBQUMsa0RBQWtELENBQUM7U0FDL0QsY0FBYyxDQUFDLG9CQUFvQixFQUFFLFlBQVksQ0FBQztTQUNsRCxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ3hCLElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSx1QkFBVSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV0RixNQUFNLFlBQVksR0FBRyxNQUFNLGVBQWUsRUFBRSxDQUFDO1lBQzdDLE1BQU0sWUFBWSxHQUFHLElBQUksZUFBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pELFlBQVksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUVqRCxNQUFNLFFBQVEsR0FBRyxNQUFNLFlBQVksQ0FBQyxHQUFHLENBQVEseUJBQXlCLEVBQUU7Z0JBQ3hFLFVBQVUsRUFBRSxXQUFXLENBQUMsV0FBVzthQUNwQyxDQUFDLENBQUM7WUFFSCxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxPQUFPO2dCQUNULENBQUM7Z0JBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQywwQkFBMEIsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBRXBGLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7b0JBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0RCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUN4RCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN0RCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNsRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUNsRSxDQUFDO29CQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO3dCQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUMzRSxDQUFDO29CQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLG9DQUFvQyxDQUFDLENBQUM7WUFDdEcsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVMLFdBQVc7U0FDUixPQUFPLENBQUMsUUFBUSxDQUFDO1NBQ2pCLFdBQVcsQ0FBQyxzQ0FBc0MsQ0FBQztTQUNuRCxjQUFjLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQztTQUNoRCxjQUFjLENBQUMsb0JBQW9CLEVBQUUsWUFBWSxDQUFDO1NBQ2xELGNBQWMsQ0FBQywwQkFBMEIsRUFBRSxnQ0FBZ0MsQ0FBQztTQUM1RSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ3hCLElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSx1QkFBVSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV0RixNQUFNLFlBQVksR0FBRyxNQUFNLGVBQWUsRUFBRSxDQUFDO1lBQzdDLE1BQU0sWUFBWSxHQUFHLElBQUksZUFBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pELFlBQVksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUVqRCxNQUFNLFFBQVEsR0FBRyxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLE9BQU8sQ0FBQyxFQUFFLGVBQWUsRUFBRTtnQkFDckYsYUFBYSxFQUFFLE9BQU8sQ0FBQyxXQUFXO2FBQ25DLENBQUMsQ0FBQztZQUVILElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksNkJBQTZCLENBQUMsQ0FBQztZQUMvRixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDL0YsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUwsV0FBVztTQUNSLE9BQU8sQ0FBQyxRQUFRLENBQUM7U0FDakIsV0FBVyxDQUFDLHNDQUFzQyxDQUFDO1NBQ25ELGNBQWMsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDO1NBQ2hELGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLENBQUM7U0FDbEQsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN4QixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sdUJBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFdEYsTUFBTSxZQUFZLEdBQUcsTUFBTSxlQUFlLEVBQUUsQ0FBQztZQUM3QyxNQUFNLFlBQVksR0FBRyxJQUFJLGVBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNqRCxZQUFZLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7WUFFakQsTUFBTSxRQUFRLEdBQUcsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLG1CQUFtQixPQUFPLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUVqRixJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztnQkFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLDZCQUE2QixDQUFDLENBQUM7WUFDL0YsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVMLFdBQVc7U0FDUixPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ2YsV0FBVyxDQUFDLHdDQUF3QyxDQUFDO1NBQ3JELE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNqQixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSwyQkFBMkIsRUFBRSxDQUFDO1lBRXZELE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBUSxzQkFBc0IsQ0FBQyxDQUFDO1lBRWpFLElBQUksUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7b0JBQ25ELE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHVCQUF1QixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFFakYsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtvQkFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3RELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQ3hELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3RELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2xELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQ3ZFLENBQUM7b0JBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7d0JBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDbkUsQ0FBQztvQkFDRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSw0QkFBNEIsQ0FBQyxDQUFDO1lBQzlGLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvRixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFTCxXQUFXO1NBQ1IsT0FBTyxDQUFDLGNBQWMsQ0FBQztTQUN2QixXQUFXLENBQUMsb0VBQW9FLENBQUM7U0FDakYsY0FBYyxDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUM7U0FDaEQsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN4QixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSwyQkFBMkIsRUFBRSxDQUFDO1lBRXZELE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsT0FBTyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFFakYsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSw2QkFBNkIsQ0FBQyxDQUFDO1lBQy9GLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvRixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFTCxXQUFXO1NBQ1IsT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUNqQixXQUFXLENBQUMsbUVBQW1FLENBQUM7U0FDaEYsY0FBYyxDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUM7U0FDaEQsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN4QixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSwyQkFBMkIsRUFBRSxDQUFDO1lBRXZELE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFM0UsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSw2QkFBNkIsQ0FBQyxDQUFDO1lBQy9GLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvRixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsS0FBSyxVQUFVLGVBQWU7SUFDNUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxzQkFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3JELE9BQVEsTUFBYyxDQUFDLFlBQVksSUFBSSxzQkFBc0IsQ0FBQztBQUNoRSxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsRUFBTztJQUM5QixJQUFJLENBQUMsRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzFCLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDckQsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgQXBpQ2xpZW50IH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IGNvbmZpZ01hbmFnZXIgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgQXV0aEhlbHBlciB9IGZyb20gJy4uL2F1dGgvQXV0aEhlbHBlcic7XG5jb25zdCBjaGFsayA9IHJlcXVpcmUoJ2NoYWxrJyk7XG5cbmNvbnN0IERFRkFVTFRfSFVNQU5TX0FQSV9VUkwgPSAnaHR0cHM6Ly91cy1jZW50cmFsMS1hZ2VudGljcG9vbC1odW1hbnMuY2xvdWRmdW5jdGlvbnMubmV0L2FwaSc7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpOiBQcm9taXNlPHsgY2xpZW50OiBBcGlDbGllbnQ7IGh1bWFuVWlkOiBzdHJpbmcgfT4ge1xuICBjb25zdCBjb25maWcgPSBhd2FpdCBjb25maWdNYW5hZ2VyLmdldEdsb2JhbENvbmZpZygpIGFzIGFueTtcblxuICBpZiAoIWNvbmZpZy5odW1hbkp3dCB8fCAhY29uZmlnLmh1bWFuVWlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYXV0aGVudGljYXRlZCBhcyBhIGh1bWFuLiBSdW4gXCJhZ2VudGljcG9vbCBodW1hbnMgbG9naW5cIiBmaXJzdC4nKTtcbiAgfVxuXG4gIGlmIChjb25maWcuaHVtYW5Kd3RFeHBpcmVzQXQgJiYgRGF0ZS5ub3coKSA+IGNvbmZpZy5odW1hbkp3dEV4cGlyZXNBdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSHVtYW4gc2Vzc2lvbiBleHBpcmVkLiBSdW4gXCJhZ2VudGljcG9vbCBodW1hbnMgbG9naW5cIiBhZ2Fpbi4nKTtcbiAgfVxuXG4gIGNvbnN0IGh1bWFuc0FwaVVybCA9IGNvbmZpZy5odW1hbnNBcGlVcmwgfHwgREVGQVVMVF9IVU1BTlNfQVBJX1VSTDtcbiAgY29uc3QgY2xpZW50ID0gbmV3IEFwaUNsaWVudChodW1hbnNBcGlVcmwpO1xuICBjbGllbnQuc2V0QXV0aFRva2VuKGNvbmZpZy5odW1hbkp3dCk7XG5cbiAgcmV0dXJuIHsgY2xpZW50LCBodW1hblVpZDogY29uZmlnLmh1bWFuVWlkIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckNvbm5lY3Rpb25Db21tYW5kcyhwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIGNvbnN0IGNvbm5lY3Rpb25zID0gcHJvZ3JhbS5jb21tYW5kKCdjb25uZWN0aW9ucycpLmRlc2NyaXB0aW9uKCdBZ2VudCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgY29tbWFuZHMnKTtcblxuICBjb25uZWN0aW9uc1xuICAgIC5jb21tYW5kKCdwcm9wb3NlJylcbiAgICAuZGVzY3JpcHRpb24oJ1Byb3Bvc2UgYSBjb25uZWN0aW9uIHRvIGFub3RoZXIgYWdlbnQnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLXQsIC0tdG8tdG9rZW4gPHRva2VuPicsICdUYXJnZXQgYWdlbnQgcHVibGljIHRva2VuJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1lLCAtLWV4cGxhbmF0aW9uIDx0ZXh0PicsICdFeHBsYW5hdGlvbiBmb3IgdGhlIGNvbm5lY3Rpb24nKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50LCBjcmVkZW50aWFscyB9ID0gYXdhaXQgQXV0aEhlbHBlci5lbnN1cmVBdXRoZW50aWNhdGVkKG9wdGlvbnMubmV0d29yayk7XG5cbiAgICAgICAgY29uc3QgaHVtYW5zQXBpVXJsID0gYXdhaXQgZ2V0SHVtYW5zQXBpVXJsKCk7XG4gICAgICAgIGNvbnN0IGh1bWFuc0NsaWVudCA9IG5ldyBBcGlDbGllbnQoaHVtYW5zQXBpVXJsKTtcbiAgICAgICAgaHVtYW5zQ2xpZW50LnNldEF1dGhUb2tlbihjcmVkZW50aWFscy5qd3QgfHwgJycpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaHVtYW5zQ2xpZW50LnBvc3QoJy92MS9jb25uZWN0aW9ucycsIHtcbiAgICAgICAgICBmcm9tQWdlbnRUb2tlbjogY3JlZGVudGlhbHMucHVibGljVG9rZW4sXG4gICAgICAgICAgdG9BZ2VudFRva2VuOiBvcHRpb25zLnRvVG9rZW4sXG4gICAgICAgICAgbmV0d29ya0lkOiBvcHRpb25zLm5ldHdvcmssXG4gICAgICAgICAgZnJvbUV4cGxhbmF0aW9uOiBvcHRpb25zLmV4cGxhbmF0aW9uXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBjb25zdCBjb25uID0gcmVzcG9uc2UuZGF0YSBhcyBhbnk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBDb25uZWN0aW9uIHByb3Bvc2VkIScpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdJRDonKSwgY29ubi5pZCB8fCBjb25uLmNvbm5lY3Rpb25JZCk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnVG86JyksIG9wdGlvbnMudG9Ub2tlbik7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnTmV0d29yazonKSwgb3B0aW9ucy5uZXR3b3JrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gcHJvcG9zZSBjb25uZWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGNvbm5lY3Rpb25zXG4gICAgLmNvbW1hbmQoJ3BlbmRpbmcnKVxuICAgIC5kZXNjcmlwdGlvbignTGlzdCBwZW5kaW5nIGNvbm5lY3Rpb24gcHJvcG9zYWxzIGZvciB5b3VyIGFnZW50JylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCwgY3JlZGVudGlhbHMgfSA9IGF3YWl0IEF1dGhIZWxwZXIuZW5zdXJlQXV0aGVudGljYXRlZChvcHRpb25zLm5ldHdvcmspO1xuXG4gICAgICAgIGNvbnN0IGh1bWFuc0FwaVVybCA9IGF3YWl0IGdldEh1bWFuc0FwaVVybCgpO1xuICAgICAgICBjb25zdCBodW1hbnNDbGllbnQgPSBuZXcgQXBpQ2xpZW50KGh1bWFuc0FwaVVybCk7XG4gICAgICAgIGh1bWFuc0NsaWVudC5zZXRBdXRoVG9rZW4oY3JlZGVudGlhbHMuand0IHx8ICcnKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGh1bWFuc0NsaWVudC5nZXQ8YW55W10+KCcvdjEvY29ubmVjdGlvbnMvcGVuZGluZycsIHtcbiAgICAgICAgICBhZ2VudFRva2VuOiBjcmVkZW50aWFscy5wdWJsaWNUb2tlblxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ05vIHBlbmRpbmcgY29ubmVjdGlvbnMuJykpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoYFxcblBlbmRpbmcgQ29ubmVjdGlvbnMgKCR7cmVzcG9uc2UuZGF0YS5sZW5ndGh9KTpcXG5gKSk7XG5cbiAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2goKGNvbm46IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbi5ib2xkKGBDb25uZWN0aW9uICR7Y29ubi5pZH1gKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIEZyb206JyksIGNvbm4uZnJvbUFnZW50VG9rZW4pO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBOZXR3b3JrOicpLCBjb25uLm5ldHdvcmtJZCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFN0YXR1czonKSwgY29ubi5zdGF0dXMpO1xuICAgICAgICAgICAgaWYgKGNvbm4uZnJvbUV4cGxhbmF0aW9uKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgRXhwbGFuYXRpb246JyksIGNvbm4uZnJvbUV4cGxhbmF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb25uLnByb3Bvc2VkQXQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBQcm9wb3NlZDonKSwgZm9ybWF0VGltZXN0YW1wKGNvbm4ucHJvcG9zZWRBdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbGlzdCBwZW5kaW5nIGNvbm5lY3Rpb25zJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGNvbm5lY3Rpb25zXG4gICAgLmNvbW1hbmQoJ2FjY2VwdCcpXG4gICAgLmRlc2NyaXB0aW9uKCdBY2NlcHQgYSBwZW5kaW5nIGNvbm5lY3Rpb24gcHJvcG9zYWwnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWksIC0taWQgPGlkPicsICdDb25uZWN0aW9uIElEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1lLCAtLWV4cGxhbmF0aW9uIDx0ZXh0PicsICdZb3VyIGV4cGxhbmF0aW9uIGZvciBhY2NlcHRpbmcnKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50LCBjcmVkZW50aWFscyB9ID0gYXdhaXQgQXV0aEhlbHBlci5lbnN1cmVBdXRoZW50aWNhdGVkKG9wdGlvbnMubmV0d29yayk7XG5cbiAgICAgICAgY29uc3QgaHVtYW5zQXBpVXJsID0gYXdhaXQgZ2V0SHVtYW5zQXBpVXJsKCk7XG4gICAgICAgIGNvbnN0IGh1bWFuc0NsaWVudCA9IG5ldyBBcGlDbGllbnQoaHVtYW5zQXBpVXJsKTtcbiAgICAgICAgaHVtYW5zQ2xpZW50LnNldEF1dGhUb2tlbihjcmVkZW50aWFscy5qd3QgfHwgJycpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaHVtYW5zQ2xpZW50LnBvc3QoYC92MS9jb25uZWN0aW9ucy8ke29wdGlvbnMuaWR9L2FnZW50LWFjY2VwdGAsIHtcbiAgICAgICAgICB0b0V4cGxhbmF0aW9uOiBvcHRpb25zLmV4cGxhbmF0aW9uXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBDb25uZWN0aW9uIGFjY2VwdGVkIScpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdJRDonKSwgb3B0aW9ucy5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGFjY2VwdCBjb25uZWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGNvbm5lY3Rpb25zXG4gICAgLmNvbW1hbmQoJ3JlamVjdCcpXG4gICAgLmRlc2NyaXB0aW9uKCdSZWplY3QgYSBwZW5kaW5nIGNvbm5lY3Rpb24gcHJvcG9zYWwnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWksIC0taWQgPGlkPicsICdDb25uZWN0aW9uIElEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCwgY3JlZGVudGlhbHMgfSA9IGF3YWl0IEF1dGhIZWxwZXIuZW5zdXJlQXV0aGVudGljYXRlZChvcHRpb25zLm5ldHdvcmspO1xuXG4gICAgICAgIGNvbnN0IGh1bWFuc0FwaVVybCA9IGF3YWl0IGdldEh1bWFuc0FwaVVybCgpO1xuICAgICAgICBjb25zdCBodW1hbnNDbGllbnQgPSBuZXcgQXBpQ2xpZW50KGh1bWFuc0FwaVVybCk7XG4gICAgICAgIGh1bWFuc0NsaWVudC5zZXRBdXRoVG9rZW4oY3JlZGVudGlhbHMuand0IHx8ICcnKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGh1bWFuc0NsaWVudC5wb3N0KGAvdjEvY29ubmVjdGlvbnMvJHtvcHRpb25zLmlkfS9yZWplY3RgKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMgQ29ubmVjdGlvbiByZWplY3RlZC4nKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnSUQ6JyksIG9wdGlvbnMuaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byByZWplY3QgY29ubmVjdGlvbicpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBjb25uZWN0aW9uc1xuICAgIC5jb21tYW5kKCdtaW5lJylcbiAgICAuZGVzY3JpcHRpb24oJ0xpc3QgYWxsIHlvdXIgY29ubmVjdGlvbnMgKGFzIGEgaHVtYW4pJylcbiAgICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50IH0gPSBhd2FpdCBnZXRIdW1hbkF1dGhlbnRpY2F0ZWRDbGllbnQoKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8YW55W10+KCcvdjEvY29ubmVjdGlvbnMvbWluZScpO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnTm8gY29ubmVjdGlvbnMgZm91bmQuJykpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoYFxcbllvdXIgQ29ubmVjdGlvbnMgKCR7cmVzcG9uc2UuZGF0YS5sZW5ndGh9KTpcXG5gKSk7XG5cbiAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2goKGNvbm46IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbi5ib2xkKGBDb25uZWN0aW9uICR7Y29ubi5pZH1gKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIEZyb206JyksIGNvbm4uZnJvbUFnZW50VG9rZW4pO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBUbzonKSwgY29ubi50b0FnZW50VG9rZW4pO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBOZXR3b3JrOicpLCBjb25uLm5ldHdvcmtJZCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFN0YXR1czonKSwgY29ubi5zdGF0dXMpO1xuICAgICAgICAgICAgaWYgKGNvbm4uZnJvbUV4cGxhbmF0aW9uKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgRnJvbSBleHBsYW5hdGlvbjonKSwgY29ubi5mcm9tRXhwbGFuYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbm4udG9FeHBsYW5hdGlvbikge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFRvIGV4cGxhbmF0aW9uOicpLCBjb25uLnRvRXhwbGFuYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbGlzdCBjb25uZWN0aW9ucycpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBjb25uZWN0aW9uc1xuICAgIC5jb21tYW5kKCdodW1hbi1hY2NlcHQnKVxuICAgIC5kZXNjcmlwdGlvbignQWNjZXB0IGEgY29ubmVjdGlvbiBhcyBhIGh1bWFuIChhcHByb3ZlcyB0aGUgY29udGFjdCByZWxhdGlvbnNoaXApJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1pLCAtLWlkIDxpZD4nLCAnQ29ubmVjdGlvbiBJRCcpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGF3YWl0IGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoYC92MS9jb25uZWN0aW9ucy8ke29wdGlvbnMuaWR9L2h1bWFuLWFjY2VwdGApO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBDb25uZWN0aW9uIGFjY2VwdGVkIGFzIGh1bWFuIScpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdJRDonKSwgb3B0aW9ucy5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGFjY2VwdCBjb25uZWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGNvbm5lY3Rpb25zXG4gICAgLmNvbW1hbmQoJ3Jldm9rZScpXG4gICAgLmRlc2NyaXB0aW9uKCdSZXZva2UgYSBjb25uZWN0aW9uIChkZWxldGVzIGJpZGlyZWN0aW9uYWwgY29udGFjdHMgaWYgY29ubmVjdGVkKScpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctaSwgLS1pZCA8aWQ+JywgJ0Nvbm5lY3Rpb24gSUQnKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50IH0gPSBhd2FpdCBnZXRIdW1hbkF1dGhlbnRpY2F0ZWRDbGllbnQoKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0KGAvdjEvY29ubmVjdGlvbnMvJHtvcHRpb25zLmlkfS9yZXZva2VgKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMgQ29ubmVjdGlvbiByZXZva2VkLicpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdJRDonKSwgb3B0aW9ucy5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHJldm9rZSBjb25uZWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRIdW1hbnNBcGlVcmwoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgY29uZmlnTWFuYWdlci5nZXRHbG9iYWxDb25maWcoKTtcbiAgcmV0dXJuIChjb25maWcgYXMgYW55KS5odW1hbnNBcGlVcmwgfHwgREVGQVVMVF9IVU1BTlNfQVBJX1VSTDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGltZXN0YW1wKHRzOiBhbnkpOiBzdHJpbmcge1xuICBpZiAoIXRzKSByZXR1cm4gJ3Vua25vd24nO1xuICBpZiAodHMuX3NlY29uZHMpIHtcbiAgICByZXR1cm4gbmV3IERhdGUodHMuX3NlY29uZHMgKiAxMDAwKS50b0lTT1N0cmluZygpO1xuICB9XG4gIGlmICh0eXBlb2YgdHMgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0cyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbmV3IERhdGUodHMpLnRvSVNPU3RyaW5nKCk7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh0cyk7XG59XG4iXX0=
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY29ubmVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUEwQkEsZ0VBME5DO0FBblBELGdDQUFtQztBQUNuQyxzQ0FBMEM7QUFDMUMsbURBQWdEO0FBQ2hELDZEQUFvQztBQUVwQyxNQUFNLHNCQUFzQixHQUFHLCtEQUErRCxDQUFDO0FBRS9GLEtBQUssVUFBVSwyQkFBMkI7SUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxzQkFBYSxDQUFDLGVBQWUsRUFBUyxDQUFDO0lBRTVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RFLE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksSUFBSSxzQkFBc0IsQ0FBQztJQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQWdCLDBCQUEwQixDQUFDLE9BQWdCO0lBQ3pELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7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QztBQUVELEtBQUssVUFBVSxlQUFlO0lBQzVCLE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNyRCxPQUFRLE1BQWMsQ0FBQyxZQUFZLElBQUksc0JBQXNCLENBQUM7QUFDaEUsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEVBQU87SUFDOUIsSUFBSSxDQUFDLEVBQUU7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMxQixJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUNELElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3JELE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBjb25maWdNYW5hZ2VyIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IEF1dGhIZWxwZXIgfSBmcm9tICcuLi9hdXRoL0F1dGhIZWxwZXInO1xuaW1wb3J0IGNoYWxrIGZyb20gJy4uL3V0aWxzL2NvbG9ycyc7XG5cbmNvbnN0IERFRkFVTFRfSFVNQU5TX0FQSV9VUkwgPSAnaHR0cHM6Ly91cy1jZW50cmFsMS1hZ2VudGljcG9vbC1odW1hbnMuY2xvdWRmdW5jdGlvbnMubmV0L2FwaSc7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpOiBQcm9taXNlPHsgY2xpZW50OiBBcGlDbGllbnQ7IGh1bWFuVWlkOiBzdHJpbmcgfT4ge1xuICBjb25zdCBjb25maWcgPSBhd2FpdCBjb25maWdNYW5hZ2VyLmdldEdsb2JhbENvbmZpZygpIGFzIGFueTtcblxuICBpZiAoIWNvbmZpZy5odW1hbkp3dCB8fCAhY29uZmlnLmh1bWFuVWlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYXV0aGVudGljYXRlZCBhcyBhIGh1bWFuLiBSdW4gXCJhZ2VudGljcG9vbCBodW1hbnMgbG9naW5cIiBmaXJzdC4nKTtcbiAgfVxuXG4gIGlmIChjb25maWcuaHVtYW5Kd3RFeHBpcmVzQXQgJiYgRGF0ZS5ub3coKSA+IGNvbmZpZy5odW1hbkp3dEV4cGlyZXNBdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSHVtYW4gc2Vzc2lvbiBleHBpcmVkLiBSdW4gXCJhZ2VudGljcG9vbCBodW1hbnMgbG9naW5cIiBhZ2Fpbi4nKTtcbiAgfVxuXG4gIGNvbnN0IGh1bWFuc0FwaVVybCA9IGNvbmZpZy5odW1hbnNBcGlVcmwgfHwgREVGQVVMVF9IVU1BTlNfQVBJX1VSTDtcbiAgY29uc3QgY2xpZW50ID0gbmV3IEFwaUNsaWVudChodW1hbnNBcGlVcmwpO1xuICBjbGllbnQuc2V0QXV0aFRva2VuKGNvbmZpZy5odW1hbkp3dCk7XG5cbiAgcmV0dXJuIHsgY2xpZW50LCBodW1hblVpZDogY29uZmlnLmh1bWFuVWlkIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckNvbm5lY3Rpb25Db21tYW5kcyhwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIGNvbnN0IGNvbm5lY3Rpb25zID0gcHJvZ3JhbS5jb21tYW5kKCdjb25uZWN0aW9ucycpLmRlc2NyaXB0aW9uKCdBZ2VudCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgY29tbWFuZHMnKTtcblxuICBjb25uZWN0aW9uc1xuICAgIC5jb21tYW5kKCdwcm9wb3NlJylcbiAgICAuZGVzY3JpcHRpb24oJ1Byb3Bvc2UgYSBjb25uZWN0aW9uIHRvIGFub3RoZXIgYWdlbnQnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLXQsIC0tdG8tdG9rZW4gPHRva2VuPicsICdUYXJnZXQgYWdlbnQgcHVibGljIHRva2VuJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1lLCAtLWV4cGxhbmF0aW9uIDx0ZXh0PicsICdFeHBsYW5hdGlvbiBmb3IgdGhlIGNvbm5lY3Rpb24nKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50LCBjcmVkZW50aWFscyB9ID0gYXdhaXQgQXV0aEhlbHBlci5lbnN1cmVBdXRoZW50aWNhdGVkKG9wdGlvbnMubmV0d29yayk7XG5cbiAgICAgICAgY29uc3QgaHVtYW5zQXBpVXJsID0gYXdhaXQgZ2V0SHVtYW5zQXBpVXJsKCk7XG4gICAgICAgIGNvbnN0IGh1bWFuc0NsaWVudCA9IG5ldyBBcGlDbGllbnQoaHVtYW5zQXBpVXJsKTtcbiAgICAgICAgaHVtYW5zQ2xpZW50LnNldEF1dGhUb2tlbihjcmVkZW50aWFscy5qd3QgfHwgJycpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaHVtYW5zQ2xpZW50LnBvc3QoJy92MS9jb25uZWN0aW9ucycsIHtcbiAgICAgICAgICBmcm9tQWdlbnRUb2tlbjogY3JlZGVudGlhbHMucHVibGljVG9rZW4sXG4gICAgICAgICAgdG9BZ2VudFRva2VuOiBvcHRpb25zLnRvVG9rZW4sXG4gICAgICAgICAgbmV0d29ya0lkOiBvcHRpb25zLm5ldHdvcmssXG4gICAgICAgICAgZnJvbUV4cGxhbmF0aW9uOiBvcHRpb25zLmV4cGxhbmF0aW9uXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBjb25zdCBjb25uID0gcmVzcG9uc2UuZGF0YSBhcyBhbnk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBDb25uZWN0aW9uIHByb3Bvc2VkIScpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdJRDonKSwgY29ubi5pZCB8fCBjb25uLmNvbm5lY3Rpb25JZCk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnVG86JyksIG9wdGlvbnMudG9Ub2tlbik7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnTmV0d29yazonKSwgb3B0aW9ucy5uZXR3b3JrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gcHJvcG9zZSBjb25uZWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGNvbm5lY3Rpb25zXG4gICAgLmNvbW1hbmQoJ3BlbmRpbmcnKVxuICAgIC5kZXNjcmlwdGlvbignTGlzdCBwZW5kaW5nIGNvbm5lY3Rpb24gcHJvcG9zYWxzIGZvciB5b3VyIGFnZW50JylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCwgY3JlZGVudGlhbHMgfSA9IGF3YWl0IEF1dGhIZWxwZXIuZW5zdXJlQXV0aGVudGljYXRlZChvcHRpb25zLm5ldHdvcmspO1xuXG4gICAgICAgIGNvbnN0IGh1bWFuc0FwaVVybCA9IGF3YWl0IGdldEh1bWFuc0FwaVVybCgpO1xuICAgICAgICBjb25zdCBodW1hbnNDbGllbnQgPSBuZXcgQXBpQ2xpZW50KGh1bWFuc0FwaVVybCk7XG4gICAgICAgIGh1bWFuc0NsaWVudC5zZXRBdXRoVG9rZW4oY3JlZGVudGlhbHMuand0IHx8ICcnKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGh1bWFuc0NsaWVudC5nZXQ8YW55W10+KCcvdjEvY29ubmVjdGlvbnMvcGVuZGluZycsIHtcbiAgICAgICAgICBhZ2VudFRva2VuOiBjcmVkZW50aWFscy5wdWJsaWNUb2tlblxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ05vIHBlbmRpbmcgY29ubmVjdGlvbnMuJykpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoYFxcblBlbmRpbmcgQ29ubmVjdGlvbnMgKCR7cmVzcG9uc2UuZGF0YS5sZW5ndGh9KTpcXG5gKSk7XG5cbiAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2goKGNvbm46IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbi5ib2xkKGBDb25uZWN0aW9uICR7Y29ubi5pZH1gKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIEZyb206JyksIGNvbm4uZnJvbUFnZW50VG9rZW4pO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBOZXR3b3JrOicpLCBjb25uLm5ldHdvcmtJZCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFN0YXR1czonKSwgY29ubi5zdGF0dXMpO1xuICAgICAgICAgICAgaWYgKGNvbm4uZnJvbUV4cGxhbmF0aW9uKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgRXhwbGFuYXRpb246JyksIGNvbm4uZnJvbUV4cGxhbmF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb25uLnByb3Bvc2VkQXQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBQcm9wb3NlZDonKSwgZm9ybWF0VGltZXN0YW1wKGNvbm4ucHJvcG9zZWRBdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbGlzdCBwZW5kaW5nIGNvbm5lY3Rpb25zJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGNvbm5lY3Rpb25zXG4gICAgLmNvbW1hbmQoJ2FjY2VwdCcpXG4gICAgLmRlc2NyaXB0aW9uKCdBY2NlcHQgYSBwZW5kaW5nIGNvbm5lY3Rpb24gcHJvcG9zYWwnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWksIC0taWQgPGlkPicsICdDb25uZWN0aW9uIElEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1lLCAtLWV4cGxhbmF0aW9uIDx0ZXh0PicsICdZb3VyIGV4cGxhbmF0aW9uIGZvciBhY2NlcHRpbmcnKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50LCBjcmVkZW50aWFscyB9ID0gYXdhaXQgQXV0aEhlbHBlci5lbnN1cmVBdXRoZW50aWNhdGVkKG9wdGlvbnMubmV0d29yayk7XG5cbiAgICAgICAgY29uc3QgaHVtYW5zQXBpVXJsID0gYXdhaXQgZ2V0SHVtYW5zQXBpVXJsKCk7XG4gICAgICAgIGNvbnN0IGh1bWFuc0NsaWVudCA9IG5ldyBBcGlDbGllbnQoaHVtYW5zQXBpVXJsKTtcbiAgICAgICAgaHVtYW5zQ2xpZW50LnNldEF1dGhUb2tlbihjcmVkZW50aWFscy5qd3QgfHwgJycpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaHVtYW5zQ2xpZW50LnBvc3QoYC92MS9jb25uZWN0aW9ucy8ke29wdGlvbnMuaWR9L2FnZW50LWFjY2VwdGAsIHtcbiAgICAgICAgICB0b0V4cGxhbmF0aW9uOiBvcHRpb25zLmV4cGxhbmF0aW9uXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBDb25uZWN0aW9uIGFjY2VwdGVkIScpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdJRDonKSwgb3B0aW9ucy5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGFjY2VwdCBjb25uZWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGNvbm5lY3Rpb25zXG4gICAgLmNvbW1hbmQoJ3JlamVjdCcpXG4gICAgLmRlc2NyaXB0aW9uKCdSZWplY3QgYSBwZW5kaW5nIGNvbm5lY3Rpb24gcHJvcG9zYWwnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWksIC0taWQgPGlkPicsICdDb25uZWN0aW9uIElEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCwgY3JlZGVudGlhbHMgfSA9IGF3YWl0IEF1dGhIZWxwZXIuZW5zdXJlQXV0aGVudGljYXRlZChvcHRpb25zLm5ldHdvcmspO1xuXG4gICAgICAgIGNvbnN0IGh1bWFuc0FwaVVybCA9IGF3YWl0IGdldEh1bWFuc0FwaVVybCgpO1xuICAgICAgICBjb25zdCBodW1hbnNDbGllbnQgPSBuZXcgQXBpQ2xpZW50KGh1bWFuc0FwaVVybCk7XG4gICAgICAgIGh1bWFuc0NsaWVudC5zZXRBdXRoVG9rZW4oY3JlZGVudGlhbHMuand0IHx8ICcnKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGh1bWFuc0NsaWVudC5wb3N0KGAvdjEvY29ubmVjdGlvbnMvJHtvcHRpb25zLmlkfS9yZWplY3RgKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMgQ29ubmVjdGlvbiByZWplY3RlZC4nKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnSUQ6JyksIG9wdGlvbnMuaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byByZWplY3QgY29ubmVjdGlvbicpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBjb25uZWN0aW9uc1xuICAgIC5jb21tYW5kKCdtaW5lJylcbiAgICAuZGVzY3JpcHRpb24oJ0xpc3QgYWxsIHlvdXIgY29ubmVjdGlvbnMgKGFzIGEgaHVtYW4pJylcbiAgICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50IH0gPSBhd2FpdCBnZXRIdW1hbkF1dGhlbnRpY2F0ZWRDbGllbnQoKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8YW55W10+KCcvdjEvY29ubmVjdGlvbnMvbWluZScpO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnTm8gY29ubmVjdGlvbnMgZm91bmQuJykpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoYFxcbllvdXIgQ29ubmVjdGlvbnMgKCR7cmVzcG9uc2UuZGF0YS5sZW5ndGh9KTpcXG5gKSk7XG5cbiAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2goKGNvbm46IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbi5ib2xkKGBDb25uZWN0aW9uICR7Y29ubi5pZH1gKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIEZyb206JyksIGNvbm4uZnJvbUFnZW50VG9rZW4pO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBUbzonKSwgY29ubi50b0FnZW50VG9rZW4pO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBOZXR3b3JrOicpLCBjb25uLm5ldHdvcmtJZCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFN0YXR1czonKSwgY29ubi5zdGF0dXMpO1xuICAgICAgICAgICAgaWYgKGNvbm4uZnJvbUV4cGxhbmF0aW9uKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgRnJvbSBleHBsYW5hdGlvbjonKSwgY29ubi5mcm9tRXhwbGFuYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbm4udG9FeHBsYW5hdGlvbikge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFRvIGV4cGxhbmF0aW9uOicpLCBjb25uLnRvRXhwbGFuYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbGlzdCBjb25uZWN0aW9ucycpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBjb25uZWN0aW9uc1xuICAgIC5jb21tYW5kKCdodW1hbi1hY2NlcHQnKVxuICAgIC5kZXNjcmlwdGlvbignQWNjZXB0IGEgY29ubmVjdGlvbiBhcyBhIGh1bWFuIChhcHByb3ZlcyB0aGUgY29udGFjdCByZWxhdGlvbnNoaXApJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1pLCAtLWlkIDxpZD4nLCAnQ29ubmVjdGlvbiBJRCcpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGF3YWl0IGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoYC92MS9jb25uZWN0aW9ucy8ke29wdGlvbnMuaWR9L2h1bWFuLWFjY2VwdGApO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBDb25uZWN0aW9uIGFjY2VwdGVkIGFzIGh1bWFuIScpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdJRDonKSwgb3B0aW9ucy5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGFjY2VwdCBjb25uZWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGNvbm5lY3Rpb25zXG4gICAgLmNvbW1hbmQoJ3Jldm9rZScpXG4gICAgLmRlc2NyaXB0aW9uKCdSZXZva2UgYSBjb25uZWN0aW9uIChkZWxldGVzIGJpZGlyZWN0aW9uYWwgY29udGFjdHMgaWYgY29ubmVjdGVkKScpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctaSwgLS1pZCA8aWQ+JywgJ0Nvbm5lY3Rpb24gSUQnKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50IH0gPSBhd2FpdCBnZXRIdW1hbkF1dGhlbnRpY2F0ZWRDbGllbnQoKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0KGAvdjEvY29ubmVjdGlvbnMvJHtvcHRpb25zLmlkfS9yZXZva2VgKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMgQ29ubmVjdGlvbiByZXZva2VkLicpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdJRDonKSwgb3B0aW9ucy5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHJldm9rZSBjb25uZWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRIdW1hbnNBcGlVcmwoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgY29uZmlnTWFuYWdlci5nZXRHbG9iYWxDb25maWcoKTtcbiAgcmV0dXJuIChjb25maWcgYXMgYW55KS5odW1hbnNBcGlVcmwgfHwgREVGQVVMVF9IVU1BTlNfQVBJX1VSTDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGltZXN0YW1wKHRzOiBhbnkpOiBzdHJpbmcge1xuICBpZiAoIXRzKSByZXR1cm4gJ3Vua25vd24nO1xuICBpZiAodHMuX3NlY29uZHMpIHtcbiAgICByZXR1cm4gbmV3IERhdGUodHMuX3NlY29uZHMgKiAxMDAwKS50b0lTT1N0cmluZygpO1xuICB9XG4gIGlmICh0eXBlb2YgdHMgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0cyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbmV3IERhdGUodHMpLnRvSVNPU3RyaW5nKCk7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh0cyk7XG59XG4iXX0=
|