@nlabs/lex 2.0.2 → 2.0.4
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/CHANGELOG.md +21 -0
- package/MIGRATION_V2.md +331 -0
- package/README.md +73 -102
- package/config.json +4 -8
- package/docs/assets/lex-logo.png +0 -0
- package/examples/lex.config.js +7 -10
- package/lex.config.js +12 -11
- package/lib/commands/ai/ai.js +22 -6
- package/lib/commands/compile/compile.js +13 -5
- package/lib/commands/serverless-dev/serverless-dev.d.ts +8 -0
- package/lib/commands/serverless-dev/serverless-dev.js +42 -6
- package/lib/commands/storybook/storybook.js +2 -25
- package/lib/lex.js +7 -10
- package/lib/utils/vite/config.js +12 -1
- package/package.json +17 -16
- package/scripts/validate-docs.js +141 -0
package/lib/commands/ai/ai.js
CHANGED
|
@@ -188,8 +188,18 @@ const detectCursorIDE = ()=>{
|
|
|
188
188
|
};
|
|
189
189
|
export const aiFunction = async (options)=>{
|
|
190
190
|
try {
|
|
191
|
+
await LexConfig.parseConfig(options);
|
|
191
192
|
const config = LexConfig.config || {};
|
|
192
|
-
const aiConfig =
|
|
193
|
+
const aiConfig = {
|
|
194
|
+
...config.ai,
|
|
195
|
+
...options.model ? {
|
|
196
|
+
model: options.model
|
|
197
|
+
} : {},
|
|
198
|
+
...options.provider ? {
|
|
199
|
+
provider: options.provider
|
|
200
|
+
} : {}
|
|
201
|
+
};
|
|
202
|
+
LexConfig.config.ai = aiConfig;
|
|
193
203
|
const provider = options.provider || aiConfig.provider || 'none';
|
|
194
204
|
if (provider === 'none' && !process.env.CURSOR_EXTENSION) {
|
|
195
205
|
log(`${chalk.red('Error:')} No AI provider configured.`, 'error');
|
|
@@ -197,11 +207,13 @@ export const aiFunction = async (options)=>{
|
|
|
197
207
|
error: 'No AI provider configured'
|
|
198
208
|
};
|
|
199
209
|
}
|
|
200
|
-
const task = options.task || '
|
|
210
|
+
const task = options.task || 'help';
|
|
201
211
|
const validTasks = [
|
|
202
212
|
'explain',
|
|
203
213
|
'generate',
|
|
204
214
|
'test',
|
|
215
|
+
'optimize',
|
|
216
|
+
'help',
|
|
205
217
|
'analyze',
|
|
206
218
|
'ask'
|
|
207
219
|
];
|
|
@@ -219,7 +231,7 @@ export const aiFunction = async (options)=>{
|
|
|
219
231
|
};
|
|
220
232
|
}
|
|
221
233
|
let context = '';
|
|
222
|
-
if (options.file) {
|
|
234
|
+
if (options.context !== false && options.file) {
|
|
223
235
|
try {
|
|
224
236
|
const fs = await import('fs/promises');
|
|
225
237
|
const glob = await import('glob');
|
|
@@ -236,7 +248,7 @@ export const aiFunction = async (options)=>{
|
|
|
236
248
|
log(`${chalk.yellow('Warning:')} Error reading file: ${error.message}`, 'warning');
|
|
237
249
|
}
|
|
238
250
|
}
|
|
239
|
-
if (options.dir) {
|
|
251
|
+
if (options.context !== false && options.dir) {
|
|
240
252
|
try {
|
|
241
253
|
const { execaSync } = await import('execa');
|
|
242
254
|
const result = execaSync('find', [
|
|
@@ -265,7 +277,11 @@ export const aiFunction = async (options)=>{
|
|
|
265
277
|
case 'analyze':
|
|
266
278
|
formattedPrompt = `Analyze the following code:\n${prompt}`;
|
|
267
279
|
break;
|
|
280
|
+
case 'optimize':
|
|
281
|
+
formattedPrompt = `Analyze the following code or configuration and suggest optimization improvements:\n${prompt}`;
|
|
282
|
+
break;
|
|
268
283
|
case 'ask':
|
|
284
|
+
case 'help':
|
|
269
285
|
formattedPrompt = `Provide guidance on the following development question:\n${prompt}`;
|
|
270
286
|
break;
|
|
271
287
|
}
|
|
@@ -294,9 +310,9 @@ export const aiFunction = async (options)=>{
|
|
|
294
310
|
};
|
|
295
311
|
}
|
|
296
312
|
};
|
|
297
|
-
export const ai = new Command('ai').description('Use AI to help with development tasks').option('--provider <provider>', 'AI provider to use (openai, anthropic, cursor)').option('--task <task>', 'Task to perform (explain, generate, test, analyze, ask)').option('--prompt <prompt>', 'Prompt to send to AI').option('--file <file>', 'File to analyze').option('--dir <dir>', 'Directory to analyze').action(async (options)=>{
|
|
313
|
+
export const ai = new Command('ai').description('Use AI to help with development tasks').option('--provider <provider>', 'AI provider to use (openai, anthropic, cursor)').option('--task <task>', 'Task to perform (explain, generate, test, optimize, help, analyze, ask)').option('--prompt <prompt>', 'Prompt to send to AI').option('--file <file>', 'File to analyze').option('--dir <dir>', 'Directory to analyze').action(async (options)=>{
|
|
298
314
|
await aiFunction(options);
|
|
299
315
|
});
|
|
300
316
|
export default ai;
|
|
301
317
|
|
|
302
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9haS9haS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7Q29tbWFuZH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7cmVhZEZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3N5bmMgYXMgZ2xvYlN5bmN9IGZyb20gJ2dsb2InO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y2FsbEFJU2VydmljZX0gZnJvbSAnLi4vLi4vdXRpbHMvYWlTZXJ2aWNlLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuXG5pZihwcm9jZXNzLmVudi5DVVJTT1JfRVhURU5TSU9OID09PSAndHJ1ZScgfHxcbiAgcHJvY2Vzcy5lbnYuQ1VSU09SX1RFUk1JTkFMID09PSAndHJ1ZScgfHxcbiAgcHJvY2Vzcy5lbnYuQ1VSU09SX0FQUCA9PT0gJ3RydWUnIHx8XG4gIHByb2Nlc3MuZW52LlBBVEg/LmluY2x1ZGVzKCdjdXJzb3InKSB8fFxuICBwcm9jZXNzLmVudi5DVVJTT1JfU0VTU0lPTl9JRCkge1xuICBwcm9jZXNzLmVudi5DVVJTT1JfSURFID0gJ3RydWUnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbnRleHQ/OiBib29sZWFuO1xuICByZWFkb25seSBmaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBsZXhDb25maWc/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1vZGVsPzogc3RyaW5nO1xuICByZWFkb25seSBwcm9tcHQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdGFzaz86ICdnZW5lcmF0ZScgfCAnZXhwbGFpbicgfCAndGVzdCcgfCAnb3B0aW1pemUnIHwgJ2hlbHAnIHwgJ2FzaycgfCAnYW5hbHl6ZSc7XG4gIHJlYWRvbmx5IGRlYnVnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcHJvdmlkZXI/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRpcj86IHN0cmluZztcbn1cblxuY29uc3QgZ2V0RmlsZUNvbnRleHQgPSAoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgcmV0dXJuIGBGaWxlOiAke2ZpbGVQYXRofVxcblxcbiR7Y29udGVudH1gO1xuICB9IGNhdGNoKF9lcnJvcikge1xuICAgIHJldHVybiBgRXJyb3IgcmVhZGluZyBmaWxlOiAke2ZpbGVQYXRofWA7XG4gIH1cbn07XG5cbmNvbnN0IGdldFByb2plY3RDb250ZXh0ID0gYXN5bmMgKG9wdGlvbnM6IEFJT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHtmaWxlLCB0YXNrLCBjb250ZXh0fSA9IG9wdGlvbnM7XG5cbiAgaWYoY29udGV4dCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBsZXQgcHJvamVjdENvbnRleHQgPSAnJztcblxuICBpZihmaWxlKSB7XG4gICAgcHJvamVjdENvbnRleHQgKz0gZ2V0RmlsZUNvbnRleHQoZmlsZSk7XG4gIH1cblxuICBzd2l0Y2godGFzaykge1xuICAgIGNhc2UgJ2dlbmVyYXRlJzpcbiAgICAgIGNvbnN0IGZpbGVzID0gZ2xvYlN5bmMoJ3NyYy8qKi8qLnt0cyx0c3gsanMsanN4fScsIHtcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICBpZ25vcmU6IFsnKiovbm9kZV9tb2R1bGVzLyoqJywgJyoqL2xpYi8qKicsICcqKi9kaXN0LyoqJywgJyoqLyoudGVzdC4qJywgJyoqLyouc3BlYy4qJ10sXG4gICAgICAgIG1heERlcHRoOiAzXG4gICAgICB9KTtcbiAgICAgIHByb2plY3RDb250ZXh0ICs9IGBcXG5cXG5Qcm9qZWN0IHN0cnVjdHVyZTpcXG4ke2ZpbGVzLmpvaW4oJ1xcbicpfWA7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Rlc3QnOlxuICAgICAgaWYoZmlsZSkge1xuICAgICAgICBjb25zdCB0ZXN0Q29uZmlnID0gZ2V0RmlsZUNvbnRleHQoJ3ZpdGVzdC5jb25maWcubWpzJyk7XG4gICAgICAgIHByb2plY3RDb250ZXh0ICs9IGBcXG5cXG5UZXN0IGNvbmZpZ3VyYXRpb246XFxuJHt0ZXN0Q29uZmlnfWA7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGltaXplJzpcbiAgICAgIGNvbnN0IGxleENvbmZpZyA9IGdldEZpbGVDb250ZXh0KCdsZXguY29uZmlnLmpzJyk7XG4gICAgICBwcm9qZWN0Q29udGV4dCArPSBgXFxuXFxuTGV4L1ZpdGUgY29uZmlndXJhdGlvbjpcXG4ke2xleENvbmZpZ31gO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gcHJvamVjdENvbnRleHQ7XG59O1xuXG5jb25zdCBjb25zdHJ1Y3RQcm9tcHQgPSAob3B0aW9uczogQUlPcHRpb25zLCBwcm9qZWN0Q29udGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3Qge3Rhc2sgPSAnaGVscCcsIHByb21wdCA9ICcnfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgdGFza0luc3RydWN0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBhbmFseXplOiAnQW5hbHl6ZSB0aGUgZm9sbG93aW5nIGNvZGU6JyxcbiAgICBhc2s6ICdQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb246JyxcbiAgICBleHBsYWluOiAnRXhwbGFpbiB0aGUgZm9sbG93aW5nIGNvZGUgaW4gZGV0YWlsLCBpbmNsdWRpbmcgYW55IHBhdHRlcm5zLCBwb3RlbnRpYWwgaXNzdWVzLCBhbmQgaW1wcm92ZW1lbnQgc3VnZ2VzdGlvbnM6JyxcbiAgICBnZW5lcmF0ZTogJ0dlbmVyYXRlIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcmVxdWVzdC4gTWFrZSBzdXJlIGl0IGZvbGxvd3MgYmVzdCBwcmFjdGljZXMgYW5kIGlzIHdlbGwgZG9jdW1lbnRlZDonLFxuICAgIGhlbHA6ICdQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb246JyxcbiAgICBvcHRpbWl6ZTogJ0FuYWx5emUgdGhlIGZvbGxvd2luZyBjb2RlL2NvbmZpZ3VyYXRpb24gYW5kIHN1Z2dlc3Qgb3B0aW1pemF0aW9uIGltcHJvdmVtZW50czonLFxuICAgIHRlc3Q6ICdHZW5lcmF0ZSBjb21wcmVoZW5zaXZlIHVuaXQgdGVzdHMgZm9yIHRoZSBmb2xsb3dpbmcgY29kZTonXG4gIH07XG5cbiAgY29uc3QgdGFza0luc3RydWN0aW9uID0gdGFza0luc3RydWN0aW9uc1t0YXNrXSB8fCB0YXNrSW5zdHJ1Y3Rpb25zLmhlbHA7XG5cbiAgbGV0IGZ1bGxQcm9tcHQgPSBgJHt0YXNrSW5zdHJ1Y3Rpb259XFxuXFxuJHtwcm9tcHR9YDtcblxuICBpZihwcm9qZWN0Q29udGV4dCkge1xuICAgIGZ1bGxQcm9tcHQgKz0gYFxcblxcbj09PUNPTlRFWFQ9PT1cXG4ke3Byb2plY3RDb250ZXh0fWA7XG4gIH1cblxuICByZXR1cm4gZnVsbFByb21wdDtcbn07XG5cbmNvbnN0IGRpc3BsYXlSZXNwb25zZSA9IChyZXNwb25zZTogYW55LCBvcHRpb25zOiBBSU9wdGlvbnMpOiB2b2lkID0+IHtcbiAgY29uc3Qge3Rhc2sgPSAnaGVscCcsIHF1aWV0ID0gZmFsc2V9ID0gb3B0aW9ucztcblxuICBsZXQgY29udGVudCA9ICcnO1xuXG4gIGlmKHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb250ZW50ID0gcmVzcG9uc2U7XG4gIH0gZWxzZSBpZihyZXNwb25zZS5jaG9pY2VzPy5bMF0/Lm1lc3NhZ2U/LmNvbnRlbnQpIHtcbiAgICBjb25zdCB7Y29udGVudDogbWVzc2FnZUNvbnRlbnR9ID0gcmVzcG9uc2UuY2hvaWNlc1swXS5tZXNzYWdlO1xuICAgIGNvbnRlbnQgPSBtZXNzYWdlQ29udGVudDtcbiAgfSBlbHNlIGlmKHJlc3BvbnNlLmNvbnRlbnQpIHtcbiAgICBjb25zdCB7Y29udGVudDogcmVzcG9uc2VDb250ZW50fSA9IHJlc3BvbnNlO1xuICAgIGNvbnRlbnQgPSByZXNwb25zZUNvbnRlbnQ7XG4gIH0gZWxzZSB7XG4gICAgY29udGVudCA9ICdObyByZXNwb25zZSByZWNlaXZlZCBmcm9tIEFJIG1vZGVsJztcbiAgfVxuXG4gIGNvbnN0IGNsZWFuZWRDb250ZW50ID0gY2xlYW5SZXNwb25zZShjb250ZW50LCBvcHRpb25zKTtcblxuICBzd2l0Y2godGFzaykge1xuICAgIGNhc2UgJ2dlbmVyYXRlJzpcbiAgICAgIGxvZygnXFxuR2VuZXJhdGVkIENvZGU6XFxuJywgJ3N1Y2Nlc3MnLCBxdWlldCk7XG4gICAgICBsb2coY2xlYW5lZENvbnRlbnQsICdkZWZhdWx0JywgcXVpZXQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdleHBsYWluJzpcbiAgICAgIGxvZygnXFxuQ29kZSBFeHBsYW5hdGlvbjpcXG4nLCAnc3VjY2VzcycsIHF1aWV0KTtcbiAgICAgIGxvZyhjbGVhbmVkQ29udGVudCwgJ2RlZmF1bHQnLCBxdWlldCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Rlc3QnOlxuICAgICAgbG9nKCdcXG5HZW5lcmF0ZWQgVGVzdHM6XFxuJywgJ3N1Y2Nlc3MnLCBxdWlldCk7XG4gICAgICBsb2coY2xlYW5lZENvbnRlbnQsICdkZWZhdWx0JywgcXVpZXQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpbWl6ZSc6XG4gICAgICBsb2coJ1xcbk9wdGltaXphdGlvbiBTdWdnZXN0aW9uczpcXG4nLCAnc3VjY2VzcycsIHF1aWV0KTtcbiAgICAgIGxvZyhjbGVhbmVkQ29udGVudCwgJ2RlZmF1bHQnLCBxdWlldCk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBsb2coJ1xcbkFJIFJlc3BvbnNlOlxcbicsICdzdWNjZXNzJywgcXVpZXQpO1xuICAgICAgbG9nKGNsZWFuZWRDb250ZW50LCAnZGVmYXVsdCcsIHF1aWV0KTtcbiAgICAgIGJyZWFrO1xuICB9XG59O1xuXG5jb25zdCBjbGVhblJlc3BvbnNlID0gKGNvbnRlbnQ6IHN0cmluZywgb3B0aW9uczogQUlPcHRpb25zKTogc3RyaW5nID0+IHtcbiAgY29uc3Qge3Byb21wdCA9ICcnLCB0YXNrID0gJ2hlbHAnfSA9IG9wdGlvbnM7XG5cbiAgaWYoIWNvbnRlbnQpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGxldCBjbGVhbmVkQ29udGVudCA9IGNvbnRlbnQ7XG5cbiAgY29uc3QgdGFza0luc3RydWN0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBhbmFseXplOiAnQW5hbHl6ZSB0aGUgZm9sbG93aW5nIGNvZGU6JyxcbiAgICBhc2s6ICdQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb246JyxcbiAgICBleHBsYWluOiAnRXhwbGFpbiB0aGUgZm9sbG93aW5nIGNvZGUgaW4gZGV0YWlsLCBpbmNsdWRpbmcgYW55IHBhdHRlcm5zLCBwb3RlbnRpYWwgaXNzdWVzLCBhbmQgaW1wcm92ZW1lbnQgc3VnZ2VzdGlvbnM6JyxcbiAgICBnZW5lcmF0ZTogJ0dlbmVyYXRlIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcmVxdWVzdC4gTWFrZSBzdXJlIGl0IGZvbGxvd3MgYmVzdCBwcmFjdGljZXMgYW5kIGlzIHdlbGwgZG9jdW1lbnRlZDonLFxuICAgIGhlbHA6ICdQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb246JyxcbiAgICBvcHRpbWl6ZTogJ0FuYWx5emUgdGhlIGZvbGxvd2luZyBjb2RlL2NvbmZpZ3VyYXRpb24gYW5kIHN1Z2dlc3Qgb3B0aW1pemF0aW9uIGltcHJvdmVtZW50czonLFxuICAgIHRlc3Q6ICdHZW5lcmF0ZSBjb21wcmVoZW5zaXZlIHVuaXQgdGVzdHMgZm9yIHRoZSBmb2xsb3dpbmcgY29kZTonXG4gIH07XG5cbiAgY29uc3QgaW5zdHJ1Y3Rpb24gPSB0YXNrSW5zdHJ1Y3Rpb25zW3Rhc2tdIHx8ICcnO1xuXG4gIGlmKGluc3RydWN0aW9uICYmIGNsZWFuZWRDb250ZW50LmluY2x1ZGVzKGluc3RydWN0aW9uKSkge1xuICAgIGNsZWFuZWRDb250ZW50ID0gY2xlYW5lZENvbnRlbnQucmVwbGFjZShpbnN0cnVjdGlvbiwgJycpLnRyaW0oKTtcbiAgfVxuXG4gIGlmKHByb21wdCAmJiBjbGVhbmVkQ29udGVudC5pbmNsdWRlcyhwcm9tcHQpKSB7XG4gICAgY2xlYW5lZENvbnRlbnQgPSBjbGVhbmVkQ29udGVudC5yZXBsYWNlKHByb21wdCwgJycpLnRyaW0oKTtcbiAgfVxuXG4gIGlmKGNsZWFuZWRDb250ZW50LmluY2x1ZGVzKCc9PT1DT05URVhUPT09JykpIHtcbiAgICBjbGVhbmVkQ29udGVudCA9IGNsZWFuZWRDb250ZW50LnNwbGl0KCc9PT1DT05URVhUPT09JylbMF0udHJpbSgpO1xuICB9XG5cbiAgaWYoIWNsZWFuZWRDb250ZW50KSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gY2xlYW5lZENvbnRlbnQ7XG59O1xuXG5jb25zdCBnZXRQcm92aWRlckF1dGggPSAocHJvdmlkZXI6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmKHByb2Nlc3MuY3dkKCkuaW5jbHVkZXMoJ3JlYWt0b3InKSkge1xuICAgIHJldHVybiAnY3Vyc29yLWF1dGgnO1xuICB9XG5cbiAgaWYocHJvY2Vzcy5lbnYuQUlfQVBJX0tFWSkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5BSV9BUElfS0VZO1xuICB9XG5cbiAgaWYocHJvdmlkZXIgPT09ICdub25lJyAmJiBwcm9jZXNzLmVudi5DVVJTT1JfSURFID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gJ2N1cnNvci1hdXRoJztcbiAgfVxuXG4gIHN3aXRjaChwcm92aWRlcikge1xuICAgIGNhc2UgJ29wZW5haSc6XG4gICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVk7XG4gICAgY2FzZSAnYW50aHJvcGljJzpcbiAgICAgIHJldHVybiBwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWTtcbiAgICBjYXNlICdjdXJzb3InOlxuICAgICAgcmV0dXJuICdjdXJzb3ItYXV0aCc7XG4gICAgY2FzZSAnY29waWxvdCc6XG4gICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOO1xuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufTtcblxuY29uc3QgZGV0ZWN0Q3Vyc29ySURFID0gKCk6IGJvb2xlYW4gPT4ge1xuICBpZihwcm9jZXNzLmVudi5DVVJTT1JfSURFID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHBvc3NpYmxlQ3Vyc29yU2lnbmFscyA9IFtcbiAgICBwcm9jZXNzLmVudi5DVVJTT1JfRVhURU5TSU9OID09PSAndHJ1ZScsXG4gICAgcHJvY2Vzcy5lbnYuQ1VSU09SX1RFUk1JTkFMID09PSAndHJ1ZScsXG4gICAgcHJvY2Vzcy5lbnYuQ1VSU09SX0FQUCA9PT0gJ3RydWUnLFxuICAgIHByb2Nlc3MuZW52LlBBVEg/LmluY2x1ZGVzKCdjdXJzb3InKSxcbiAgICAhIXByb2Nlc3MuZW52LkNVUlNPUl9TRVNTSU9OX0lEXG4gIF07XG5cbiAgY29uc3QgaXNDdXJzb3JJREUgPSBwb3NzaWJsZUN1cnNvclNpZ25hbHMuc29tZSgoc2lnbmFsKSA9PiBzaWduYWwpO1xuXG4gIGlmKGlzQ3Vyc29ySURFKSB7XG4gICAgcHJvY2Vzcy5lbnYuQ1VSU09SX0lERSA9ICd0cnVlJztcbiAgfVxuXG4gIHJldHVybiBpc0N1cnNvcklERTtcbn07XG5cbmV4cG9ydCBjb25zdCBhaUZ1bmN0aW9uID0gYXN5bmMgKG9wdGlvbnM6IEFJT3B0aW9ucyk6IFByb21pc2U8YW55PiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gTGV4Q29uZmlnLmNvbmZpZyB8fCB7fTtcbiAgICBjb25zdCBhaUNvbmZpZyA9IGNvbmZpZy5haSB8fCB7fTtcbiAgICBjb25zdCBwcm92aWRlciA9IG9wdGlvbnMucHJvdmlkZXIgfHwgYWlDb25maWcucHJvdmlkZXIgfHwgJ25vbmUnO1xuXG4gICAgaWYocHJvdmlkZXIgPT09ICdub25lJyAmJiAhcHJvY2Vzcy5lbnYuQ1VSU09SX0VYVEVOU0lPTikge1xuICAgICAgbG9nKGAke2NoYWxrLnJlZCgnRXJyb3I6Jyl9IE5vIEFJIHByb3ZpZGVyIGNvbmZpZ3VyZWQuYCwgJ2Vycm9yJyk7XG4gICAgICByZXR1cm4ge2Vycm9yOiAnTm8gQUkgcHJvdmlkZXIgY29uZmlndXJlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHRhc2sgPSBvcHRpb25zLnRhc2sgfHwgJ2Fzayc7XG4gICAgY29uc3QgdmFsaWRUYXNrcyA9IFsnZXhwbGFpbicsICdnZW5lcmF0ZScsICd0ZXN0JywgJ2FuYWx5emUnLCAnYXNrJ107XG5cbiAgICBpZighdmFsaWRUYXNrcy5pbmNsdWRlcyh0YXNrKSkge1xuICAgICAgbG9nKGAke2NoYWxrLnJlZCgnRXJyb3I6Jyl9IEludmFsaWQgdGFzayBcIiR7dGFza31cIi4gVmFsaWQgdGFza3MgYXJlOiAke3ZhbGlkVGFza3Muam9pbignLCAnKX1gLCAnZXJyb3InKTtcbiAgICAgIHJldHVybiB7ZXJyb3I6IGBJbnZhbGlkIHRhc2sgXCIke3Rhc2t9XCJgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7cHJvbXB0fSA9IG9wdGlvbnM7XG5cbiAgICBpZighcHJvbXB0KSB7XG4gICAgICBsb2coYCR7Y2hhbGsucmVkKCdFcnJvcjonKX0gTm8gcHJvbXB0IHByb3ZpZGVkLiBVc2UgLS1wcm9tcHQgXCJZb3VyIHByb21wdCBoZXJlXCJgLCAnZXJyb3InKTtcbiAgICAgIHJldHVybiB7ZXJyb3I6ICdObyBwcm9tcHQgcHJvdmlkZWQnfTtcbiAgICB9XG5cbiAgICBsZXQgY29udGV4dCA9ICcnO1xuXG4gICAgaWYob3B0aW9ucy5maWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydCgnZnMvcHJvbWlzZXMnKTtcbiAgICAgICAgY29uc3QgZ2xvYiA9IGF3YWl0IGltcG9ydCgnZ2xvYicpO1xuICAgICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGdsb2IuZ2xvYihvcHRpb25zLmZpbGUpO1xuXG4gICAgICAgIGlmKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGxvZyhgJHtjaGFsay55ZWxsb3coJ1dhcm5pbmc6Jyl9IE5vIGZpbGVzIGZvdW5kIG1hdGNoaW5nIFwiJHtvcHRpb25zLmZpbGV9XCJgLCAnd2FybmluZycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcihjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZSwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIGNvbnRleHQgKz0gYFxcbj09PUZJTEU6ICR7ZmlsZX09PT1cXG4ke2NvbnRlbnR9XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgbG9nKGAke2NoYWxrLnllbGxvdygnV2FybmluZzonKX0gRXJyb3IgcmVhZGluZyBmaWxlOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm5pbmcnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihvcHRpb25zLmRpcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qge2V4ZWNhU3luY30gPSBhd2FpdCBpbXBvcnQoJ2V4ZWNhJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWNhU3luYygnZmluZCcsIFtvcHRpb25zLmRpciwgJy10eXBlJywgJ2YnLCAnfCcsICdzb3J0J10pO1xuICAgICAgICBjb250ZXh0ICs9IGBcXG49PT1Qcm9qZWN0IHN0cnVjdHVyZTo9PT1cXG4ke3Jlc3VsdC5zdGRvdXR9XFxuYDtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgbG9nKGAke2NoYWxrLnllbGxvdygnV2FybmluZzonKX0gRXJyb3IgcmVhZGluZyBkaXJlY3Rvcnk6ICR7ZXJyb3IubWVzc2FnZX1gLCAnd2FybmluZycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBmb3JtYXR0ZWRQcm9tcHQgPSAnJztcblxuICAgIHN3aXRjaCh0YXNrKSB7XG4gICAgICBjYXNlICdleHBsYWluJzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYEV4cGxhaW4gdGhlIGZvbGxvd2luZyBjb2RlOlxcbiR7cHJvbXB0fWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2VuZXJhdGUnOlxuICAgICAgICBmb3JtYXR0ZWRQcm9tcHQgPSBgR2VuZXJhdGUgY29kZSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyByZXF1ZXN0OlxcbiR7cHJvbXB0fWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGVzdCc6XG4gICAgICAgIGZvcm1hdHRlZFByb21wdCA9IGBHZW5lcmF0ZSBjb21wcmVoZW5zaXZlIHVuaXQgdGVzdHM6XFxuJHtwcm9tcHR9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhbmFseXplJzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYEFuYWx5emUgdGhlIGZvbGxvd2luZyBjb2RlOlxcbiR7cHJvbXB0fWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXNrJzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYFByb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjpcXG4ke3Byb21wdH1gO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZihjb250ZXh0KSB7XG4gICAgICBmb3JtYXR0ZWRQcm9tcHQgKz0gYFxcbj09PUNPTlRFWFQ9PT1cXG4ke2NvbnRleHR9YDtcbiAgICB9XG5cbiAgICBpZigocHJvdmlkZXIgPT09ICdjdXJzb3InIHx8IHByb2Nlc3MuZW52LkNVUlNPUl9FWFRFTlNJT04pICYmIHRhc2sgPT09ICdnZW5lcmF0ZScpIHtcbiAgICAgIGxvZygnVXNpbmcgQ3Vyc29yIElERSBmb3IgY29kZSBnZW5lcmF0aW9uLi4uJywgJ2luZm8nKTtcbiAgICAgIGxvZygnTm90ZTogRm9yIGZ1bGwgY29kZSBnZW5lcmF0aW9uIGNhcGFiaWxpdGllcywgcGxlYXNlIHVzZSBDdXJzb3IgSURFIGRpcmVjdGx5IHdpdGggQ21kK0wgb3IgQ21kK0suJywgJ2luZm8nKTtcbiAgICAgIGxvZygnVGhlIENMSSBpbnRlZ3JhdGlvbiBoYXMgbGltaXRlZCBjYXBhYmlsaXRpZXMgZm9yIGNvZGUgZ2VuZXJhdGlvbi4nLCAnd2FybmluZycpO1xuICAgIH0gZWxzZSBpZihwcm92aWRlciA9PT0gJ2N1cnNvcicgfHwgcHJvY2Vzcy5lbnYuQ1VSU09SX0VYVEVOU0lPTikge1xuICAgICAgbG9nKCdVc2luZyBDdXJzb3IgSURFIGZvciBBSSBhc3Npc3RhbmNlLi4uJywgJ2luZm8nKTtcbiAgICAgIGxvZygnTm90ZTogVGhpcyBpcyBhIGxpbWl0ZWQgaW50ZWdyYXRpb24uIEZvciBmdWxsIEFJIGNhcGFiaWxpdGllcywgdXNlIEN1cnNvciBJREUgZGlyZWN0bHkuJywgJ2luZm8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nKGBVc2luZyAke3Byb3ZpZGVyfSBmb3IgQUkgYXNzaXN0YW5jZS4uLmAsICdpbmZvJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjYWxsQUlTZXJ2aWNlKGZvcm1hdHRlZFByb21wdCwgb3B0aW9ucy5xdWlldCB8fCBmYWxzZSk7XG5cbiAgICBsb2coYFxcbiR7cmVzcG9uc2V9YCwgJ3N1Y2Nlc3MnKTtcblxuICAgIHJldHVybiB7cmVzcG9uc2V9O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGAke2NoYWxrLnJlZCgnRXJyb3I6Jyl9ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgICByZXR1cm4ge2Vycm9yOiBlcnJvci5tZXNzYWdlfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFpID0gbmV3IENvbW1hbmQoJ2FpJylcbiAgLmRlc2NyaXB0aW9uKCdVc2UgQUkgdG8gaGVscCB3aXRoIGRldmVsb3BtZW50IHRhc2tzJylcbiAgLm9wdGlvbignLS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0FJIHByb3ZpZGVyIHRvIHVzZSAob3BlbmFpLCBhbnRocm9waWMsIGN1cnNvciknKVxuICAub3B0aW9uKCctLXRhc2sgPHRhc2s+JywgJ1Rhc2sgdG8gcGVyZm9ybSAoZXhwbGFpbiwgZ2VuZXJhdGUsIHRlc3QsIGFuYWx5emUsIGFzayknKVxuICAub3B0aW9uKCctLXByb21wdCA8cHJvbXB0PicsICdQcm9tcHQgdG8gc2VuZCB0byBBSScpXG4gIC5vcHRpb24oJy0tZmlsZSA8ZmlsZT4nLCAnRmlsZSB0byBhbmFseXplJylcbiAgLm9wdGlvbignLS1kaXIgPGRpcj4nLCAnRGlyZWN0b3J5IHRvIGFuYWx5emUnKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBBSU9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBhaUZ1bmN0aW9uKG9wdGlvbnMpO1xuICB9KTtcblxuZXhwb3J0IGRlZmF1bHQgYWk7XG4iXSwibmFtZXMiOlsiY2hhbGsiLCJDb21tYW5kIiwicmVhZEZpbGVTeW5jIiwic3luYyIsImdsb2JTeW5jIiwiTGV4Q29uZmlnIiwiY2FsbEFJU2VydmljZSIsImxvZyIsInByb2Nlc3MiLCJlbnYiLCJDVVJTT1JfRVhURU5TSU9OIiwiQ1VSU09SX1RFUk1JTkFMIiwiQ1VSU09SX0FQUCIsIlBBVEgiLCJpbmNsdWRlcyIsIkNVUlNPUl9TRVNTSU9OX0lEIiwiQ1VSU09SX0lERSIsImdldEZpbGVDb250ZXh0IiwiZmlsZVBhdGgiLCJjb250ZW50IiwiX2Vycm9yIiwiZ2V0UHJvamVjdENvbnRleHQiLCJvcHRpb25zIiwiZmlsZSIsInRhc2siLCJjb250ZXh0IiwicHJvamVjdENvbnRleHQiLCJmaWxlcyIsImN3ZCIsImlnbm9yZSIsIm1heERlcHRoIiwiam9pbiIsInRlc3RDb25maWciLCJsZXhDb25maWciLCJjb25zdHJ1Y3RQcm9tcHQiLCJwcm9tcHQiLCJ0YXNrSW5zdHJ1Y3Rpb25zIiwiYW5hbHl6ZSIsImFzayIsImV4cGxhaW4iLCJnZW5lcmF0ZSIsImhlbHAiLCJvcHRpbWl6ZSIsInRlc3QiLCJ0YXNrSW5zdHJ1Y3Rpb24iLCJmdWxsUHJvbXB0IiwiZGlzcGxheVJlc3BvbnNlIiwicmVzcG9uc2UiLCJxdWlldCIsImNob2ljZXMiLCJtZXNzYWdlIiwibWVzc2FnZUNvbnRlbnQiLCJyZXNwb25zZUNvbnRlbnQiLCJjbGVhbmVkQ29udGVudCIsImNsZWFuUmVzcG9uc2UiLCJpbnN0cnVjdGlvbiIsInJlcGxhY2UiLCJ0cmltIiwic3BsaXQiLCJnZXRQcm92aWRlckF1dGgiLCJwcm92aWRlciIsIkFJX0FQSV9LRVkiLCJPUEVOQUlfQVBJX0tFWSIsIkFOVEhST1BJQ19BUElfS0VZIiwiR0lUSFVCX1RPS0VOIiwidW5kZWZpbmVkIiwiZGV0ZWN0Q3Vyc29ySURFIiwicG9zc2libGVDdXJzb3JTaWduYWxzIiwiaXNDdXJzb3JJREUiLCJzb21lIiwic2lnbmFsIiwiYWlGdW5jdGlvbiIsImNvbmZpZyIsImFpQ29uZmlnIiwiYWkiLCJyZWQiLCJlcnJvciIsInZhbGlkVGFza3MiLCJmcyIsImdsb2IiLCJsZW5ndGgiLCJ5ZWxsb3ciLCJyZWFkRmlsZSIsImRpciIsImV4ZWNhU3luYyIsInJlc3VsdCIsInN0ZG91dCIsImZvcm1hdHRlZFByb21wdCIsImRlc2NyaXB0aW9uIiwib3B0aW9uIiwiYWN0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsU0FBUUMsT0FBTyxRQUFPLFlBQVk7QUFDbEMsU0FBUUMsWUFBWSxRQUFPLEtBQUs7QUFDaEMsU0FBUUMsUUFBUUMsUUFBUSxRQUFPLE9BQU87QUFFdEMsU0FBUUMsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyxhQUFhLFFBQU8sMkJBQTJCO0FBQ3ZELFNBQVFDLEdBQUcsUUFBTyxxQkFBcUI7QUFFdkMsSUFBR0MsUUFBUUMsR0FBRyxDQUFDQyxnQkFBZ0IsS0FBSyxVQUNsQ0YsUUFBUUMsR0FBRyxDQUFDRSxlQUFlLEtBQUssVUFDaENILFFBQVFDLEdBQUcsQ0FBQ0csVUFBVSxLQUFLLFVBQzNCSixRQUFRQyxHQUFHLENBQUNJLElBQUksRUFBRUMsU0FBUyxhQUMzQk4sUUFBUUMsR0FBRyxDQUFDTSxpQkFBaUIsRUFBRTtJQUMvQlAsUUFBUUMsR0FBRyxDQUFDTyxVQUFVLEdBQUc7QUFDM0I7QUFnQkEsTUFBTUMsaUJBQWlCLENBQUNDO0lBQ3RCLElBQUk7UUFDRixNQUFNQyxVQUFVakIsYUFBYWdCLFVBQVU7UUFDdkMsT0FBTyxDQUFDLE1BQU0sRUFBRUEsU0FBUyxJQUFJLEVBQUVDLFNBQVM7SUFDMUMsRUFBRSxPQUFNQyxRQUFRO1FBQ2QsT0FBTyxDQUFDLG9CQUFvQixFQUFFRixVQUFVO0lBQzFDO0FBQ0Y7QUFFQSxNQUFNRyxvQkFB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
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9haS9haS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7Q29tbWFuZH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7cmVhZEZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3N5bmMgYXMgZ2xvYlN5bmN9IGZyb20gJ2dsb2InO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y2FsbEFJU2VydmljZX0gZnJvbSAnLi4vLi4vdXRpbHMvYWlTZXJ2aWNlLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuXG5pbXBvcnQgdHlwZSB7QUlDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5cbmlmKHByb2Nlc3MuZW52LkNVUlNPUl9FWFRFTlNJT04gPT09ICd0cnVlJyB8fFxuICBwcm9jZXNzLmVudi5DVVJTT1JfVEVSTUlOQUwgPT09ICd0cnVlJyB8fFxuICBwcm9jZXNzLmVudi5DVVJTT1JfQVBQID09PSAndHJ1ZScgfHxcbiAgcHJvY2Vzcy5lbnYuUEFUSD8uaW5jbHVkZXMoJ2N1cnNvcicpIHx8XG4gIHByb2Nlc3MuZW52LkNVUlNPUl9TRVNTSU9OX0lEKSB7XG4gIHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPSAndHJ1ZSc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlPcHRpb25zIHtcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgY29udGV4dD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxleENvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgbW9kZWw/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb21wdD86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSB0YXNrPzogJ2dlbmVyYXRlJyB8ICdleHBsYWluJyB8ICd0ZXN0JyB8ICdvcHRpbWl6ZScgfCAnaGVscCcgfCAnYXNrJyB8ICdhbmFseXplJztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBwcm92aWRlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgZGlyPzogc3RyaW5nO1xufVxuXG5jb25zdCBnZXRGaWxlQ29udGV4dCA9IChmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50ID0gcmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICByZXR1cm4gYEZpbGU6ICR7ZmlsZVBhdGh9XFxuXFxuJHtjb250ZW50fWA7XG4gIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgcmV0dXJuIGBFcnJvciByZWFkaW5nIGZpbGU6ICR7ZmlsZVBhdGh9YDtcbiAgfVxufTtcblxuY29uc3QgZ2V0UHJvamVjdENvbnRleHQgPSBhc3luYyAob3B0aW9uczogQUlPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3Qge2ZpbGUsIHRhc2ssIGNvbnRleHR9ID0gb3B0aW9ucztcblxuICBpZihjb250ZXh0ID09PSBmYWxzZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGxldCBwcm9qZWN0Q29udGV4dCA9ICcnO1xuXG4gIGlmKGZpbGUpIHtcbiAgICBwcm9qZWN0Q29udGV4dCArPSBnZXRGaWxlQ29udGV4dChmaWxlKTtcbiAgfVxuXG4gIHN3aXRjaCh0YXNrKSB7XG4gICAgY2FzZSAnZ2VuZXJhdGUnOlxuICAgICAgY29uc3QgZmlsZXMgPSBnbG9iU3luYygnc3JjLyoqLyoue3RzLHRzeCxqcyxqc3h9Jywge1xuICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICAgIGlnbm9yZTogWycqKi9ub2RlX21vZHVsZXMvKionLCAnKiovbGliLyoqJywgJyoqL2Rpc3QvKionLCAnKiovKi50ZXN0LionLCAnKiovKi5zcGVjLionXSxcbiAgICAgICAgbWF4RGVwdGg6IDNcbiAgICAgIH0pO1xuICAgICAgcHJvamVjdENvbnRleHQgKz0gYFxcblxcblByb2plY3Qgc3RydWN0dXJlOlxcbiR7ZmlsZXMuam9pbignXFxuJyl9YDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGVzdCc6XG4gICAgICBpZihmaWxlKSB7XG4gICAgICAgIGNvbnN0IHRlc3RDb25maWcgPSBnZXRGaWxlQ29udGV4dCgndml0ZXN0LmNvbmZpZy5tanMnKTtcbiAgICAgICAgcHJvamVjdENvbnRleHQgKz0gYFxcblxcblRlc3QgY29uZmlndXJhdGlvbjpcXG4ke3Rlc3RDb25maWd9YDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW1pemUnOlxuICAgICAgY29uc3QgbGV4Q29uZmlnID0gZ2V0RmlsZUNvbnRleHQoJ2xleC5jb25maWcuanMnKTtcbiAgICAgIHByb2plY3RDb250ZXh0ICs9IGBcXG5cXG5MZXgvVml0ZSBjb25maWd1cmF0aW9uOlxcbiR7bGV4Q29uZmlnfWA7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBwcm9qZWN0Q29udGV4dDtcbn07XG5cbmNvbnN0IGNvbnN0cnVjdFByb21wdCA9IChvcHRpb25zOiBBSU9wdGlvbnMsIHByb2plY3RDb250ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB7dGFzayA9ICdoZWxwJywgcHJvbXB0ID0gJyd9ID0gb3B0aW9ucztcblxuICBjb25zdCB0YXNrSW5zdHJ1Y3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGFuYWx5emU6ICdBbmFseXplIHRoZSBmb2xsb3dpbmcgY29kZTonLFxuICAgIGFzazogJ1Byb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjonLFxuICAgIGV4cGxhaW46ICdFeHBsYWluIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBkZXRhaWwsIGluY2x1ZGluZyBhbnkgcGF0dGVybnMsIHBvdGVudGlhbCBpc3N1ZXMsIGFuZCBpbXByb3ZlbWVudCBzdWdnZXN0aW9uczonLFxuICAgIGdlbmVyYXRlOiAnR2VuZXJhdGUgY29kZSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyByZXF1ZXN0LiBNYWtlIHN1cmUgaXQgZm9sbG93cyBiZXN0IHByYWN0aWNlcyBhbmQgaXMgd2VsbCBkb2N1bWVudGVkOicsXG4gICAgaGVscDogJ1Byb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjonLFxuICAgIG9wdGltaXplOiAnQW5hbHl6ZSB0aGUgZm9sbG93aW5nIGNvZGUvY29uZmlndXJhdGlvbiBhbmQgc3VnZ2VzdCBvcHRpbWl6YXRpb24gaW1wcm92ZW1lbnRzOicsXG4gICAgdGVzdDogJ0dlbmVyYXRlIGNvbXByZWhlbnNpdmUgdW5pdCB0ZXN0cyBmb3IgdGhlIGZvbGxvd2luZyBjb2RlOidcbiAgfTtcblxuICBjb25zdCB0YXNrSW5zdHJ1Y3Rpb24gPSB0YXNrSW5zdHJ1Y3Rpb25zW3Rhc2tdIHx8IHRhc2tJbnN0cnVjdGlvbnMuaGVscDtcblxuICBsZXQgZnVsbFByb21wdCA9IGAke3Rhc2tJbnN0cnVjdGlvbn1cXG5cXG4ke3Byb21wdH1gO1xuXG4gIGlmKHByb2plY3RDb250ZXh0KSB7XG4gICAgZnVsbFByb21wdCArPSBgXFxuXFxuPT09Q09OVEVYVD09PVxcbiR7cHJvamVjdENvbnRleHR9YDtcbiAgfVxuXG4gIHJldHVybiBmdWxsUHJvbXB0O1xufTtcblxuY29uc3QgZGlzcGxheVJlc3BvbnNlID0gKHJlc3BvbnNlOiBhbnksIG9wdGlvbnM6IEFJT3B0aW9ucyk6IHZvaWQgPT4ge1xuICBjb25zdCB7dGFzayA9ICdoZWxwJywgcXVpZXQgPSBmYWxzZX0gPSBvcHRpb25zO1xuXG4gIGxldCBjb250ZW50ID0gJyc7XG5cbiAgaWYodHlwZW9mIHJlc3BvbnNlID09PSAnc3RyaW5nJykge1xuICAgIGNvbnRlbnQgPSByZXNwb25zZTtcbiAgfSBlbHNlIGlmKHJlc3BvbnNlLmNob2ljZXM/LlswXT8ubWVzc2FnZT8uY29udGVudCkge1xuICAgIGNvbnN0IHtjb250ZW50OiBtZXNzYWdlQ29udGVudH0gPSByZXNwb25zZS5jaG9pY2VzWzBdLm1lc3NhZ2U7XG4gICAgY29udGVudCA9IG1lc3NhZ2VDb250ZW50O1xuICB9IGVsc2UgaWYocmVzcG9uc2UuY29udGVudCkge1xuICAgIGNvbnN0IHtjb250ZW50OiByZXNwb25zZUNvbnRlbnR9ID0gcmVzcG9uc2U7XG4gICAgY29udGVudCA9IHJlc3BvbnNlQ29udGVudDtcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50ID0gJ05vIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gQUkgbW9kZWwnO1xuICB9XG5cbiAgY29uc3QgY2xlYW5lZENvbnRlbnQgPSBjbGVhblJlc3BvbnNlKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG4gIHN3aXRjaCh0YXNrKSB7XG4gICAgY2FzZSAnZ2VuZXJhdGUnOlxuICAgICAgbG9nKCdcXG5HZW5lcmF0ZWQgQ29kZTpcXG4nLCAnc3VjY2VzcycsIHF1aWV0KTtcbiAgICAgIGxvZyhjbGVhbmVkQ29udGVudCwgJ2RlZmF1bHQnLCBxdWlldCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2V4cGxhaW4nOlxuICAgICAgbG9nKCdcXG5Db2RlIEV4cGxhbmF0aW9uOlxcbicsICdzdWNjZXNzJywgcXVpZXQpO1xuICAgICAgbG9nKGNsZWFuZWRDb250ZW50LCAnZGVmYXVsdCcsIHF1aWV0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGVzdCc6XG4gICAgICBsb2coJ1xcbkdlbmVyYXRlZCBUZXN0czpcXG4nLCAnc3VjY2VzcycsIHF1aWV0KTtcbiAgICAgIGxvZyhjbGVhbmVkQ29udGVudCwgJ2RlZmF1bHQnLCBxdWlldCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGltaXplJzpcbiAgICAgIGxvZygnXFxuT3B0aW1pemF0aW9uIFN1Z2dlc3Rpb25zOlxcbicsICdzdWNjZXNzJywgcXVpZXQpO1xuICAgICAgbG9nKGNsZWFuZWRDb250ZW50LCAnZGVmYXVsdCcsIHF1aWV0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGxvZygnXFxuQUkgUmVzcG9uc2U6XFxuJywgJ3N1Y2Nlc3MnLCBxdWlldCk7XG4gICAgICBsb2coY2xlYW5lZENvbnRlbnQsICdkZWZhdWx0JywgcXVpZXQpO1xuICAgICAgYnJlYWs7XG4gIH1cbn07XG5cbmNvbnN0IGNsZWFuUmVzcG9uc2UgPSAoY29udGVudDogc3RyaW5nLCBvcHRpb25zOiBBSU9wdGlvbnMpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB7cHJvbXB0ID0gJycsIHRhc2sgPSAnaGVscCd9ID0gb3B0aW9ucztcblxuICBpZighY29udGVudCkge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgbGV0IGNsZWFuZWRDb250ZW50ID0gY29udGVudDtcblxuICBjb25zdCB0YXNrSW5zdHJ1Y3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGFuYWx5emU6ICdBbmFseXplIHRoZSBmb2xsb3dpbmcgY29kZTonLFxuICAgIGFzazogJ1Byb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjonLFxuICAgIGV4cGxhaW46ICdFeHBsYWluIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBkZXRhaWwsIGluY2x1ZGluZyBhbnkgcGF0dGVybnMsIHBvdGVudGlhbCBpc3N1ZXMsIGFuZCBpbXByb3ZlbWVudCBzdWdnZXN0aW9uczonLFxuICAgIGdlbmVyYXRlOiAnR2VuZXJhdGUgY29kZSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyByZXF1ZXN0LiBNYWtlIHN1cmUgaXQgZm9sbG93cyBiZXN0IHByYWN0aWNlcyBhbmQgaXMgd2VsbCBkb2N1bWVudGVkOicsXG4gICAgaGVscDogJ1Byb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjonLFxuICAgIG9wdGltaXplOiAnQW5hbHl6ZSB0aGUgZm9sbG93aW5nIGNvZGUvY29uZmlndXJhdGlvbiBhbmQgc3VnZ2VzdCBvcHRpbWl6YXRpb24gaW1wcm92ZW1lbnRzOicsXG4gICAgdGVzdDogJ0dlbmVyYXRlIGNvbXByZWhlbnNpdmUgdW5pdCB0ZXN0cyBmb3IgdGhlIGZvbGxvd2luZyBjb2RlOidcbiAgfTtcblxuICBjb25zdCBpbnN0cnVjdGlvbiA9IHRhc2tJbnN0cnVjdGlvbnNbdGFza10gfHwgJyc7XG5cbiAgaWYoaW5zdHJ1Y3Rpb24gJiYgY2xlYW5lZENvbnRlbnQuaW5jbHVkZXMoaW5zdHJ1Y3Rpb24pKSB7XG4gICAgY2xlYW5lZENvbnRlbnQgPSBjbGVhbmVkQ29udGVudC5yZXBsYWNlKGluc3RydWN0aW9uLCAnJykudHJpbSgpO1xuICB9XG5cbiAgaWYocHJvbXB0ICYmIGNsZWFuZWRDb250ZW50LmluY2x1ZGVzKHByb21wdCkpIHtcbiAgICBjbGVhbmVkQ29udGVudCA9IGNsZWFuZWRDb250ZW50LnJlcGxhY2UocHJvbXB0LCAnJykudHJpbSgpO1xuICB9XG5cbiAgaWYoY2xlYW5lZENvbnRlbnQuaW5jbHVkZXMoJz09PUNPTlRFWFQ9PT0nKSkge1xuICAgIGNsZWFuZWRDb250ZW50ID0gY2xlYW5lZENvbnRlbnQuc3BsaXQoJz09PUNPTlRFWFQ9PT0nKVswXS50cmltKCk7XG4gIH1cblxuICBpZighY2xlYW5lZENvbnRlbnQpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHJldHVybiBjbGVhbmVkQ29udGVudDtcbn07XG5cbmNvbnN0IGdldFByb3ZpZGVyQXV0aCA9IChwcm92aWRlcjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYocHJvY2Vzcy5jd2QoKS5pbmNsdWRlcygncmVha3RvcicpKSB7XG4gICAgcmV0dXJuICdjdXJzb3ItYXV0aCc7XG4gIH1cblxuICBpZihwcm9jZXNzLmVudi5BSV9BUElfS0VZKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LkFJX0FQSV9LRVk7XG4gIH1cblxuICBpZihwcm92aWRlciA9PT0gJ25vbmUnICYmIHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJykge1xuICAgIHJldHVybiAnY3Vyc29yLWF1dGgnO1xuICB9XG5cbiAgc3dpdGNoKHByb3ZpZGVyKSB7XG4gICAgY2FzZSAnb3BlbmFpJzpcbiAgICAgIHJldHVybiBwcm9jZXNzLmVudi5PUEVOQUlfQVBJX0tFWTtcbiAgICBjYXNlICdhbnRocm9waWMnOlxuICAgICAgcmV0dXJuIHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZO1xuICAgIGNhc2UgJ2N1cnNvcic6XG4gICAgICByZXR1cm4gJ2N1cnNvci1hdXRoJztcbiAgICBjYXNlICdjb3BpbG90JzpcbiAgICAgIHJldHVybiBwcm9jZXNzLmVudi5HSVRIVUJfVE9LRU47XG4gICAgY2FzZSAnbm9uZSc6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59O1xuXG5jb25zdCBkZXRlY3RDdXJzb3JJREUgPSAoKTogYm9vbGVhbiA9PiB7XG4gIGlmKHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgcG9zc2libGVDdXJzb3JTaWduYWxzID0gW1xuICAgIHByb2Nlc3MuZW52LkNVUlNPUl9FWFRFTlNJT04gPT09ICd0cnVlJyxcbiAgICBwcm9jZXNzLmVudi5DVVJTT1JfVEVSTUlOQUwgPT09ICd0cnVlJyxcbiAgICBwcm9jZXNzLmVudi5DVVJTT1JfQVBQID09PSAndHJ1ZScsXG4gICAgcHJvY2Vzcy5lbnYuUEFUSD8uaW5jbHVkZXMoJ2N1cnNvcicpLFxuICAgICEhcHJvY2Vzcy5lbnYuQ1VSU09SX1NFU1NJT05fSURcbiAgXTtcblxuICBjb25zdCBpc0N1cnNvcklERSA9IHBvc3NpYmxlQ3Vyc29yU2lnbmFscy5zb21lKChzaWduYWwpID0+IHNpZ25hbCk7XG5cbiAgaWYoaXNDdXJzb3JJREUpIHtcbiAgICBwcm9jZXNzLmVudi5DVVJTT1JfSURFID0gJ3RydWUnO1xuICB9XG5cbiAgcmV0dXJuIGlzQ3Vyc29ySURFO1xufTtcblxuZXhwb3J0IGNvbnN0IGFpRnVuY3Rpb24gPSBhc3luYyAob3B0aW9uczogQUlPcHRpb25zKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcob3B0aW9ucyk7XG4gICAgY29uc3QgY29uZmlnID0gTGV4Q29uZmlnLmNvbmZpZyB8fCB7fTtcbiAgICBjb25zdCBhaUNvbmZpZzogQUlDb25maWcgPSB7XG4gICAgICAuLi5jb25maWcuYWksXG4gICAgICAuLi4ob3B0aW9ucy5tb2RlbCA/IHttb2RlbDogb3B0aW9ucy5tb2RlbH0gOiB7fSksXG4gICAgICAuLi4ob3B0aW9ucy5wcm92aWRlciA/IHtwcm92aWRlcjogb3B0aW9ucy5wcm92aWRlciBhcyBBSUNvbmZpZ1sncHJvdmlkZXInXX0gOiB7fSlcbiAgICB9O1xuICAgIExleENvbmZpZy5jb25maWcuYWkgPSBhaUNvbmZpZztcbiAgICBjb25zdCBwcm92aWRlciA9IG9wdGlvbnMucHJvdmlkZXIgfHwgYWlDb25maWcucHJvdmlkZXIgfHwgJ25vbmUnO1xuXG4gICAgaWYocHJvdmlkZXIgPT09ICdub25lJyAmJiAhcHJvY2Vzcy5lbnYuQ1VSU09SX0VYVEVOU0lPTikge1xuICAgICAgbG9nKGAke2NoYWxrLnJlZCgnRXJyb3I6Jyl9IE5vIEFJIHByb3ZpZGVyIGNvbmZpZ3VyZWQuYCwgJ2Vycm9yJyk7XG4gICAgICByZXR1cm4ge2Vycm9yOiAnTm8gQUkgcHJvdmlkZXIgY29uZmlndXJlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHRhc2sgPSBvcHRpb25zLnRhc2sgfHwgJ2hlbHAnO1xuICAgIGNvbnN0IHZhbGlkVGFza3MgPSBbJ2V4cGxhaW4nLCAnZ2VuZXJhdGUnLCAndGVzdCcsICdvcHRpbWl6ZScsICdoZWxwJywgJ2FuYWx5emUnLCAnYXNrJ107XG5cbiAgICBpZighdmFsaWRUYXNrcy5pbmNsdWRlcyh0YXNrKSkge1xuICAgICAgbG9nKGAke2NoYWxrLnJlZCgnRXJyb3I6Jyl9IEludmFsaWQgdGFzayBcIiR7dGFza31cIi4gVmFsaWQgdGFza3MgYXJlOiAke3ZhbGlkVGFza3Muam9pbignLCAnKX1gLCAnZXJyb3InKTtcbiAgICAgIHJldHVybiB7ZXJyb3I6IGBJbnZhbGlkIHRhc2sgXCIke3Rhc2t9XCJgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7cHJvbXB0fSA9IG9wdGlvbnM7XG5cbiAgICBpZighcHJvbXB0KSB7XG4gICAgICBsb2coYCR7Y2hhbGsucmVkKCdFcnJvcjonKX0gTm8gcHJvbXB0IHByb3ZpZGVkLiBVc2UgLS1wcm9tcHQgXCJZb3VyIHByb21wdCBoZXJlXCJgLCAnZXJyb3InKTtcbiAgICAgIHJldHVybiB7ZXJyb3I6ICdObyBwcm9tcHQgcHJvdmlkZWQnfTtcbiAgICB9XG5cbiAgICBsZXQgY29udGV4dCA9ICcnO1xuXG4gICAgaWYob3B0aW9ucy5jb250ZXh0ICE9PSBmYWxzZSAmJiBvcHRpb25zLmZpbGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZzID0gYXdhaXQgaW1wb3J0KCdmcy9wcm9taXNlcycpO1xuICAgICAgICBjb25zdCBnbG9iID0gYXdhaXQgaW1wb3J0KCdnbG9iJyk7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZ2xvYi5nbG9iKG9wdGlvbnMuZmlsZSk7XG5cbiAgICAgICAgaWYoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgbG9nKGAke2NoYWxrLnllbGxvdygnV2FybmluZzonKX0gTm8gZmlsZXMgZm91bmQgbWF0Y2hpbmcgXCIke29wdGlvbnMuZmlsZX1cImAsICd3YXJuaW5nJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlLCAndXRmOCcpO1xuICAgICAgICAgICAgY29udGV4dCArPSBgXFxuPT09RklMRTogJHtmaWxlfT09PVxcbiR7Y29udGVudH1cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYCR7Y2hhbGsueWVsbG93KCdXYXJuaW5nOicpfSBFcnJvciByZWFkaW5nIGZpbGU6ICR7ZXJyb3IubWVzc2FnZX1gLCAnd2FybmluZycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKG9wdGlvbnMuY29udGV4dCAhPT0gZmFsc2UgJiYgb3B0aW9ucy5kaXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHtleGVjYVN5bmN9ID0gYXdhaXQgaW1wb3J0KCdleGVjYScpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBleGVjYVN5bmMoJ2ZpbmQnLCBbb3B0aW9ucy5kaXIsICctdHlwZScsICdmJywgJ3wnLCAnc29ydCddKTtcbiAgICAgICAgY29udGV4dCArPSBgXFxuPT09UHJvamVjdCBzdHJ1Y3R1cmU6PT09XFxuJHtyZXN1bHQuc3Rkb3V0fVxcbmA7XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGxvZyhgJHtjaGFsay55ZWxsb3coJ1dhcm5pbmc6Jyl9IEVycm9yIHJlYWRpbmcgZGlyZWN0b3J5OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm5pbmcnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZm9ybWF0dGVkUHJvbXB0ID0gJyc7XG5cbiAgICBzd2l0Y2godGFzaykge1xuICAgICAgY2FzZSAnZXhwbGFpbic6XG4gICAgICAgIGZvcm1hdHRlZFByb21wdCA9IGBFeHBsYWluIHRoZSBmb2xsb3dpbmcgY29kZTpcXG4ke3Byb21wdH1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dlbmVyYXRlJzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYEdlbmVyYXRlIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcmVxdWVzdDpcXG4ke3Byb21wdH1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Rlc3QnOlxuICAgICAgICBmb3JtYXR0ZWRQcm9tcHQgPSBgR2VuZXJhdGUgY29tcHJlaGVuc2l2ZSB1bml0IHRlc3RzOlxcbiR7cHJvbXB0fWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYW5hbHl6ZSc6XG4gICAgICAgIGZvcm1hdHRlZFByb21wdCA9IGBBbmFseXplIHRoZSBmb2xsb3dpbmcgY29kZTpcXG4ke3Byb21wdH1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29wdGltaXplJzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYEFuYWx5emUgdGhlIGZvbGxvd2luZyBjb2RlIG9yIGNvbmZpZ3VyYXRpb24gYW5kIHN1Z2dlc3Qgb3B0aW1pemF0aW9uIGltcHJvdmVtZW50czpcXG4ke3Byb21wdH1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzayc6XG4gICAgICBjYXNlICdoZWxwJzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYFByb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjpcXG4ke3Byb21wdH1gO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZihjb250ZXh0KSB7XG4gICAgICBmb3JtYXR0ZWRQcm9tcHQgKz0gYFxcbj09PUNPTlRFWFQ9PT1cXG4ke2NvbnRleHR9YDtcbiAgICB9XG5cbiAgICBpZigocHJvdmlkZXIgPT09ICdjdXJzb3InIHx8IHByb2Nlc3MuZW52LkNVUlNPUl9FWFRFTlNJT04pICYmIHRhc2sgPT09ICdnZW5lcmF0ZScpIHtcbiAgICAgIGxvZygnVXNpbmcgQ3Vyc29yIElERSBmb3IgY29kZSBnZW5lcmF0aW9uLi4uJywgJ2luZm8nKTtcbiAgICAgIGxvZygnTm90ZTogRm9yIGZ1bGwgY29kZSBnZW5lcmF0aW9uIGNhcGFiaWxpdGllcywgcGxlYXNlIHVzZSBDdXJzb3IgSURFIGRpcmVjdGx5IHdpdGggQ21kK0wgb3IgQ21kK0suJywgJ2luZm8nKTtcbiAgICAgIGxvZygnVGhlIENMSSBpbnRlZ3JhdGlvbiBoYXMgbGltaXRlZCBjYXBhYmlsaXRpZXMgZm9yIGNvZGUgZ2VuZXJhdGlvbi4nLCAnd2FybmluZycpO1xuICAgIH0gZWxzZSBpZihwcm92aWRlciA9PT0gJ2N1cnNvcicgfHwgcHJvY2Vzcy5lbnYuQ1VSU09SX0VYVEVOU0lPTikge1xuICAgICAgbG9nKCdVc2luZyBDdXJzb3IgSURFIGZvciBBSSBhc3Npc3RhbmNlLi4uJywgJ2luZm8nKTtcbiAgICAgIGxvZygnTm90ZTogVGhpcyBpcyBhIGxpbWl0ZWQgaW50ZWdyYXRpb24uIEZvciBmdWxsIEFJIGNhcGFiaWxpdGllcywgdXNlIEN1cnNvciBJREUgZGlyZWN0bHkuJywgJ2luZm8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nKGBVc2luZyAke3Byb3ZpZGVyfSBmb3IgQUkgYXNzaXN0YW5jZS4uLmAsICdpbmZvJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjYWxsQUlTZXJ2aWNlKGZvcm1hdHRlZFByb21wdCwgb3B0aW9ucy5xdWlldCB8fCBmYWxzZSk7XG5cbiAgICBsb2coYFxcbiR7cmVzcG9uc2V9YCwgJ3N1Y2Nlc3MnKTtcblxuICAgIHJldHVybiB7cmVzcG9uc2V9O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGAke2NoYWxrLnJlZCgnRXJyb3I6Jyl9ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgICByZXR1cm4ge2Vycm9yOiBlcnJvci5tZXNzYWdlfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFpID0gbmV3IENvbW1hbmQoJ2FpJylcbiAgLmRlc2NyaXB0aW9uKCdVc2UgQUkgdG8gaGVscCB3aXRoIGRldmVsb3BtZW50IHRhc2tzJylcbiAgLm9wdGlvbignLS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0FJIHByb3ZpZGVyIHRvIHVzZSAob3BlbmFpLCBhbnRocm9waWMsIGN1cnNvciknKVxuICAub3B0aW9uKCctLXRhc2sgPHRhc2s+JywgJ1Rhc2sgdG8gcGVyZm9ybSAoZXhwbGFpbiwgZ2VuZXJhdGUsIHRlc3QsIG9wdGltaXplLCBoZWxwLCBhbmFseXplLCBhc2spJylcbiAgLm9wdGlvbignLS1wcm9tcHQgPHByb21wdD4nLCAnUHJvbXB0IHRvIHNlbmQgdG8gQUknKVxuICAub3B0aW9uKCctLWZpbGUgPGZpbGU+JywgJ0ZpbGUgdG8gYW5hbHl6ZScpXG4gIC5vcHRpb24oJy0tZGlyIDxkaXI+JywgJ0RpcmVjdG9yeSB0byBhbmFseXplJylcbiAgLmFjdGlvbihhc3luYyAob3B0aW9uczogQUlPcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgYWlGdW5jdGlvbihvcHRpb25zKTtcbiAgfSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFpO1xuIl0sIm5hbWVzIjpbImNoYWxrIiwiQ29tbWFuZCIsInJlYWRGaWxlU3luYyIsInN5bmMiLCJnbG9iU3luYyIsIkxleENvbmZpZyIsImNhbGxBSVNlcnZpY2UiLCJsb2ciLCJwcm9jZXNzIiwiZW52IiwiQ1VSU09SX0VYVEVOU0lPTiIsIkNVUlNPUl9URVJNSU5BTCIsIkNVUlNPUl9BUFAiLCJQQVRIIiwiaW5jbHVkZXMiLCJDVVJTT1JfU0VTU0lPTl9JRCIsIkNVUlNPUl9JREUiLCJnZXRGaWxlQ29udGV4dCIsImZpbGVQYXRoIiwiY29udGVudCIsIl9lcnJvciIsImdldFByb2plY3RDb250ZXh0Iiwib3B0aW9ucyIsImZpbGUiLCJ0YXNrIiwiY29udGV4dCIsInByb2plY3RDb250ZXh0IiwiZmlsZXMiLCJjd2QiLCJpZ25vcmUiLCJtYXhEZXB0aCIsImpvaW4iLCJ0ZXN0Q29uZmlnIiwibGV4Q29uZmlnIiwiY29uc3RydWN0UHJvbXB0IiwicHJvbXB0IiwidGFza0luc3RydWN0aW9ucyIsImFuYWx5emUiLCJhc2siLCJleHBsYWluIiwiZ2VuZXJhdGUiLCJoZWxwIiwib3B0aW1pemUiLCJ0ZXN0IiwidGFza0luc3RydWN0aW9uIiwiZnVsbFByb21wdCIsImRpc3BsYXlSZXNwb25zZSIsInJlc3BvbnNlIiwicXVpZXQiLCJjaG9pY2VzIiwibWVzc2FnZSIsIm1lc3NhZ2VDb250ZW50IiwicmVzcG9uc2VDb250ZW50IiwiY2xlYW5lZENvbnRlbnQiLCJjbGVhblJlc3BvbnNlIiwiaW5zdHJ1Y3Rpb24iLCJyZXBsYWNlIiwidHJpbSIsInNwbGl0IiwiZ2V0UHJvdmlkZXJBdXRoIiwicHJvdmlkZXIiLCJBSV9BUElfS0VZIiwiT1BFTkFJX0FQSV9LRVkiLCJBTlRIUk9QSUNfQVBJX0tFWSIsIkdJVEhVQl9UT0tFTiIsInVuZGVmaW5lZCIsImRldGVjdEN1cnNvcklERSIsInBvc3NpYmxlQ3Vyc29yU2lnbmFscyIsImlzQ3Vyc29ySURFIiwic29tZSIsInNpZ25hbCIsImFpRnVuY3Rpb24iLCJwYXJzZUNvbmZpZyIsImNvbmZpZyIsImFpQ29uZmlnIiwiYWkiLCJtb2RlbCIsInJlZCIsImVycm9yIiwidmFsaWRUYXNrcyIsImZzIiwiZ2xvYiIsImxlbmd0aCIsInllbGxvdyIsInJlYWRGaWxlIiwiZGlyIiwiZXhlY2FTeW5jIiwicmVzdWx0Iiwic3Rkb3V0IiwiZm9ybWF0dGVkUHJvbXB0IiwiZGVzY3JpcHRpb24iLCJvcHRpb24iLCJhY3Rpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELE9BQU9B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
|
|
@@ -10,6 +10,11 @@ import { LexConfig } from '../../LexConfig.js';
|
|
|
10
10
|
import { checkLinkedModules, copyConfiguredFiles, copyFiles, createSpinner, getFilesByExt, removeFiles } from '../../utils/app.js';
|
|
11
11
|
import { getDirName, resolveBinaryPath } from '../../utils/file.js';
|
|
12
12
|
import { log } from '../../utils/log.js';
|
|
13
|
+
const SOURCE_GLOB_IGNORE = [
|
|
14
|
+
'**/__mocks__/**',
|
|
15
|
+
'**/__tests__/**',
|
|
16
|
+
'**/tests/**'
|
|
17
|
+
];
|
|
13
18
|
export const hasFileType = (startPath, ext)=>{
|
|
14
19
|
if (!existsSync(startPath)) {
|
|
15
20
|
return false;
|
|
@@ -46,17 +51,19 @@ export const compile = async (cmd, callback = ()=>({}))=>{
|
|
|
46
51
|
log('Please reinstall Lex or check your installation.', 'info', quiet);
|
|
47
52
|
return 1;
|
|
48
53
|
}
|
|
49
|
-
const
|
|
54
|
+
const defaultTypeScriptConfig = pathResolve(process.cwd(), 'tsconfig.build.json');
|
|
55
|
+
const typeScriptConfig = config || (existsSync(defaultTypeScriptConfig) ? defaultTypeScriptConfig : undefined);
|
|
56
|
+
const typescriptOptions = typeScriptConfig ? [
|
|
50
57
|
'-p',
|
|
51
|
-
|
|
58
|
+
typeScriptConfig,
|
|
52
59
|
'--emitDeclarationOnly',
|
|
53
60
|
'--skipLibCheck'
|
|
54
|
-
]
|
|
55
|
-
: (()=>{
|
|
61
|
+
] : (()=>{
|
|
56
62
|
const globOptions = {
|
|
57
63
|
absolute: true,
|
|
58
64
|
cwd: sourceDir,
|
|
59
65
|
dot: false,
|
|
66
|
+
ignore: SOURCE_GLOB_IGNORE,
|
|
60
67
|
nodir: true
|
|
61
68
|
};
|
|
62
69
|
const tsFiles = globSync('**/!(*.spec|*.test|*.integration|*.e2e).ts', globOptions);
|
|
@@ -120,6 +127,7 @@ export const compile = async (cmd, callback = ()=>({}))=>{
|
|
|
120
127
|
absolute: true,
|
|
121
128
|
cwd: sourceDir,
|
|
122
129
|
dot: false,
|
|
130
|
+
ignore: SOURCE_GLOB_IGNORE,
|
|
123
131
|
nodir: true,
|
|
124
132
|
nosort: true
|
|
125
133
|
};
|
|
@@ -274,4 +282,4 @@ export const compile = async (cmd, callback = ()=>({}))=>{
|
|
|
274
282
|
return 0;
|
|
275
283
|
};
|
|
276
284
|
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jb21waWxlL2NvbXBpbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7dHJhbnNmb3JtfSBmcm9tICdAc3djL2NvcmUnO1xuaW1wb3J0IHtleGVjYX0gZnJvbSAnZXhlY2EnO1xuaW1wb3J0IHtleGlzdHNTeW5jLCBsc3RhdFN5bmMsIHJlYWRkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMsIG1rZGlyU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSwgam9pbiBhcyBwYXRoSm9pbiwgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLCByZXNvbHZlIGFzIHBhdGhSZXNvbHZlLCBkaXJuYW1lfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NoZWNrTGlua2VkTW9kdWxlcywgY29weUNvbmZpZ3VyZWRGaWxlcywgY29weUZpbGVzLCBjcmVhdGVTcGlubmVyLCBnZXRGaWxlc0J5RXh0LCByZW1vdmVGaWxlc30gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7Z2V0RGlyTmFtZSwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmltcG9ydCB0eXBlIHtTV0NPcHRpb25zfSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuXG5leHBvcnQgY29uc3QgaGFzRmlsZVR5cGUgPSAoc3RhcnRQYXRoOiBzdHJpbmcsIGV4dDogc3RyaW5nW10pOiBib29sZWFuID0+IHtcbiAgaWYoIWV4aXN0c1N5bmMoc3RhcnRQYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IHJlYWRkaXJTeW5jKHN0YXJ0UGF0aCk7XG5cbiAgcmV0dXJuIGZpbGVzLnNvbWUoKGZpbGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGZpbGVuYW1lOiBzdHJpbmcgPSBwYXRoSm9pbihzdGFydFBhdGgsIGZpbGUpO1xuICAgIGNvbnN0IGZpbGVFeHQ6IHN0cmluZyA9IHBhdGhFeHRuYW1lKGZpbGVuYW1lKTtcbiAgICBjb25zdCBzdGF0ID0gbHN0YXRTeW5jKGZpbGVuYW1lKTtcblxuICAgIGlmKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgcmV0dXJuIGhhc0ZpbGVUeXBlKGZpbGVuYW1lLCBleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQuaW5jbHVkZXMoZmlsZUV4dCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbXBpbGUgPSBhc3luYyAoY21kOiBhbnksIGNhbGxiYWNrOiBhbnkgPSAoKSA9PiAoe30pKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge1xuICAgIGNsaU5hbWUgPSAnTGV4JyxcbiAgICBjb25maWcsXG4gICAgZm9ybWF0ID0gJ2VzbScsXG4gICAgb3V0cHV0UGF0aCxcbiAgICBxdWlldCxcbiAgICByZW1vdmUsXG4gICAgc291cmNlUGF0aCxcbiAgICB3YXRjaFxuICB9ID0gY21kO1xuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgbG9nKGAke2NsaU5hbWV9IGNvbXBpbGluZy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgcmVhY3RDb21waWxlciwgc291cmNlRnVsbFBhdGgsIHN3YzogcGFyc2VkU3djQ29uZmlnLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG4gIGNvbnN0IHN3Y0NvbmZpZyA9IExleENvbmZpZy5nZXRTV0NDb25maWdXaXRoUmVhY3RDb21waWxlcihwYXJzZWRTd2NDb25maWcsIHJlYWN0Q29tcGlsZXIpO1xuICBjb25zdCBvdXRwdXREaXI6IHN0cmluZyA9IG91dHB1dFBhdGhcbiAgICA/IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksIG91dHB1dFBhdGgpXG4gICAgOiAob3V0cHV0RnVsbFBhdGggfHwgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy4vbGliJykpO1xuICBjb25zdCBzb3VyY2VEaXI6IHN0cmluZyA9IHNvdXJjZVBhdGggPyBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBgLi8ke3NvdXJjZVBhdGh9YCkgOiBzb3VyY2VGdWxsUGF0aCB8fCAnJztcbiAgY29uc3QgZGlyTmFtZSA9IGdldERpck5hbWUoKTtcblxuICBjaGVja0xpbmtlZE1vZHVsZXMoKTtcblxuICBpZihyZW1vdmUpIHtcbiAgICBhd2FpdCByZW1vdmVGaWxlcyhvdXRwdXREaXIpO1xuICB9XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIGNvbnN0IHR5cGVzY3JpcHRQYXRoOiBzdHJpbmcgPSByZXNvbHZlQmluYXJ5UGF0aCgndHNjJywgJ3R5cGVzY3JpcHQnKTtcblxuICAgIGlmKCF0eXBlc2NyaXB0UGF0aCkge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGJpbmFyeSBub3QgZm91bmQgaW4gTGV4J3Mgbm9kZV9tb2R1bGVzIG9yIG1vbm9yZXBvIHJvb3RgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBsb2coJ1BsZWFzZSByZWluc3RhbGwgTGV4IG9yIGNoZWNrIHlvdXIgaW5zdGFsbGF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXNjcmlwdE9wdGlvbnM6IHN0cmluZ1tdID0gY29uZmlnXG4gICAgICA/IFsnLXAnLCBjb25maWcsICctLWVtaXREZWNsYXJhdGlvbk9ubHknLCAnLS1za2lwTGliQ2hlY2snXSAvLyBVc2VyIHByb3ZpZGVkIGN1c3RvbSBjb25maWcsIGJ1dCBzdGlsbCBvbmx5IGVtaXQgZGVjbGFyYXRpb25zXG4gICAgICA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdsb2JPcHRpb25zID0ge1xuICAgICAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgICAgICAgIGN3ZDogc291cmNlRGlyLFxuICAgICAgICAgIGRvdDogZmFsc2UsXG4gICAgICAgICAgbm9kaXI6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHNGaWxlcyA9IGdsb2JTeW5jKCcqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbnwqLmUyZSkudHMnLCBnbG9iT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHRzeEZpbGVzID0gZ2xvYlN5bmMoJyoqLyEoKi5zcGVjfCoudGVzdHwqLmludGVncmF0aW9ufCouZTJlKS50c3gnLCBnbG9iT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGFsbFNvdXJjZUZpbGVzID0gWy4uLnRzRmlsZXMsIC4uLnRzeEZpbGVzXTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIC4uLkxleENvbmZpZy5nZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncygpLFxuICAgICAgICAgIC4uLmFsbFNvdXJjZUZpbGVzXG4gICAgICAgIF07XG4gICAgICB9KSgpO1xuXG4gICAgc3Bpbm5lci5zdGFydCgnR2VuZXJhdGluZyBUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucy4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNhKHR5cGVzY3JpcHRQYXRoLCB0eXBlc2NyaXB0T3B0aW9ucywge1xuICAgICAgICBhbGw6IHRydWUsXG4gICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICAgICAgcmVqZWN0OiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIGlmKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgICBjb25zdCBoYXNEZWNsYXJhdGlvbnMgPSByZXN1bHQuYWxsPy5pbmNsdWRlcygnV3JpdGluZycpIHx8IHJlc3VsdC5hbGw/LmluY2x1ZGVzKCdEZWNsYXJhdGlvbicpIHx8IGZhbHNlO1xuICAgICAgICBjb25zdCBlcnJvck91dHB1dCA9IHJlc3VsdC5zdGRlcnIgfHwgcmVzdWx0LnN0ZG91dCB8fCByZXN1bHQuYWxsIHx8ICdVbmtub3duIGVycm9yJztcblxuICAgICAgICBpZighaGFzRGVjbGFyYXRpb25zKSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZmFpbGVkYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIGxvZyhgXFxuRXhpdCBDb2RlOiAke3Jlc3VsdC5leGl0Q29kZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgbG9nKGBcXG5UeXBlU2NyaXB0IENvbW1hbmQ6ICR7dHlwZXNjcmlwdFBhdGh9ICR7dHlwZXNjcmlwdE9wdGlvbnMuam9pbignICcpfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBsb2coYFxcbkVycm9yIE91dHB1dDpcXG4ke2Vycm9yT3V0cHV0fWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgICAgIGNvbnN0IGVycm9yTGluZXMgPSBlcnJvck91dHB1dC5zcGxpdCgnXFxuJykuZmlsdGVyKChsaW5lKSA9PlxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnZXJyb3IgVFMnKSB8fFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnRXJyb3I6JykgfHxcbiAgICAgICAgICAgIGxpbmUudHJpbSgpLnN0YXJ0c1dpdGgoJ3NyYy8nKSB8fFxuICAgICAgICAgICAgbGluZS50cmltKCkuc3RhcnRzV2l0aCgnVFMnKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZihlcnJvckxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxvZygnXFxuS2V5IEVycm9yczonLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgICAgICAgIGVycm9yTGluZXMuc2xpY2UoMCwgMTApLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgbG9nKGAgICR7bGluZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYoZXJyb3JMaW5lcy5sZW5ndGggPiAxMCkge1xuICAgICAgICAgICAgICBsb2coYCAgLi4uIGFuZCAke2Vycm9yTGluZXMubGVuZ3RoIC0gMTB9IG1vcmUgZXJyb3JzYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHNwaW5uZXIuZmFpbCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGZhaWxlZC4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gV2FybmluZzogVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGNvbXBsZXRlZCB3aXRoIGVycm9yc2AsICd3YXJuJywgcXVpZXQpO1xuXG4gICAgICAgICAgaWYoIXF1aWV0ICYmIGVycm9yT3V0cHV0KSB7XG4gICAgICAgICAgICBsb2coYFxcbldhcm5pbmdzOlxcbiR7ZXJyb3JPdXRwdXR9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucyBnZW5lcmF0ZWQgKHdpdGggd2FybmluZ3MpLicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBnZW5lcmF0ZWQgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbnMhJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZXhjZXB0aW9uYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgbG9nKGBcXG5FcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5zdGFjaykge1xuICAgICAgICBsb2coYFxcblN0YWNrOlxcbiR7ZXJyb3Iuc3RhY2t9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBzcGlubmVyLmZhaWwoJ1R5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBoYWQgaXNzdWVzLCBjb250aW51aW5nLi4uJyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgYWJzb2x1dGU6IHRydWUsXG4gICAgY3dkOiBzb3VyY2VEaXIsXG4gICAgZG90OiBmYWxzZSxcbiAgICBub2RpcjogdHJ1ZSxcbiAgICBub3NvcnQ6IHRydWVcbiAgfTtcbiAgY29uc3QgdHNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYygnKiovISgqLnNwZWN8Ki50ZXN0fCouaW50ZWdyYXRpb258Ki5lMmUpLnRzKicsIGdsb2JPcHRpb25zKTtcbiAgY29uc3QganNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYygnKiovISgqLnNwZWN8Ki50ZXN0fCouaW50ZWdyYXRpb258Ki5lMmUpLmpzJywgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBzb3VyY2VGaWxlczogc3RyaW5nW10gPSBbLi4udHNGaWxlcywgLi4uanNGaWxlc107XG5cbiAgY29uc3QgY3NzRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLmNzcycsIExleENvbmZpZy5jb25maWcpO1xuXG4gIGlmKGNzc0ZpbGVzLmxlbmd0aCkge1xuICAgIGNvbnN0IHBvc3Rjc3NQYXRoOiBzdHJpbmcgPSByZXNvbHZlQmluYXJ5UGF0aCgncG9zdGNzcycsICdwb3N0Y3NzLWNsaScpO1xuXG4gICAgaWYoIXBvc3Rjc3NQYXRoKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFBvc3RDU1MgYmluYXJ5IG5vdCBmb3VuZCBpbiBMZXgncyBub2RlX21vZHVsZXMgb3IgbW9ub3JlcG8gcm9vdGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3N0Y3NzT3B0aW9uczogc3RyaW5nW10gPSBbXG4gICAgICBgJHtzb3VyY2VEaXJ9LyoqLyoqLmNzc2AsXG4gICAgICAnLS1iYXNlJyxcbiAgICAgIHNvdXJjZURpcixcbiAgICAgICctLWRpcicsXG4gICAgICBvdXRwdXREaXIsXG4gICAgICAnLS1jb25maWcnLFxuICAgICAgcGF0aFJlc29sdmUoZGlyTmFtZSwgJy4uLy4uL3Bvc3Rjc3MuY29uZmlnLmpzJylcbiAgICBdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWNhKHBvc3Rjc3NQYXRoLCBwb3N0Y3NzT3B0aW9ucywge2VuY29kaW5nOiAndXRmOCd9KTtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZChgU3VjY2Vzc2Z1bGx5IGZvcm1hdHRlZCAke2Nzc0ZpbGVzLmxlbmd0aH0gY3NzIGZpbGVzIWApO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgZm9ybWF0dGluZyBjc3MuJyk7XG5cbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ2lmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLmdpZicsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBqcGdGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuanBnJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IHBuZ0ZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5wbmcnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgc3ZnRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLnN2ZycsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBpbWFnZUZpbGVzOiBzdHJpbmdbXSA9IFsuLi5naWZGaWxlcywgLi4uanBnRmlsZXMsIC4uLnBuZ0ZpbGVzLCAuLi5zdmdGaWxlc107XG5cbiAgaWYoaW1hZ2VGaWxlcy5sZW5ndGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29weUZpbGVzKGltYWdlRmlsZXMsICdpbWFnZScsIHNwaW5uZXIsIExleENvbmZpZy5jb25maWcpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gbW92ZSBpbWFnZXMgdG8gb3V0cHV0IGRpcmVjdG9yeS4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0dGZGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcudHRmJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IG90ZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5vdGYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgd29mZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy53b2ZmJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IHdvZmYyRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLndvZmYyJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IGZvbnRGaWxlczogc3RyaW5nW10gPSBbLi4udHRmRmlsZXMsIC4uLm90ZkZpbGVzLCAuLi53b2ZmRmlsZXMsIC4uLndvZmYyRmlsZXNdO1xuXG4gIGlmKGZvbnRGaWxlcy5sZW5ndGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29weUZpbGVzKGZvbnRGaWxlcywgJ2ZvbnQnLCBzcGlubmVyLCBMZXhDb25maWcuY29uZmlnKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIG1vdmUgZm9udHMgdG8gb3V0cHV0IGRpcmVjdG9yeS4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZEZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5tZCcsIExleENvbmZpZy5jb25maWcpO1xuXG4gIGlmKG1kRmlsZXMubGVuZ3RoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvcHlGaWxlcyhtZEZpbGVzLCAnZG9jdW1lbnRzJywgc3Bpbm5lciwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBtb3ZlIGRvY3MgdG8gb3V0cHV0IGRpcmVjdG9yeS4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBpZihzb3VyY2VGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gV2FybmluZzogTm8gc291cmNlIGZpbGVzIGZvdW5kIHRvIGNvbXBpbGUgaW4gJHtzb3VyY2VEaXJ9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKCdObyBmaWxlcyB0byBjb21waWxlLicpO1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgc3Bpbm5lci5zdGFydCh3YXRjaCA/ICdXYXRjaGluZyBmb3IgY2hhbmdlcy4uLicgOiAnQ29tcGlsaW5nIHdpdGggU1dDLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1Qcm9taXNlcyA9IHNvdXJjZUZpbGVzLm1hcChhc3luYyAoZmlsZSkgPT4ge1xuICAgICAgY29uc3QgZmlsZVJlbGF0aXZlVG9Tb3VyY2UgPSBwYXRoUmVsYXRpdmUoc291cmNlRGlyLCBmaWxlKTtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBmaWxlO1xuICAgICAgY29uc3Qgb3V0cHV0RmlsZSA9IGZpbGVSZWxhdGl2ZVRvU291cmNlLnJlcGxhY2UoL1xcLih0c3x0c3gpJC8sICcuanMnKTtcbiAgICAgIGNvbnN0IG91dHB1dFBhdGggPSBwYXRoUmVzb2x2ZShvdXRwdXREaXIsIG91dHB1dEZpbGUpO1xuICAgICAgY29uc3Qgb3V0cHV0RGlyUGF0aCA9IGRpcm5hbWUob3V0cHV0UGF0aCk7XG5cbiAgICAgIGlmKCFleGlzdHNTeW5jKG91dHB1dERpclBhdGgpKSB7XG4gICAgICAgIG1rZGlyU3luYyhvdXRwdXREaXJQYXRoLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSByZWFkRmlsZVN5bmMoc291cmNlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IHN3Y09wdGlvbnM6IFBhcnRpYWw8U1dDT3B0aW9ucz4gPSB7XG4gICAgICAgIC4uLnN3Y0NvbmZpZyxcbiAgICAgICAgZmlsZW5hbWU6IGZpbGUsXG4gICAgICAgIG1vZHVsZToge1xuICAgICAgICAgIHR5cGU6IGZvcm1hdCA9PT0gJ2NqcycgPyAnY29tbW9uanMnIGFzIGNvbnN0IDogKHN3Y0NvbmZpZz8ubW9kdWxlPy50eXBlIGFzICdlczYnIHx8ICdlczYnKSxcbiAgICAgICAgICAuLi5zd2NDb25maWc/Lm1vZHVsZVxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VNYXBzOiBzd2NDb25maWc/LnNvdXJjZU1hcHMgfHwgJ2lubGluZSdcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2VDb2RlLCBzd2NPcHRpb25zKTtcblxuICAgICAgd3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCByZXN1bHQuY29kZSk7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0cmFuc2Zvcm1Qcm9taXNlcyk7XG5cbiAgICBzcGlubmVyLnN1Y2NlZWQoJ0NvbXBpbGUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogU1dDIGNvbXBpbGF0aW9uIGZhaWxlZGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBsb2coYFxcbkVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgaWYoZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgbG9nKGBcXG5TdGFjayBUcmFjZTpcXG4ke2Vycm9yLnN0YWNrfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgaWYoJ2ZpbGVuYW1lJyBpbiBlcnJvciB8fCAnZmlsZScgaW4gZXJyb3IpIHtcbiAgICAgICAgbG9nKGBcXG5GaWxlOiAkeyhlcnJvciBhcyBhbnkpLmZpbGVuYW1lIHx8IChlcnJvciBhcyBhbnkpLmZpbGV9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKCFxdWlldCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1xcbkZ1bGwgRXJyb3IgRGV0YWlsczonLCBlcnJvcik7XG4gICAgfVxuXG4gICAgc3Bpbm5lci5mYWlsKCdDb2RlIGNvbXBpbGluZyBmYWlsZWQuJyk7XG5cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgY29weUNvbmZpZ3VyZWRGaWxlcyhzcGlubmVyLCBMZXhDb25maWcuY29uZmlnLCBxdWlldCk7XG4gIH0gY2F0Y2goY29weUVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzOiAke2NvcHlFcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIGNvcHkgY29uZmlndXJlZCBmaWxlcy4nKTtcblxuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY2FsbGJhY2soMCk7XG4gIHJldHVybiAwO1xufTtcbiJdLCJuYW1lcyI6WyJ0cmFuc2Zvcm0iLCJleGVjYSIsImV4aXN0c1N5bmMiLCJsc3RhdFN5bmMiLCJyZWFkZGlyU3luYyIsInJlYWRGaWxlU3luYyIsIndyaXRlRmlsZVN5bmMiLCJta2RpclN5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJleHRuYW1lIiwicGF0aEV4dG5hbWUiLCJqb2luIiwicGF0aEpvaW4iLCJyZWxhdGl2ZSIsInBhdGhSZWxhdGl2ZSIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsImRpcm5hbWUiLCJMZXhDb25maWciLCJjaGVja0xpbmtlZE1vZHVsZXMiLCJjb3B5Q29uZmlndXJlZEZpbGVzIiwiY29weUZpbGVzIiwiY3JlYXRlU3Bpbm5lciIsImdldEZpbGVzQnlFeHQiLCJyZW1vdmVGaWxlcyIsImdldERpck5hbWUiLCJyZXNvbHZlQmluYXJ5UGF0aCIsImxvZyIsImhhc0ZpbGVUeXBlIiwic3RhcnRQYXRoIiwiZXh0IiwiZmlsZXMiLCJzb21lIiwiZmlsZSIsImZpbGVuYW1lIiwiZmlsZUV4dCIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImluY2x1ZGVzIiwiY29tcGlsZSIsImNtZCIsImNhbGxiYWNrIiwiY2xpTmFtZSIsImNvbmZpZyIsImZvcm1hdCIsIm91dHB1dFBhdGgiLCJxdWlldCIsInJlbW92ZSIsInNvdXJjZVBhdGgiLCJ3YXRjaCIsInNwaW5uZXIiLCJwYXJzZUNvbmZpZyIsIm91dHB1dEZ1bGxQYXRoIiwicmVhY3RDb21waWxlciIsInNvdXJjZUZ1bGxQYXRoIiwic3djIiwicGFyc2VkU3djQ29uZmlnIiwidXNlVHlwZXNjcmlwdCIsInN3Y0NvbmZpZyIsImdldFNXQ0NvbmZpZ1dpdGhSZWFjdENvbXBpbGVyIiwib3V0cHV0RGlyIiwicHJvY2VzcyIsImN3ZCIsInNvdXJjZURpciIsImRpck5hbWUiLCJ0eXBlc2NyaXB0UGF0aCIsInR5cGVzY3JpcHRPcHRpb25zIiwiZ2xvYk9wdGlvbnMiLCJhYnNvbHV0ZSIsImRvdCIsIm5vZGlyIiwidHNGaWxlcyIsInRzeEZpbGVzIiwiYWxsU291cmNlRmlsZXMiLCJnZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncyIsInN0YXJ0IiwicmVzdWx0IiwiYWxsIiwiZW5jb2RpbmciLCJyZWplY3QiLCJleGl0Q29kZSIsImhhc0RlY2xhcmF0aW9ucyIsImVycm9yT3V0cHV0Iiwic3RkZXJyIiwic3Rkb3V0IiwiZXJyb3JMaW5lcyIsInNwbGl0IiwiZmlsdGVyIiwibGluZSIsInRyaW0iLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwic2xpY2UiLCJmb3JFYWNoIiwiZmFpbCIsInN1Y2NlZWQiLCJlcnJvciIsIm1lc3NhZ2UiLCJFcnJvciIsInN0YWNrIiwibm9zb3J0IiwianNGaWxlcyIsInNvdXJjZUZpbGVzIiwiY3NzRmlsZXMiLCJwb3N0Y3NzUGF0aCIsInBvc3Rjc3NPcHRpb25zIiwiZ2lmRmlsZXMiLCJqcGdGaWxlcyIsInBuZ0ZpbGVzIiwic3ZnRmlsZXMiLCJpbWFnZUZpbGVzIiwidHRmRmlsZXMiLCJvdGZGaWxlcyIsIndvZmZGaWxlcyIsIndvZmYyRmlsZXMiLCJmb250RmlsZXMiLCJtZEZpbGVzIiwidHJhbnNmb3JtUHJvbWlzZXMiLCJtYXAiLCJmaWxlUmVsYXRpdmVUb1NvdXJjZSIsIm91dHB1dEZpbGUiLCJyZXBsYWNlIiwib3V0cHV0RGlyUGF0aCIsInJlY3Vyc2l2ZSIsInNvdXJjZUNvZGUiLCJzd2NPcHRpb25zIiwibW9kdWxlIiwidHlwZSIsInNvdXJjZU1hcHMiLCJjb2RlIiwiUHJvbWlzZSIsImNvbnNvbGUiLCJjb3B5RXJyb3IiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFNBQVMsUUFBTyxZQUFZO0FBQ3BDLFNBQVFDLEtBQUssUUFBTyxRQUFRO0FBQzVCLFNBQVFDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxXQUFXLEVBQUVDLFlBQVksRUFBRUMsYUFBYSxFQUFFQyxTQUFTLFFBQU8sS0FBSztBQUM5RixTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxTQUFRQyxXQUFXQyxXQUFXLEVBQUVDLFFBQVFDLFFBQVEsRUFBRUMsWUFBWUMsWUFBWSxFQUFFQyxXQUFXQyxXQUFXLEVBQUVDLE9BQU8sUUFBTyxPQUFPO0FBRXpILFNBQVFDLFNBQVMsUUFBTyxxQkFBcUI7QUFDN0MsU0FBUUMsa0JBQWtCLEVBQUVDLG1CQUFtQixFQUFFQyxTQUFTLEVBQUVDLGFBQWEsRUFBRUMsYUFBYSxFQUFFQyxXQUFXLFFBQU8scUJBQXFCO0FBQ2pJLFNBQVFDLFVBQVUsRUFBRUMsaUJBQWlCLFFBQU8sc0JBQXNCO0FBQ2xFLFNBQVFDLEdBQUcsUUFBTyxxQkFBcUI7QUFJdkMsT0FBTyxNQUFNQyxjQUFjLENBQUNDLFdBQW1CQztJQUM3QyxJQUFHLENBQUM3QixXQUFXNEIsWUFBWTtRQUN6QixPQUFPO0lBQ1Q7SUFFQSxNQUFNRSxRQUFrQjVCLFlBQVkwQjtJQUVwQyxPQUFPRSxNQUFNQyxJQUFJLENBQUMsQ0FBQ0M7UUFDakIsTUFBTUMsV0FBbUJ0QixTQUFTaUIsV0FBV0k7UUFDN0MsTUFBTUUsVUFBa0J6QixZQUFZd0I7UUFDcEMsTUFBTUUsT0FBT2xDLFVBQVVnQztRQUV2QixJQUFHRSxLQUFLQyxXQUFXLElBQUk7WUFDckIsT0FBT1QsWUFBWU0sVUFBVUo7UUFDL0I7UUFFQSxPQUFPQSxJQUFJUSxRQUFRLENBQUNIO0lBQ3RCO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTUksVUFBVSxPQUFPQyxLQUFVQyxXQUFnQixJQUFPLENBQUEsQ0FBQyxDQUFBLENBQUU7SUFDaEUsTUFBTSxFQUNKQyxVQUFVLEtBQUssRUFDZkMsTUFBTSxFQUNOQyxTQUFTLEtBQUssRUFDZEMsVUFBVSxFQUNWQyxLQUFLLEVBQ0xDLE1BQU0sRUFDTkMsVUFBVSxFQUNWQyxLQUFLLEVBQ04sR0FBR1Q7SUFDSixNQUFNVSxVQUFVNUIsY0FBY3dCO0lBRTlCbkIsSUFBSSxHQUFHZSxRQUFRLGFBQWEsQ0FBQyxFQUFFLFFBQVFJO0lBRXZDLE1BQU01QixVQUFVaUMsV0FBVyxDQUFDWDtJQUU1QixNQUFNLEVBQUNZLGNBQWMsRUFBRUMsYUFBYSxFQUFFQyxjQUFjLEVBQUVDLEtBQUtDLGVBQWUsRUFBRUMsYUFBYSxFQUFDLEdBQUd2QyxVQUFVeUIsTUFBTTtJQUM3RyxNQUFNZSxZQUFZeEMsVUFBVXlDLDZCQUE2QixDQUFDSCxpQkFBaUJIO0lBQzNFLE1BQU1PLFlBQW9CZixhQUN0QjdCLFlBQVk2QyxRQUFRQyxHQUFHLElBQUlqQixjQUMxQk8sa0JBQWtCcEMsWUFBWTZDLFFBQVFDLEdBQUcsSUFBSTtJQUNsRCxNQUFNQyxZQUFvQmYsYUFBYWhDLFlBQVk2QyxRQUFRQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUVkLFlBQVksSUFBSU0sa0JBQWtCO0lBQ3pHLE1BQU1VLFVBQVV2QztJQUVoQk47SUFFQSxJQUFHNEIsUUFBUTtRQUNULE1BQU12QixZQUFZb0M7SUFDcEI7SUFFQSxJQUFHSCxlQUFlO1FBQ2hCLE1BQU1RLGlCQUF5QnZDLGtCQUFrQixPQUFPO1FBRXhELElBQUcsQ0FBQ3VDLGdCQUFnQjtZQUNsQnRDLElBQUksQ0FBQyxFQUFFLEVBQUVlLFFBQVEsMEVBQTBFLENBQUMsRUFBRSxTQUFTSTtZQUN2R25CLElBQUksb0RBQW9ELFFBQVFtQjtZQUNoRSxPQUFPO1FBQ1Q7UUFFQSxNQUFNb0Isb0JBQThCdkIsU0FDaEM7WUFBQztZQUFNQTtZQUFRO1lBQXlCO1NBQWlCLENBQUMsZ0VBQWdFO1dBQzFILEFBQUMsQ0FBQTtZQUNELE1BQU13QixjQUFjO2dCQUNsQkMsVUFBVTtnQkFDVk4sS0FBS0M7Z0JBQ0xNLEtBQUs7Z0JBQ0xDLE9BQU87WUFDVDtZQUNBLE1BQU1DLFVBQVUvRCxTQUFTLDhDQUE4QzJEO1lBQ3ZFLE1BQU1LLFdBQVdoRSxTQUFTLCtDQUErQzJEO1lBQ3pFLE1BQU1NLGlCQUFpQjttQkFBSUY7bUJBQVlDO2FBQVM7WUFFaEQsT0FBTzttQkFDRnRELFVBQVV3RCw2QkFBNkI7bUJBQ3ZDRDthQUNKO1FBQ0gsQ0FBQTtRQUVGdkIsUUFBUXlCLEtBQUssQ0FBQztRQUVkLElBQUk7WUFDRixNQUFNQyxTQUFTLE1BQU01RSxNQUFNaUUsZ0JBQWdCQyxtQkFBbUI7Z0JBQzVEVyxLQUFLO2dCQUNMZixLQUFLRCxRQUFRQyxHQUFHO2dCQUNoQmdCLFVBQVU7Z0JBQ1ZDLFFBQVE7WUFDVjtZQUVBLElBQUdILE9BQU9JLFFBQVEsS0FBSyxHQUFHO2dCQUN4QixNQUFNQyxrQkFBa0JMLE9BQU9DLEdBQUcsRUFBRXZDLFNBQVMsY0FBY3NDLE9BQU9DLEdBQUcsRUFBRXZDLFNBQVMsa0JBQWtCO2dCQUNsRyxNQUFNNEMsY0FBY04sT0FBT08sTUFBTSxJQUFJUCxPQUFPUSxNQUFNLElBQUlSLE9BQU9DLEdBQUcsSUFBSTtnQkFFcEUsSUFBRyxDQUFDSSxpQkFBaUI7b0JBQ25CdEQsSUFBSSxDQUFDLEVBQUUsRUFBRWUsUUFBUSxnREFBZ0QsQ0FBQyxFQUFFLFNBQVNJO29CQUM3RW5CLElBQUksQ0FBQyxhQUFhLEVBQUVpRCxPQUFPSSxRQUFRLEVBQUUsRUFBRSxTQUFTbEM7b0JBQ2hEbkIsSUFBSSxDQUFDLHNCQUFzQixFQUFFc0MsZUFBZSxDQUFDLEVBQUVDLGtCQUFrQnZELElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBU21DO29CQUN2Rm5CLElBQUksQ0FBQyxpQkFBaUIsRUFBRXVELGFBQWEsRUFBRSxTQUFTcEM7b0JBRWhELE1BQU11QyxhQUFhSCxZQUFZSSxLQUFLLENBQUMsTUFBTUMsTUFBTSxDQUFDLENBQUNDLE9BQ2pEQSxLQUFLbEQsUUFBUSxDQUFDLGVBQ2RrRCxLQUFLbEQsUUFBUSxDQUFDLGFBQ2RrRCxLQUFLQyxJQUFJLEdBQUdDLFVBQVUsQ0FBQyxXQUN2QkYsS0FBS0MsSUFBSSxHQUFHQyxVQUFVLENBQUM7b0JBR3pCLElBQUdMLFdBQVdNLE1BQU0sR0FBRyxHQUFHO3dCQUN4QmhFLElBQUksaUJBQWlCLFNBQVNtQjt3QkFFOUJ1QyxXQUFXTyxLQUFLLENBQUMsR0FBRyxJQUFJQyxPQUFPLENBQUMsQ0FBQ0w7NEJBQy9CN0QsSUFBSSxDQUFDLEVBQUUsRUFBRTZELE1BQU0sRUFBRSxTQUFTMUM7d0JBQzVCO3dCQUVBLElBQUd1QyxXQUFXTSxNQUFNLEdBQUcsSUFBSTs0QkFDekJoRSxJQUFJLENBQUMsVUFBVSxFQUFFMEQsV0FBV00sTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLEVBQUUsU0FBUzdDO3dCQUNsRTtvQkFDRjtvQkFFQUksUUFBUTRDLElBQUksQ0FBQztnQkFDZixPQUFPO29CQUNMbkUsSUFBSSxDQUFDLEVBQUUsRUFBRWUsUUFBUSxpRUFBaUUsQ0FBQyxFQUFFLFFBQVFJO29CQUU3RixJQUFHLENBQUNBLFNBQVNvQyxhQUFhO3dCQUN4QnZELElBQUksQ0FBQyxhQUFhLEVBQUV1RCxhQUFhLEVBQUUsUUFBUXBDO29CQUM3QztvQkFFQUksUUFBUTZDLE9BQU8sQ0FBQztnQkFDbEI7WUFDRixPQUFPO2dCQUNMN0MsUUFBUTZDLE9BQU8sQ0FBQztZQUNsQjtRQUNGLEVBQUUsT0FBTUMsT0FBTztZQUNickUsSUFBSSxDQUFDLEVBQUUsRUFBRWUsUUFBUSxtREFBbUQsQ0FBQyxFQUFFLFNBQVNJO1lBQ2hGbkIsSUFBSSxDQUFDLFNBQVMsRUFBRXFFLE1BQU1DLE9BQU8sRUFBRSxFQUFFLFNBQVNuRDtZQUUxQyxJQUFHa0QsaUJBQWlCRSxTQUFTRixNQUFNRyxLQUFLLEVBQUU7Z0JBQ3hDeEUsSUFBSSxDQUFDLFVBQVUsRUFBRXFFLE1BQU1HLEtBQUssRUFBRSxFQUFFLFNBQVNyRDtZQUMzQztZQUVBSSxRQUFRNEMsSUFBSSxDQUFDO1FBQ2Y7SUFDRjtJQUVBLE1BQU0zQixjQUFjO1FBQ2xCQyxVQUFVO1FBQ1ZOLEtBQUtDO1FBQ0xNLEtBQUs7UUFDTEMsT0FBTztRQUNQOEIsUUFBUTtJQUNWO0lBQ0EsTUFBTTdCLFVBQW9CL0QsU0FBUywrQ0FBK0MyRDtJQUNsRixNQUFNa0MsVUFBb0I3RixTQUFTLDhDQUE4QzJEO0lBQ2pGLE1BQU1tQyxjQUF3QjtXQUFJL0I7V0FBWThCO0tBQVE7SUFFdEQsTUFBTUUsV0FBcUJoRixjQUFjLFFBQVFMLFVBQVV5QixNQUFNO0lBRWpFLElBQUc0RCxTQUFTWixNQUFNLEVBQUU7UUFDbEIsTUFBTWEsY0FBc0I5RSxrQkFBa0IsV0FBVztRQUV6RCxJQUFHLENBQUM4RSxhQUFhO1lBQ2Y3RSxJQUFJLENBQUMsRUFBRSxFQUFFZSxRQUFRLHVFQUF1RSxDQUFDLEVBQUUsU0FBU0k7WUFDcEduQixJQUFJLG9EQUFvRCxRQUFRbUI7WUFDaEUsT0FBTztRQUNUO1FBRUEsTUFBTTJELGlCQUEyQjtZQUMvQixHQUFHMUMsVUFBVSxVQUFVLENBQUM7WUFDeEI7WUFDQUE7WUFDQTtZQUNBSDtZQUNBO1lBQ0E1QyxZQUFZZ0QsU0FBUztTQUN0QjtRQUVELElBQUk7WUFDRixNQUFNaEUsTUFBTXdHLGFBQWFDLGdCQUFnQjtnQkFBQzNCLFVBQVU7WUFBTTtZQUMxRDVCLFFBQVE2QyxPQUFPLENBQUMsQ0FBQyx1QkFBdUIsRUFBRVEsU0FBU1osTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN4RSxFQUFFLE9BQU1LLE9BQU87WUFDYnJFLElBQUksQ0FBQyxFQUFFLEVBQUVlLFFBQVEsUUFBUSxFQUFFc0QsTUFBTUMsT0FBTyxFQUFFLEVBQUUsU0FBU25EO1lBRXJESSxRQUFRNEMsSUFBSSxDQUFDO1lBRWJyRCxTQUFTO1lBQ1QsT0FBTztRQUNUO0lBQ0Y7SUFFQSxNQUFNaUUsV0FBcUJuRixjQUFjLFFBQVFMLFVBQVV5QixNQUFNO0lBQ2pFLE1BQU1nRSxXQUFxQnBGLGNBQWMsUUFBUUwsVUFBVXlCLE1BQU07SUFDakUsTUFBTWlFLFdBQXFCckYsY0FBYyxRQUFRTCxVQUFVeUIsTUFBTTtJQUNqRSxNQUFNa0UsV0FBcUJ0RixjQUFjLFFBQVFMLFVBQVV5QixNQUFNO0lBQ2pFLE1BQU1tRSxhQUF1QjtXQUFJSjtXQUFhQztXQUFhQztXQUFhQztLQUFTO0lBRWpGLElBQUdDLFdBQVduQixNQUFNLEVBQUU7UUFDcEIsSUFBSTtZQUNGLE1BQU10RSxVQUFVeUYsWUFBWSxTQUFTNUQsU0FBU2hDLFVBQVV5QixNQUFNO1FBQ2hFLEVBQUUsT0FBTXFELE9BQU87WUFDYnJFLElBQUksQ0FBQyxFQUFFLEVBQUVlLFFBQVEsUUFBUSxFQUFFc0QsTUFBTUMsT0FBTyxFQUFFLEVBQUUsU0FBU25EO1lBRXJESSxRQUFRNEMsSUFBSSxDQUFDO1lBRWJyRCxTQUFTO1lBQ1QsT0FBTztRQUNUO0lBQ0Y7SUFFQSxNQUFNc0UsV0FBcUJ4RixjQUFjLFFBQVFMLFVBQVV5QixNQUFNO0lBQ2pFLE1BQU1xRSxXQUFxQnpGLGNBQWMsUUFBUUwsVUFBVXlCLE1BQU07SUFDakUsTUFBTXNFLFlBQXNCMUYsY0FBYyxTQUFTTCxVQUFVeUIsTUFBTTtJQUNuRSxNQUFNdUUsYUFBdUIzRixjQUFjLFVBQVVMLFVBQVV5QixNQUFNO0lBQ3JFLE1BQU13RSxZQUFzQjtXQUFJSjtXQUFhQztXQUFhQztXQUFjQztLQUFXO0lBRW5GLElBQUdDLFVBQVV4QixNQUFNLEVBQUU7UUFDbkIsSUFBSTtZQUNGLE1BQU10RSxVQUFVOEYsV0FBVyxRQUFRakUsU0FBU2hDLFVBQVV5QixNQUFNO1FBQzlELEVBQUUsT0FBTXFELE9BQU87WUFDYnJFLElBQUksQ0FBQyxFQUFFLEVBQUVlLFFBQVEsUUFBUSxFQUFFc0QsTUFBTUMsT0FBTyxFQUFFLEVBQUUsU0FBU25EO1lBRXJESSxRQUFRNEMsSUFBSSxDQUFDO1lBRWJyRCxTQUFTO1lBQ1QsT0FBTztRQUNUO0lBQ0Y7SUFFQSxNQUFNMkUsVUFBb0I3RixjQUFjLE9BQU9MLFVBQVV5QixNQUFNO0lBRS9ELElBQUd5RSxRQUFRekIsTUFBTSxFQUFFO1FBQ2pCLElBQUk7WUFDRixNQUFNdEUsVUFBVStGLFNBQVMsYUFBYWxFLFNBQVNoQyxVQUFVeUIsTUFBTTtRQUNqRSxFQUFFLE9BQU1xRCxPQUFPO1lBQ2JyRSxJQUFJLENBQUMsRUFBRSxFQUFFZSxRQUFRLFFBQVEsRUFBRXNELE1BQU1DLE9BQU8sRUFBRSxFQUFFLFNBQVNuRDtZQUVyREksUUFBUTRDLElBQUksQ0FBQztZQUVickQsU0FBUztZQUNULE9BQU87UUFDVDtJQUNGO0lBRUEsSUFBRzZELFlBQVlYLE1BQU0sS0FBSyxHQUFHO1FBQzNCaEUsSUFBSSxDQUFDLEVBQUUsRUFBRWUsUUFBUSw4Q0FBOEMsRUFBRXFCLFdBQVcsRUFBRSxRQUFRakI7UUFDdEZJLFFBQVE2QyxPQUFPLENBQUM7UUFDaEJ0RCxTQUFTO1FBQ1QsT0FBTztJQUNUO0lBRUFTLFFBQVF5QixLQUFLLENBQUMxQixRQUFRLDRCQUE0QjtJQUVsRCxJQUFJO1FBQ0YsTUFBTW9FLG9CQUFvQmYsWUFBWWdCLEdBQUcsQ0FBQyxPQUFPckY7WUFDL0MsTUFBTXNGLHVCQUF1QnpHLGFBQWFpRCxXQUFXOUI7WUFDckQsTUFBTWUsYUFBYWY7WUFDbkIsTUFBTXVGLGFBQWFELHFCQUFxQkUsT0FBTyxDQUFDLGVBQWU7WUFDL0QsTUFBTTVFLGFBQWE3QixZQUFZNEMsV0FBVzREO1lBQzFDLE1BQU1FLGdCQUFnQnpHLFFBQVE0QjtZQUU5QixJQUFHLENBQUM1QyxXQUFXeUgsZ0JBQWdCO2dCQUM3QnBILFVBQVVvSCxlQUFlO29CQUFDQyxXQUFXO2dCQUFJO1lBQzNDO1lBRUEsTUFBTUMsYUFBYXhILGFBQWE0QyxZQUFZO1lBQzVDLE1BQU02RSxhQUFrQztnQkFDdEMsR0FBR25FLFNBQVM7Z0JBQ1p4QixVQUFVRDtnQkFDVjZGLFFBQVE7b0JBQ05DLE1BQU1uRixXQUFXLFFBQVEsYUFBdUJjLFdBQVdvRSxRQUFRQyxRQUFpQjtvQkFDcEYsR0FBR3JFLFdBQVdvRSxNQUFNO2dCQUN0QjtnQkFDQUUsWUFBWXRFLFdBQVdzRSxjQUFjO1lBQ3ZDO1lBRUEsTUFBTXBELFNBQVMsTUFBTTdFLFVBQVU2SCxZQUFZQztZQUUzQ3hILGNBQWN3QyxZQUFZK0IsT0FBT3FELElBQUk7UUFDdkM7UUFFQSxNQUFNQyxRQUFRckQsR0FBRyxDQUFDd0M7UUFFbEJuRSxRQUFRNkMsT0FBTyxDQUFDO0lBQ2xCLEVBQUUsT0FBTUMsT0FBTztRQUNickUsSUFBSSxDQUFDLEVBQUUsRUFBRWUsUUFBUSw4QkFBOEIsQ0FBQyxFQUFFLFNBQVNJO1FBQzNEbkIsSUFBSSxDQUFDLFNBQVMsRUFBRXFFLE1BQU1DLE9BQU8sRUFBRSxFQUFFLFNBQVNuRDtRQUUxQyxJQUFHa0QsaUJBQWlCRSxPQUFPO1lBQ3pCLElBQUdGLE1BQU1HLEtBQUssRUFBRTtnQkFDZHhFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRXFFLE1BQU1HLEtBQUssRUFBRSxFQUFFLFNBQVNyRDtZQUNqRDtZQUVBLElBQUcsY0FBY2tELFNBQVMsVUFBVUEsT0FBTztnQkFDekNyRSxJQUFJLENBQUMsUUFBUSxFQUFFLEFBQUNxRSxNQUFjOUQsUUFBUSxJQUFJLEFBQUM4RCxNQUFjL0QsSUFBSSxFQUFFLEVBQUUsU0FBU2E7WUFDNUU7UUFDRjtRQUVBLElBQUcsQ0FBQ0EsT0FBTztZQUNULHNDQUFzQztZQUN0Q3FGLFFBQVFuQyxLQUFLLENBQUMseUJBQXlCQTtRQUN6QztRQUVBOUMsUUFBUTRDLElBQUksQ0FBQztRQUVickQsU0FBUztRQUNULE9BQU87SUFDVDtJQUVBLElBQUk7UUFDRixNQUFNckIsb0JBQW9COEIsU0FBU2hDLFVBQVV5QixNQUFNLEVBQUVHO0lBQ3ZELEVBQUUsT0FBTXNGLFdBQVc7UUFDakJ6RyxJQUFJLENBQUMsRUFBRSxFQUFFZSxRQUFRLHlDQUF5QyxFQUFFMEYsVUFBVW5DLE9BQU8sRUFBRSxFQUFFLFNBQVNuRDtRQUUxRkksUUFBUTRDLElBQUksQ0FBQztRQUVickQsU0FBUztRQUNULE9BQU87SUFDVDtJQUVBQSxTQUFTO0lBQ1QsT0FBTztBQUNULEVBQUUifQ==
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jb21waWxlL2NvbXBpbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7dHJhbnNmb3JtfSBmcm9tICdAc3djL2NvcmUnO1xuaW1wb3J0IHtleGVjYX0gZnJvbSAnZXhlY2EnO1xuaW1wb3J0IHtleGlzdHNTeW5jLCBsc3RhdFN5bmMsIHJlYWRkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMsIG1rZGlyU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSwgam9pbiBhcyBwYXRoSm9pbiwgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLCByZXNvbHZlIGFzIHBhdGhSZXNvbHZlLCBkaXJuYW1lfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NoZWNrTGlua2VkTW9kdWxlcywgY29weUNvbmZpZ3VyZWRGaWxlcywgY29weUZpbGVzLCBjcmVhdGVTcGlubmVyLCBnZXRGaWxlc0J5RXh0LCByZW1vdmVGaWxlc30gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7Z2V0RGlyTmFtZSwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmltcG9ydCB0eXBlIHtTV0NPcHRpb25zfSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuXG5jb25zdCBTT1VSQ0VfR0xPQl9JR05PUkUgPSBbXG4gICcqKi9fX21vY2tzX18vKionLFxuICAnKiovX190ZXN0c19fLyoqJyxcbiAgJyoqL3Rlc3RzLyoqJ1xuXTtcblxuZXhwb3J0IGNvbnN0IGhhc0ZpbGVUeXBlID0gKHN0YXJ0UGF0aDogc3RyaW5nLCBleHQ6IHN0cmluZ1tdKTogYm9vbGVhbiA9PiB7XG4gIGlmKCFleGlzdHNTeW5jKHN0YXJ0UGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBmaWxlczogc3RyaW5nW10gPSByZWFkZGlyU3luYyhzdGFydFBhdGgpO1xuXG4gIHJldHVybiBmaWxlcy5zb21lKChmaWxlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBmaWxlbmFtZTogc3RyaW5nID0gcGF0aEpvaW4oc3RhcnRQYXRoLCBmaWxlKTtcbiAgICBjb25zdCBmaWxlRXh0OiBzdHJpbmcgPSBwYXRoRXh0bmFtZShmaWxlbmFtZSk7XG4gICAgY29uc3Qgc3RhdCA9IGxzdGF0U3luYyhmaWxlbmFtZSk7XG5cbiAgICBpZihzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiBoYXNGaWxlVHlwZShmaWxlbmFtZSwgZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXh0LmluY2x1ZGVzKGZpbGVFeHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb21waWxlID0gYXN5bmMgKGNtZDogYW55LCBjYWxsYmFjazogYW55ID0gKCkgPT4gKHt9KSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29uZmlnLFxuICAgIGZvcm1hdCA9ICdlc20nLFxuICAgIG91dHB1dFBhdGgsXG4gICAgcXVpZXQsXG4gICAgcmVtb3ZlLFxuICAgIHNvdXJjZVBhdGgsXG4gICAgd2F0Y2hcbiAgfSA9IGNtZDtcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGxvZyhgJHtjbGlOYW1lfSBjb21waWxpbmcuLi5gLCAnaW5mbycsIHF1aWV0KTtcblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcoY21kKTtcblxuICBjb25zdCB7b3V0cHV0RnVsbFBhdGgsIHJlYWN0Q29tcGlsZXIsIHNvdXJjZUZ1bGxQYXRoLCBzd2M6IHBhcnNlZFN3Y0NvbmZpZywgdXNlVHlwZXNjcmlwdH0gPSBMZXhDb25maWcuY29uZmlnO1xuICBjb25zdCBzd2NDb25maWcgPSBMZXhDb25maWcuZ2V0U1dDQ29uZmlnV2l0aFJlYWN0Q29tcGlsZXIocGFyc2VkU3djQ29uZmlnLCByZWFjdENvbXBpbGVyKTtcbiAgY29uc3Qgb3V0cHV0RGlyOiBzdHJpbmcgPSBvdXRwdXRQYXRoXG4gICAgPyBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBvdXRwdXRQYXRoKVxuICAgIDogKG91dHB1dEZ1bGxQYXRoIHx8IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuL2xpYicpKTtcbiAgY29uc3Qgc291cmNlRGlyOiBzdHJpbmcgPSBzb3VyY2VQYXRoID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgYC4vJHtzb3VyY2VQYXRofWApIDogc291cmNlRnVsbFBhdGggfHwgJyc7XG4gIGNvbnN0IGRpck5hbWUgPSBnZXREaXJOYW1lKCk7XG5cbiAgY2hlY2tMaW5rZWRNb2R1bGVzKCk7XG5cbiAgaWYocmVtb3ZlKSB7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMob3V0cHV0RGlyKTtcbiAgfVxuXG4gIGlmKHVzZVR5cGVzY3JpcHQpIHtcbiAgICBjb25zdCB0eXBlc2NyaXB0UGF0aDogc3RyaW5nID0gcmVzb2x2ZUJpbmFyeVBhdGgoJ3RzYycsICd0eXBlc2NyaXB0Jyk7XG5cbiAgICBpZighdHlwZXNjcmlwdFBhdGgpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogVHlwZVNjcmlwdCBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlcyBvciBtb25vcmVwbyByb290YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgbG9nKCdQbGVhc2UgcmVpbnN0YWxsIExleCBvciBjaGVjayB5b3VyIGluc3RhbGxhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRUeXBlU2NyaXB0Q29uZmlnID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3RzY29uZmlnLmJ1aWxkLmpzb24nKTtcbiAgICBjb25zdCB0eXBlU2NyaXB0Q29uZmlnID0gY29uZmlnIHx8IChleGlzdHNTeW5jKGRlZmF1bHRUeXBlU2NyaXB0Q29uZmlnKSA/IGRlZmF1bHRUeXBlU2NyaXB0Q29uZmlnIDogdW5kZWZpbmVkKTtcbiAgICBjb25zdCB0eXBlc2NyaXB0T3B0aW9uczogc3RyaW5nW10gPSB0eXBlU2NyaXB0Q29uZmlnXG4gICAgICA/IFsnLXAnLCB0eXBlU2NyaXB0Q29uZmlnLCAnLS1lbWl0RGVjbGFyYXRpb25Pbmx5JywgJy0tc2tpcExpYkNoZWNrJ11cbiAgICAgIDogKCgpID0+IHtcbiAgICAgICAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgICAgICAgY3dkOiBzb3VyY2VEaXIsXG4gICAgICAgICAgZG90OiBmYWxzZSxcbiAgICAgICAgICBpZ25vcmU6IFNPVVJDRV9HTE9CX0lHTk9SRSxcbiAgICAgICAgICBub2RpcjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0c0ZpbGVzID0gZ2xvYlN5bmMoJyoqLyEoKi5zcGVjfCoudGVzdHwqLmludGVncmF0aW9ufCouZTJlKS50cycsIGdsb2JPcHRpb25zKTtcbiAgICAgICAgY29uc3QgdHN4RmlsZXMgPSBnbG9iU3luYygnKiovISgqLnNwZWN8Ki50ZXN0fCouaW50ZWdyYXRpb258Ki5lMmUpLnRzeCcsIGdsb2JPcHRpb25zKTtcbiAgICAgICAgY29uc3QgYWxsU291cmNlRmlsZXMgPSBbLi4udHNGaWxlcywgLi4udHN4RmlsZXNdO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgLi4uTGV4Q29uZmlnLmdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzKCksXG4gICAgICAgICAgLi4uYWxsU291cmNlRmlsZXNcbiAgICAgICAgXTtcbiAgICAgIH0pKCk7XG5cbiAgICBzcGlubmVyLnN0YXJ0KCdHZW5lcmF0aW5nIFR5cGVTY3JpcHQgZGVjbGFyYXRpb25zLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY2EodHlwZXNjcmlwdFBhdGgsIHR5cGVzY3JpcHRPcHRpb25zLCB7XG4gICAgICAgIGFsbDogdHJ1ZSxcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgICByZWplY3Q6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgaWYocmVzdWx0LmV4aXRDb2RlICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IGhhc0RlY2xhcmF0aW9ucyA9IHJlc3VsdC5hbGw/LmluY2x1ZGVzKCdXcml0aW5nJykgfHwgcmVzdWx0LmFsbD8uaW5jbHVkZXMoJ0RlY2xhcmF0aW9uJykgfHwgZmFsc2U7XG4gICAgICAgIGNvbnN0IGVycm9yT3V0cHV0ID0gcmVzdWx0LnN0ZGVyciB8fCByZXN1bHQuc3Rkb3V0IHx8IHJlc3VsdC5hbGwgfHwgJ1Vua25vd24gZXJyb3InO1xuXG4gICAgICAgIGlmKCFoYXNEZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBmYWlsZWRgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgbG9nKGBcXG5FeGl0IENvZGU6ICR7cmVzdWx0LmV4aXRDb2RlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBsb2coYFxcblR5cGVTY3JpcHQgQ29tbWFuZDogJHt0eXBlc2NyaXB0UGF0aH0gJHt0eXBlc2NyaXB0T3B0aW9ucy5qb2luKCcgJyl9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIGxvZyhgXFxuRXJyb3IgT3V0cHV0OlxcbiR7ZXJyb3JPdXRwdXR9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICAgICAgY29uc3QgZXJyb3JMaW5lcyA9IGVycm9yT3V0cHV0LnNwbGl0KCdcXG4nKS5maWx0ZXIoKGxpbmUpID0+XG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdlcnJvciBUUycpIHx8XG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdFcnJvcjonKSB8fFxuICAgICAgICAgICAgbGluZS50cmltKCkuc3RhcnRzV2l0aCgnc3JjLycpIHx8XG4gICAgICAgICAgICBsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCdUUycpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmKGVycm9yTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbG9nKCdcXG5LZXkgRXJyb3JzOicsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgICAgICAgZXJyb3JMaW5lcy5zbGljZSgwLCAxMCkuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgICAgICAgICBsb2coYCAgJHtsaW5lfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZihlcnJvckxpbmVzLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgICAgICAgIGxvZyhgICAuLi4gYW5kICR7ZXJyb3JMaW5lcy5sZW5ndGggLSAxMH0gbW9yZSBlcnJvcnNgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3Bpbm5lci5mYWlsKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZmFpbGVkLicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gY29tcGxldGVkIHdpdGggZXJyb3JzYCwgJ3dhcm4nLCBxdWlldCk7XG5cbiAgICAgICAgICBpZighcXVpZXQgJiYgZXJyb3JPdXRwdXQpIHtcbiAgICAgICAgICAgIGxvZyhgXFxuV2FybmluZ3M6XFxuJHtlcnJvck91dHB1dH1gLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ1R5cGVTY3JpcHQgZGVjbGFyYXRpb25zIGdlbmVyYXRlZCAod2l0aCB3YXJuaW5ncykuJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZCgnU3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZCBUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucyEnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBleGNlcHRpb25gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBsb2coYFxcbkVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBpZihlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLnN0YWNrKSB7XG4gICAgICAgIGxvZyhgXFxuU3RhY2s6XFxuJHtlcnJvci5zdGFja31gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIHNwaW5uZXIuZmFpbCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGhhZCBpc3N1ZXMsIGNvbnRpbnVpbmcuLi4nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBnbG9iT3B0aW9ucyA9IHtcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICBjd2Q6IHNvdXJjZURpcixcbiAgICBkb3Q6IGZhbHNlLFxuICAgIGlnbm9yZTogU09VUkNFX0dMT0JfSUdOT1JFLFxuICAgIG5vZGlyOiB0cnVlLFxuICAgIG5vc29ydDogdHJ1ZVxuICB9O1xuICBjb25zdCB0c0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKCcqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbnwqLmUyZSkudHMqJywgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBqc0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKCcqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbnwqLmUyZSkuanMnLCBnbG9iT3B0aW9ucyk7XG4gIGNvbnN0IHNvdXJjZUZpbGVzOiBzdHJpbmdbXSA9IFsuLi50c0ZpbGVzLCAuLi5qc0ZpbGVzXTtcblxuICBjb25zdCBjc3NGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuY3NzJywgTGV4Q29uZmlnLmNvbmZpZyk7XG5cbiAgaWYoY3NzRmlsZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgcG9zdGNzc1BhdGg6IHN0cmluZyA9IHJlc29sdmVCaW5hcnlQYXRoKCdwb3N0Y3NzJywgJ3Bvc3Rjc3MtY2xpJyk7XG5cbiAgICBpZighcG9zdGNzc1BhdGgpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogUG9zdENTUyBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlcyBvciBtb25vcmVwbyByb290YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgbG9nKCdQbGVhc2UgcmVpbnN0YWxsIExleCBvciBjaGVjayB5b3VyIGluc3RhbGxhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc3Rjc3NPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAgIGAke3NvdXJjZURpcn0vKiovKiouY3NzYCxcbiAgICAgICctLWJhc2UnLFxuICAgICAgc291cmNlRGlyLFxuICAgICAgJy0tZGlyJyxcbiAgICAgIG91dHB1dERpcixcbiAgICAgICctLWNvbmZpZycsXG4gICAgICBwYXRoUmVzb2x2ZShkaXJOYW1lLCAnLi4vLi4vcG9zdGNzcy5jb25maWcuanMnKVxuICAgIF07XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlY2EocG9zdGNzc1BhdGgsIHBvc3Rjc3NPcHRpb25zLCB7ZW5jb2Rpbmc6ICd1dGY4J30pO1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKGBTdWNjZXNzZnVsbHkgZm9ybWF0dGVkICR7Y3NzRmlsZXMubGVuZ3RofSBjc3MgZmlsZXMhYCk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCBmb3JtYXR0aW5nIGNzcy4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBnaWZGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuZ2lmJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IGpwZ0ZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5qcGcnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3QgcG5nRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLnBuZycsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBzdmdGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuc3ZnJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IGltYWdlRmlsZXM6IHN0cmluZ1tdID0gWy4uLmdpZkZpbGVzLCAuLi5qcGdGaWxlcywgLi4ucG5nRmlsZXMsIC4uLnN2Z0ZpbGVzXTtcblxuICBpZihpbWFnZUZpbGVzLmxlbmd0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5RmlsZXMoaW1hZ2VGaWxlcywgJ2ltYWdlJywgc3Bpbm5lciwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBtb3ZlIGltYWdlcyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHR0ZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy50dGYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgb3RmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLm90ZicsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCB3b2ZmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLndvZmYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgd29mZjJGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcud29mZjInLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3QgZm9udEZpbGVzOiBzdHJpbmdbXSA9IFsuLi50dGZGaWxlcywgLi4ub3RmRmlsZXMsIC4uLndvZmZGaWxlcywgLi4ud29mZjJGaWxlc107XG5cbiAgaWYoZm9udEZpbGVzLmxlbmd0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5RmlsZXMoZm9udEZpbGVzLCAnZm9udCcsIHNwaW5uZXIsIExleENvbmZpZy5jb25maWcpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gbW92ZSBmb250cyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1kRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLm1kJywgTGV4Q29uZmlnLmNvbmZpZyk7XG5cbiAgaWYobWRGaWxlcy5sZW5ndGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29weUZpbGVzKG1kRmlsZXMsICdkb2N1bWVudHMnLCBzcGlubmVyLCBMZXhDb25maWcuY29uZmlnKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIG1vdmUgZG9jcyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGlmKHNvdXJjZUZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBObyBzb3VyY2UgZmlsZXMgZm91bmQgdG8gY29tcGlsZSBpbiAke3NvdXJjZURpcn1gLCAnd2FybicsIHF1aWV0KTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoJ05vIGZpbGVzIHRvIGNvbXBpbGUuJyk7XG4gICAgY2FsbGJhY2soMCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBzcGlubmVyLnN0YXJ0KHdhdGNoID8gJ1dhdGNoaW5nIGZvciBjaGFuZ2VzLi4uJyA6ICdDb21waWxpbmcgd2l0aCBTV0MuLi4nKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHRyYW5zZm9ybVByb21pc2VzID0gc291cmNlRmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiB7XG4gICAgICBjb25zdCBmaWxlUmVsYXRpdmVUb1NvdXJjZSA9IHBhdGhSZWxhdGl2ZShzb3VyY2VEaXIsIGZpbGUpO1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGZpbGU7XG4gICAgICBjb25zdCBvdXRwdXRGaWxlID0gZmlsZVJlbGF0aXZlVG9Tb3VyY2UucmVwbGFjZSgvXFwuKHRzfHRzeCkkLywgJy5qcycpO1xuICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IHBhdGhSZXNvbHZlKG91dHB1dERpciwgb3V0cHV0RmlsZSk7XG4gICAgICBjb25zdCBvdXRwdXREaXJQYXRoID0gZGlybmFtZShvdXRwdXRQYXRoKTtcblxuICAgICAgaWYoIWV4aXN0c1N5bmMob3V0cHV0RGlyUGF0aCkpIHtcbiAgICAgICAgbWtkaXJTeW5jKG91dHB1dERpclBhdGgsIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IHJlYWRGaWxlU3luYyhzb3VyY2VQYXRoLCAndXRmOCcpO1xuICAgICAgY29uc3Qgc3djT3B0aW9uczogUGFydGlhbDxTV0NPcHRpb25zPiA9IHtcbiAgICAgICAgLi4uc3djQ29uZmlnLFxuICAgICAgICBmaWxlbmFtZTogZmlsZSxcbiAgICAgICAgbW9kdWxlOiB7XG4gICAgICAgICAgdHlwZTogZm9ybWF0ID09PSAnY2pzJyA/ICdjb21tb25qcycgYXMgY29uc3QgOiAoc3djQ29uZmlnPy5tb2R1bGU/LnR5cGUgYXMgJ2VzNicgfHwgJ2VzNicpLFxuICAgICAgICAgIC4uLnN3Y0NvbmZpZz8ubW9kdWxlXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZU1hcHM6IHN3Y0NvbmZpZz8uc291cmNlTWFwcyB8fCAnaW5saW5lJ1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJhbnNmb3JtKHNvdXJjZUNvZGUsIHN3Y09wdGlvbnMpO1xuXG4gICAgICB3cml0ZUZpbGVTeW5jKG91dHB1dFBhdGgsIHJlc3VsdC5jb2RlKTtcbiAgICB9KTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHRyYW5zZm9ybVByb21pc2VzKTtcblxuICAgIHNwaW5uZXIuc3VjY2VlZCgnQ29tcGlsZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBTV0MgY29tcGlsYXRpb24gZmFpbGVkYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGxvZyhgXFxuRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZihlcnJvci5zdGFjaykge1xuICAgICAgICBsb2coYFxcblN0YWNrIFRyYWNlOlxcbiR7ZXJyb3Iuc3RhY2t9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBpZignZmlsZW5hbWUnIGluIGVycm9yIHx8ICdmaWxlJyBpbiBlcnJvcikge1xuICAgICAgICBsb2coYFxcbkZpbGU6ICR7KGVycm9yIGFzIGFueSkuZmlsZW5hbWUgfHwgKGVycm9yIGFzIGFueSkuZmlsZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcignXFxuRnVsbCBFcnJvciBEZXRhaWxzOicsIGVycm9yKTtcbiAgICB9XG5cbiAgICBzcGlubmVyLmZhaWwoJ0NvZGUgY29tcGlsaW5nIGZhaWxlZC4nKTtcblxuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjb3B5Q29uZmlndXJlZEZpbGVzKHNwaW5uZXIsIExleENvbmZpZy5jb25maWcsIHF1aWV0KTtcbiAgfSBjYXRjaChjb3B5RXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBjb3B5IGNvbmZpZ3VyZWQgZmlsZXM6ICR7Y29weUVycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzLicpO1xuXG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBjYWxsYmFjaygwKTtcbiAgcmV0dXJuIDA7XG59O1xuIl0sIm5hbWVzIjpbInRyYW5zZm9ybSIsImV4ZWNhIiwiZXhpc3RzU3luYyIsImxzdGF0U3luYyIsInJlYWRkaXJTeW5jIiwicmVhZEZpbGVTeW5jIiwid3JpdGVGaWxlU3luYyIsIm1rZGlyU3luYyIsInN5bmMiLCJnbG9iU3luYyIsImV4dG5hbWUiLCJwYXRoRXh0bmFtZSIsImpvaW4iLCJwYXRoSm9pbiIsInJlbGF0aXZlIiwicGF0aFJlbGF0aXZlIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiZGlybmFtZSIsIkxleENvbmZpZyIsImNoZWNrTGlua2VkTW9kdWxlcyIsImNvcHlDb25maWd1cmVkRmlsZXMiLCJjb3B5RmlsZXMiLCJjcmVhdGVTcGlubmVyIiwiZ2V0RmlsZXNCeUV4dCIsInJlbW92ZUZpbGVzIiwiZ2V0RGlyTmFtZSIsInJlc29sdmVCaW5hcnlQYXRoIiwibG9nIiwiU09VUkNFX0dMT0JfSUdOT1JFIiwiaGFzRmlsZVR5cGUiLCJzdGFydFBhdGgiLCJleHQiLCJmaWxlcyIsInNvbWUiLCJmaWxlIiwiZmlsZW5hbWUiLCJmaWxlRXh0Iiwic3RhdCIsImlzRGlyZWN0b3J5IiwiaW5jbHVkZXMiLCJjb21waWxlIiwiY21kIiwiY2FsbGJhY2siLCJjbGlOYW1lIiwiY29uZmlnIiwiZm9ybWF0Iiwib3V0cHV0UGF0aCIsInF1aWV0IiwicmVtb3ZlIiwic291cmNlUGF0aCIsIndhdGNoIiwic3Bpbm5lciIsInBhcnNlQ29uZmlnIiwib3V0cHV0RnVsbFBhdGgiLCJyZWFjdENvbXBpbGVyIiwic291cmNlRnVsbFBhdGgiLCJzd2MiLCJwYXJzZWRTd2NDb25maWciLCJ1c2VUeXBlc2NyaXB0Iiwic3djQ29uZmlnIiwiZ2V0U1dDQ29uZmlnV2l0aFJlYWN0Q29tcGlsZXIiLCJvdXRwdXREaXIiLCJwcm9jZXNzIiwiY3dkIiwic291cmNlRGlyIiwiZGlyTmFtZSIsInR5cGVzY3JpcHRQYXRoIiwiZGVmYXVsdFR5cGVTY3JpcHRDb25maWciLCJ0eXBlU2NyaXB0Q29uZmlnIiwidW5kZWZpbmVkIiwidHlwZXNjcmlwdE9wdGlvbnMiLCJnbG9iT3B0aW9ucyIsImFic29sdXRlIiwiZG90IiwiaWdub3JlIiwibm9kaXIiLCJ0c0ZpbGVzIiwidHN4RmlsZXMiLCJhbGxTb3VyY2VGaWxlcyIsImdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzIiwic3RhcnQiLCJyZXN1bHQiLCJhbGwiLCJlbmNvZGluZyIsInJlamVjdCIsImV4aXRDb2RlIiwiaGFzRGVjbGFyYXRpb25zIiwiZXJyb3JPdXRwdXQiLCJzdGRlcnIiLCJzdGRvdXQiLCJlcnJvckxpbmVzIiwic3BsaXQiLCJmaWx0ZXIiLCJsaW5lIiwidHJpbSIsInN0YXJ0c1dpdGgiLCJsZW5ndGgiLCJzbGljZSIsImZvckVhY2giLCJmYWlsIiwic3VjY2VlZCIsImVycm9yIiwibWVzc2FnZSIsIkVycm9yIiwic3RhY2siLCJub3NvcnQiLCJqc0ZpbGVzIiwic291cmNlRmlsZXMiLCJjc3NGaWxlcyIsInBvc3Rjc3NQYXRoIiwicG9zdGNzc09wdGlvbnMiLCJnaWZGaWxlcyIsImpwZ0ZpbGVzIiwicG5nRmlsZXMiLCJzdmdGaWxlcyIsImltYWdlRmlsZXMiLCJ0dGZGaWxlcyIsIm90ZkZpbGVzIiwid29mZkZpbGVzIiwid29mZjJGaWxlcyIsImZvbnRGaWxlcyIsIm1kRmlsZXMiLCJ0cmFuc2Zvcm1Qcm9taXNlcyIsIm1hcCIsImZpbGVSZWxhdGl2ZVRvU291cmNlIiwib3V0cHV0RmlsZSIsInJlcGxhY2UiLCJvdXRwdXREaXJQYXRoIiwicmVjdXJzaXZlIiwic291cmNlQ29kZSIsInN3Y09wdGlvbnMiLCJtb2R1bGUiLCJ0eXBlIiwic291cmNlTWFwcyIsImNvZGUiLCJQcm9taXNlIiwiY29uc29sZSIsImNvcHlFcnJvciJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsU0FBUyxRQUFPLFlBQVk7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
|
|
@@ -13,4 +13,12 @@ export interface ServerlessDevOptions {
|
|
|
13
13
|
readonly wsPort?: number;
|
|
14
14
|
}
|
|
15
15
|
export type ServerlessDevCallback = (status: number) => void;
|
|
16
|
+
interface ServerlessCorsConfig {
|
|
17
|
+
readonly allowCredentials?: boolean;
|
|
18
|
+
readonly headers?: readonly string[];
|
|
19
|
+
readonly methods?: readonly string[];
|
|
20
|
+
readonly origins?: readonly string[];
|
|
21
|
+
}
|
|
22
|
+
export declare const getCorsHeaders: (cors: boolean | ServerlessCorsConfig | undefined, requestOrigin: string | undefined) => Record<string, string>;
|
|
16
23
|
export declare const serverlessDev: (cmd: ServerlessDevOptions, callback?: ServerlessDevCallback) => Promise<number>;
|
|
24
|
+
export {};
|