geni-bioinfo 0.1.6 → 0.1.8

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.
@@ -18,6 +18,8 @@ function addCommonOptions(cmd) {
18
18
  }
19
19
  function buildParams(opts) {
20
20
  const params = new URLSearchParams();
21
+ if (process.env.GENI_TENANT_ID)
22
+ params.set('tenantId', process.env.GENI_TENANT_ID);
21
23
  if (opts.startDate)
22
24
  params.set('from', `${opts.startDate}T00:00:00.000Z`);
23
25
  if (opts.endDate) {
@@ -46,10 +48,13 @@ addCommonOptions(exports.costsCommand
46
48
  .command('submission')
47
49
  .description('Per-submission cost breakdown')
48
50
  .argument('[ids...]', 'Filter by submission IDs')
51
+ .option('--status <status>', 'Filter by submission status (case insensitive, e.g. succeeded, FAILED)')
49
52
  .option('--limit <n>', 'Max results (1–200)', '50')
50
53
  .option('--offset <n>', 'Pagination offset', '0')
51
54
  .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))).action(async (ids, opts) => {
52
55
  const params = buildParams(opts);
56
+ if (opts.status)
57
+ params.set('submissionStatus', opts.status.toUpperCase());
53
58
  ids.forEach(id => params.append('id', id));
54
59
  params.set('limit', opts.limit);
55
60
  params.set('offset', opts.offset);
@@ -77,6 +82,53 @@ addCommonOptions(exports.costsCommand
77
82
  const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/costs/instance-type${qs(buildParams(opts))}`));
78
83
  (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.analyticsByInstanceTypeColumns);
79
84
  });
85
+ exports.costsCommand
86
+ .command('task')
87
+ .description('Per-task cost breakdown')
88
+ .argument('[ids...]', 'Filter by task IDs')
89
+ .option('--submission-id <id>', 'Filter by submission ID')
90
+ .option('--limit <n>', 'Max results (1–200)', '50')
91
+ .option('--offset <n>', 'Pagination offset', '0')
92
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
93
+ .action(async (ids, opts) => {
94
+ const params = new URLSearchParams();
95
+ if (process.env.GENI_TENANT_ID)
96
+ params.set('tenantId', process.env.GENI_TENANT_ID);
97
+ ids.forEach(id => params.append('id', id));
98
+ if (opts.submissionId)
99
+ params.set('submissionId', opts.submissionId);
100
+ params.set('limit', opts.limit);
101
+ params.set('offset', opts.offset);
102
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/costs/task${qs(params)}`));
103
+ (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.costsByTaskColumns);
104
+ });
105
+ addCommonOptions(exports.costsCommand
106
+ .command('instance')
107
+ .description('Per-instance cost breakdown')
108
+ .option('--environment-id <id>', 'Filter by environment ID')
109
+ .option('--engine-id <id>', 'Filter by engine ID')
110
+ .option('--queue-id <id>', 'Filter by queue ID')
111
+ .option('--instance-type <type>', 'Filter by EC2 instance type (e.g. m5.xlarge)')
112
+ .option('--execution-mode <mode>', 'Filter by execution mode (e.g. SPOT, ON_DEMAND)')
113
+ .option('--limit <n>', 'Max results (1–200)', '50')
114
+ .option('--offset <n>', 'Pagination offset', '0')
115
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))).action(async (opts) => {
116
+ const params = buildParams(opts);
117
+ if (opts.environmentId)
118
+ params.set('environmentId', opts.environmentId);
119
+ if (opts.engineId)
120
+ params.set('engineId', opts.engineId);
121
+ if (opts.queueId)
122
+ params.set('queueId', opts.queueId);
123
+ if (opts.instanceType)
124
+ params.set('instanceType', opts.instanceType);
125
+ if (opts.executionMode)
126
+ params.set('executionMode', opts.executionMode);
127
+ params.set('limit', opts.limit);
128
+ params.set('offset', opts.offset);
129
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/costs/instance${qs(params)}`));
130
+ (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.costsByInstanceColumns);
131
+ });
80
132
  addCommonOptions(exports.costsCommand
81
133
  .command('engine')
82
134
  .description('Cost grouped by engine')
@@ -104,8 +156,16 @@ addCommonOptions(exports.costsCommand
104
156
  exports.costsCommand
105
157
  .command('sync')
106
158
  .description('Trigger a CUR actual-cost sync')
107
- .action(async () => {
108
- const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)('/costs/sync'), { method: 'POST' });
159
+ .option('--reset', 'Clear all actual cost data before syncing, forcing a full recalculation from CUR')
160
+ .action(async (opts) => {
161
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)('/costs/sync'), {
162
+ method: 'POST',
163
+ headers: { 'Content-Type': 'application/json' },
164
+ body: JSON.stringify({
165
+ reset: opts.reset ?? false,
166
+ ...(process.env.GENI_TENANT_ID ? { tenantId: process.env.GENI_TENANT_ID } : {}),
167
+ }),
168
+ });
109
169
  console.log(`Sync job enqueued: ${data.jobId}`);
110
170
  });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY29zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQTJDO0FBQzNDLGtDQUEyQztBQUMzQyw0Q0FXcUI7QUFRckIsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUE7QUFFckMsU0FBUyxTQUFTLENBQUMsS0FBYTtJQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixLQUFLLEdBQUcsQ0FBQyxDQUFBO0lBQ2hGLE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsR0FBWTtJQUNwQyxPQUFPLEdBQUc7U0FDUCxNQUFNLENBQUMsMkJBQTJCLEVBQUUsNkJBQTZCLEVBQUUsU0FBUyxDQUFDO1NBQzdFLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSwyQkFBMkIsRUFBRSxTQUFTLENBQUM7U0FDekUsTUFBTSxDQUFDLDhCQUE4QixFQUFFLCtEQUErRCxDQUFDLENBQUE7QUFDNUcsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLElBQWM7SUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQTtJQUVwQyxJQUFJLElBQUksQ0FBQyxTQUFTO1FBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFBO0lBRXpFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQTtRQUNuRCxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUNoQyxNQUFNLENBQUMsR0FBRyxD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QixNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsZ0JBQVMsRUFBQyxJQUFBLGFBQU0sRUFBQyxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBc0IsQ0FBQTtJQUM1RixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtBQUNqRCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcidcbmltcG9ydCB7IGFwaVVybCwgZmV0Y2hKc29uIH0gZnJvbSAnLi4vYXV0aCdcbmltcG9ydCB7XG4gIGZvcm1hdE91dHB1dCxcbiAgYW5hbHl0aWNzU3VtbWFyeUNvbHVtbnMsXG4gIGFuYWx5dGljc0J5U3VibWlzc2lvbkNvbHVtbnMsXG4gIGFuYWx5dGljc0J5RW52aXJvbm1lbnRDb2x1bW5zLFxuICBhbmFseXRpY3NCeVF1ZXVlQ29sdW1ucyxcbiAgYW5hbHl0aWNzQnlJbnN0YW5jZVR5cGVDb2x1bW5zLFxuICBhbmFseXRpY3NPdmVyVGltZUNvbHVtbnMsXG4gIGNvc3RzQnlFbmdpbmVDb2x1bW5zLFxuICBjb3N0c0J5RXhlY3V0aW9uTW9kZUNvbHVtbnMsXG4gIHR5cGUgT3V0cHV0Rm9ybWF0LFxufSBmcm9tICcuLi9mb3JtYXQuanMnXG5cbnR5cGUgQmFzZU9wdHMgPSB7XG4gIHN0YXJ0RGF0ZT86IHN0cmluZ1xuICBlbmREYXRlPzogc3RyaW5nXG4gIHN1Ym1pc3Npb25TdGF0dXM/OiBzdHJpbmdcbn1cblxuY29uc3QgREFURV9SRSA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kL1xuXG5mdW5jdGlvbiBwYXJzZURhdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghREFURV9SRS50ZXN0KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBZWVlZLU1NLURELCBnb3QgXCIke3ZhbHVlfVwiYClcbiAgcmV0dXJuIHZhbHVlXG59XG5cbmZ1bmN0aW9uIGFkZENvbW1vbk9wdGlvbnMoY21kOiBDb21tYW5kKTogQ29tbWFuZCB7XG4gIHJldHVybiBjbWRcbiAgICAub3B0aW9uKCctLXN0YXJ0LWRhdGUgPFlZWVktTU0tREQ+JywgJ1N0YXJ0IGRhdGUgKFVUQywgaW5jbHVzaXZlKScsIHBhcnNlRGF0ZSlcbiAgICAub3B0aW9uKCctLWVuZC1kYXRlIDxZWVlZLU1NLUREPicsICdFbmQgZGF0ZSAoVVRDLCBpbmNsdXNpdmUpJywgcGFyc2VEYXRlKVxuICAgIC5vcHRpb24oJy0tc3VibWlzc2lvbi1zdGF0dXMgPHN0YXR1cz4nLCAnRmlsdGVyIGJ5IHN1Ym1pc3Npb24gc3RhdHVzIChlLmcuIFNVQ0NFRURFRCwgRkFJTEVELCBSVU5OSU5HKScpXG59XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKG9wdHM6IEJhc2VPcHRzKTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG5cbiAgaWYgKG9wdHMuc3RhcnREYXRlKSBwYXJhbXMuc2V0KCdmcm9tJywgYCR7b3B0cy5zdGFydERhdGV9VDAwOjAwOjAwLjAwMFpgKVxuXG4gIGlmIChvcHRzLmVuZERhdGUpIHtcbiAgICBjb25zdCBkID0gbmV3IERhdGUoYCR7b3B0cy5lbmREYXRlfVQwMDowMDowMC4wMDBaYClcbiAgICBkLnNldFVUQ0RhdGUoZC5nZXRVVENEYXRlKCkgKyAxKVxuICAgIHBhcmFtcy5zZXQoJ3RvJywgZC50b0lTT1N0cmluZygpKVxuICB9XG5cbiAgaWYgKG9wdHMuc3VibWlzc2lvblN0YXR1cykgcGFyYW1zLnNldCgnc3VibWlzc2lvblN0YXR1cycsIG9wdHMuc3VibWlzc2lvblN0YXR1cylcbiAgcmV0dXJuIHBhcmFtc1xufVxuXG5mdW5jdGlvbiBxcyhwYXJhbXM6IFVSTFNlYXJjaFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHMgPSBwYXJhbXMudG9TdHJpbmcoKVxuICByZXR1cm4gcyA/IGA/JHtzfWAgOiAnJ1xufVxuXG5leHBvcnQgY29uc3QgY29zdHNDb21tYW5kID0gbmV3IENvbW1hbmQoJ2Nvc3RzJylcbiAgLmRlc2NyaXB0aW9uKCdWaWV3IGNvc3QgYW5hbHl0aWNzJylcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ3N1bW1hcnknKVxuICAgIC5kZXNjcmlwdGlvbignT3ZlcmFsbCBjb3N0IHRvdGFscyBmb3IgdGhlIHRlbmFudCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAob3B0czogQmFzZU9wdHMgJiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9zdW1tYXJ5JHtxcyhidWlsZFBhcmFtcyhvcHRzKSl9YCkpXG4gIGZvcm1hdE91dHB1dChkYXRhLCBvcHRzLmZvcm1hdCwgYW5hbHl0aWNzU3VtbWFyeUNvbHVtbnMpXG59KVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnc3VibWlzc2lvbicpXG4gICAgLmRlc2NyaXB0aW9uKCdQZXItc3VibWlzc2lvbiBjb3N0IGJyZWFrZG93bicpXG4gICAgLmFyZ3VtZW50KCdbaWRzLi4uXScsICdGaWx0ZXIgYnkgc3VibWlzc2lvbiBJRHMnKVxuICAgIC5vcHRpb24oJy0tbGltaXQgPG4+JywgJ01heCByZXN1bHRzICgx4oCTMjAwKScsICc1MCcpXG4gICAgLm9wdGlvbignLS1vZmZzZXQgPG4+JywgJ1BhZ2luYXRpb24gb2Zmc2V0JywgJzAnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKGlkczogc3RyaW5nW10sIG9wdHM6IEJhc2VPcHRzICYgeyBsaW1pdDogc3RyaW5nOyBvZmZzZXQ6IHN0cmluZzsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSBidWlsZFBhcmFtcyhvcHRzKVxuICBpZHMuZm9yRWFjaChpZCA9PiBwYXJhbXMuYXBwZW5kKCdpZCcsIGlkKSlcbiAgcGFyYW1zLnNldCgnbGltaXQnLCBvcHRzLmxpbWl0KVxuICBwYXJhbXMuc2V0KCdvZmZzZXQnLCBvcHRzLm9mZnNldClcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9zdWJtaXNzaW9uJHtxcyhwYXJhbXMpfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgYW5hbHl0aWNzQnlTdWJtaXNzaW9uQ29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdlbnZpcm9ubWVudCcpXG4gICAgLmRlc2NyaXB0aW9uKCdDb3N0IGdyb3VwZWQgYnkgZW52aXJvbm1lbnQnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKG9wdHM6IEJhc2VPcHRzICYgeyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvZW52aXJvbm1lbnQke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGFuYWx5dGljc0J5RW52aXJvbm1lbnRDb2x1bW5zKVxufSlcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ3F1ZXVlJylcbiAgICAuZGVzY3JpcHRpb24oJ0Nvc3QgZ3JvdXBlZCBieSBxdWV1ZScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAob3B0czogQmFzZU9wdHMgJiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9xdWV1ZSR7cXMoYnVpbGRQYXJhbXMob3B0cykpfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgYW5hbHl0aWNzQnlRdWV1ZUNvbHVtbnMpXG59KVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnaW5zdGFuY2UtdHlwZScpXG4gICAgLmRlc2NyaXB0aW9uKCdDb3N0IGdyb3VwZWQgYnkgRUMyIGluc3RhbmNlIHR5cGUgYW5kIG1hcmtldCB0eXBlJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChvcHRzOiBCYXNlT3B0cyAmIHsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2Nvc3RzL2luc3RhbmNlLXR5cGUke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGFuYWx5dGljc0J5SW5zdGFuY2VUeXBlQ29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdlbmdpbmUnKVxuICAgIC5kZXNjcmlwdGlvbignQ29zdCBncm91cGVkIGJ5IGVuZ2luZScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAob3B0czogQmFzZU9wdHMgJiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9lbmdpbmUke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGNvc3RzQnlFbmdpbmVDb2x1bW5zKVxufSlcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ2V4ZWN1dGlvbi1tb2RlJylcbiAgICAuZGVzY3JpcHRpb24oJ0Nvc3QgZ3JvdXBlZCBieSBleGVjdXRpb24gbW9kZSAoc3BvdCAvIG9uLWRlbWFuZCknKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKG9wdHM6IEJhc2VPcHRzICYgeyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvZXhlY3V0aW9uLW1vZGUke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGNvc3RzQnlFeGVjdXRpb25Nb2RlQ29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdvdmVyLXRpbWUnKVxuICAgIC5kZXNjcmlwdGlvbignQ29zdCBidWNrZXRlZCBieSB0aW1lIHBlcmlvZCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWludGVydmFsIDxpbnRlcnZhbD4nLCAnVGltZSBidWNrZXQgc2l6ZScpLmNob2ljZXMoWydkYXknLCAnd2VlaycsICdtb250aCddKS5kZWZhdWx0KCdkYXknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChvcHRzOiBCYXNlT3B0cyAmIHsgaW50ZXJ2YWw6IHN0cmluZzsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSBidWlsZFBhcmFtcyhvcHRzKVxuICBwYXJhbXMuc2V0KCdpbnRlcnZhbCcsIG9wdHMuaW50ZXJ2YWwpXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvb3Zlci10aW1lJHtxcyhwYXJhbXMpfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgYW5hbHl0aWNzT3ZlclRpbWVDb2x1bW5zKVxufSlcblxuY29zdHNDb21tYW5kXG4gIC5jb21tYW5kKCdzeW5jJylcbiAgLmRlc2NyaXB0aW9uKCdUcmlnZ2VyIGEgQ1VSIGFjdHVhbC1jb3N0IHN5bmMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybCgnL2Nvc3RzL3N5bmMnKSwgeyBtZXRob2Q6ICdQT1NUJyB9KSBhcyB7IGpvYklkOiBzdHJpbmcgfVxuICAgIGNvbnNvbGUubG9nKGBTeW5jIGpvYiBlbnF1ZXVlZDogJHtkYXRhLmpvYklkfWApXG4gIH0pXG4iXX0=
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY29zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQTJDO0FBQzNDLGtDQUEyQztBQUMzQyw0Q0FhcUI7QUFRckIsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUE7QUFFckMsU0FBUyxTQUFTLENBQUMsS0FBYTtJQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixLQUFLLEdBQUcsQ0FBQyxDQUFBO0lBQ2hGLE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsR0FBWTtJQUNwQyxPQUFPLEdBQUc7U0FDUCxNQUFNLENBQUMsMkJBQTJCLEVBQUUsNkJBQTZCLEVBQUUsU0FBUyxDQUFDO1NBQzdFLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSwyQkFBMkIsRUFBRSxTQUFTLENBQUM7U0FDekUsTUFBTSxDQUFDLDhCQUE4QixFQUFFLCtEQUErRCxDQUFDLENBQUE7QUFDNUcsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLElBQWM7SUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQTtJQUVwQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYztRQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUE7SUFFbEYsSUFBSSxJQUFJLENBQUMsU0FBUztRQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsZ0JBQWdCLENBQUMsQ0FBQTtJQUV6RSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFP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QyxDQUFDLENBQUE7QUFFRixvQkFBWTtLQUNULE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDZixXQUFXLENBQUMsZ0NBQWdDLENBQUM7S0FDN0MsTUFBTSxDQUFDLFNBQVMsRUFBRSxrRkFBa0YsQ0FBQztLQUNyRyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQXlCLEVBQUUsRUFBRTtJQUMxQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsZ0JBQVMsRUFBQyxJQUFBLGFBQU0sRUFBQyxhQUFhLENBQUMsRUFBRTtRQUNsRCxNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRTtRQUMvQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLO1lBQzFCLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ2hGLENBQUM7S0FDSCxDQUFzQixDQUFBO0lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0FBQ2pELENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJ1xuaW1wb3J0IHsgYXBpVXJsLCBmZXRjaEpzb24gfSBmcm9tICcuLi9hdXRoJ1xuaW1wb3J0IHtcbiAgZm9ybWF0T3V0cHV0LFxuICBhbmFseXRpY3NTdW1tYXJ5Q29sdW1ucyxcbiAgYW5hbHl0aWNzQnlTdWJtaXNzaW9uQ29sdW1ucyxcbiAgYW5hbHl0aWNzQnlFbnZpcm9ubWVudENvbHVtbnMsXG4gIGFuYWx5dGljc0J5UXVldWVDb2x1bW5zLFxuICBhbmFseXRpY3NCeUluc3RhbmNlVHlwZUNvbHVtbnMsXG4gIGFuYWx5dGljc092ZXJUaW1lQ29sdW1ucyxcbiAgY29zdHNCeUVuZ2luZUNvbHVtbnMsXG4gIGNvc3RzQnlFeGVjdXRpb25Nb2RlQ29sdW1ucyxcbiAgY29zdHNCeVRhc2tDb2x1bW5zLFxuICBjb3N0c0J5SW5zdGFuY2VDb2x1bW5zLFxuICB0eXBlIE91dHB1dEZvcm1hdCxcbn0gZnJvbSAnLi4vZm9ybWF0LmpzJ1xuXG50eXBlIEJhc2VPcHRzID0ge1xuICBzdGFydERhdGU/OiBzdHJpbmdcbiAgZW5kRGF0ZT86IHN0cmluZ1xuICBzdWJtaXNzaW9uU3RhdHVzPzogc3RyaW5nXG59XG5cbmNvbnN0IERBVEVfUkUgPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC9cblxuZnVuY3Rpb24gcGFyc2VEYXRlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIURBVEVfUkUudGVzdCh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgWVlZWS1NTS1ERCwgZ290IFwiJHt2YWx1ZX1cImApXG4gIHJldHVybiB2YWx1ZVxufVxuXG5mdW5jdGlvbiBhZGRDb21tb25PcHRpb25zKGNtZDogQ29tbWFuZCk6IENvbW1hbmQge1xuICByZXR1cm4gY21kXG4gICAgLm9wdGlvbignLS1zdGFydC1kYXRlIDxZWVlZLU1NLUREPicsICdTdGFydCBkYXRlIChVVEMsIGluY2x1c2l2ZSknLCBwYXJzZURhdGUpXG4gICAgLm9wdGlvbignLS1lbmQtZGF0ZSA8WVlZWS1NTS1ERD4nLCAnRW5kIGRhdGUgKFVUQywgaW5jbHVzaXZlKScsIHBhcnNlRGF0ZSlcbiAgICAub3B0aW9uKCctLXN1Ym1pc3Npb24tc3RhdHVzIDxzdGF0dXM+JywgJ0ZpbHRlciBieSBzdWJtaXNzaW9uIHN0YXR1cyAoZS5nLiBTVUNDRUVERUQsIEZBSUxFRCwgUlVOTklORyknKVxufVxuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyhvcHRzOiBCYXNlT3B0cyk6IFVSTFNlYXJjaFBhcmFtcyB7XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuXG4gIGlmIChwcm9jZXNzLmVudi5HRU5JX1RFTkFOVF9JRCkgcGFyYW1zLnNldCgndGVuYW50SWQnLCBwcm9jZXNzLmVudi5HRU5JX1RFTkFOVF9JRClcblxuICBpZiAob3B0cy5zdGFydERhdGUpIHBhcmFtcy5zZXQoJ2Zyb20nLCBgJHtvcHRzLnN0YXJ0RGF0ZX1UMDA6MDA6MDAuMDAwWmApXG5cbiAgaWYgKG9wdHMuZW5kRGF0ZSkge1xuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShgJHtvcHRzLmVuZERhdGV9VDAwOjAwOjAwLjAwMFpgKVxuICAgIGQuc2V0VVRDRGF0ZShkLmdldFVUQ0RhdGUoKSArIDEpXG4gICAgcGFyYW1zLnNldCgndG8nLCBkLnRvSVNPU3RyaW5nKCkpXG4gIH1cblxuICBpZiAob3B0cy5zdWJtaXNzaW9uU3RhdHVzKSBwYXJhbXMuc2V0KCdzdWJtaXNzaW9uU3RhdHVzJywgb3B0cy5zdWJtaXNzaW9uU3RhdHVzKVxuICByZXR1cm4gcGFyYW1zXG59XG5cbmZ1bmN0aW9uIHFzKHBhcmFtczogVVJMU2VhcmNoUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgcyA9IHBhcmFtcy50b1N0cmluZygpXG4gIHJldHVybiBzID8gYD8ke3N9YCA6ICcnXG59XG5cbmV4cG9ydCBjb25zdCBjb3N0c0NvbW1hbmQgPSBuZXcgQ29tbWFuZCgnY29zdHMnKVxuICAuZGVzY3JpcHRpb24oJ1ZpZXcgY29zdCBhbmFseXRpY3MnKVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnc3VtbWFyeScpXG4gICAgLmRlc2NyaXB0aW9uKCdPdmVyYWxsIGNvc3QgdG90YWxzIGZvciB0aGUgdGVuYW50JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChvcHRzOiBCYXNlT3B0cyAmIHsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2Nvc3RzL3N1bW1hcnkke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSlcbiAgZm9ybWF0T3V0cHV0KGRhdGEsIG9wdHMuZm9ybWF0LCBhbmFseXRpY3NTdW1tYXJ5Q29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdzdWJtaXNzaW9uJylcbiAgICAuZGVzY3JpcHRpb24oJ1Blci1zdWJtaXNzaW9uIGNvc3QgYnJlYWtkb3duJylcbiAgICAuYXJndW1lbnQoJ1tpZHMuLi5dJywgJ0ZpbHRlciBieSBzdWJtaXNzaW9uIElEcycpXG4gICAgLm9wdGlvbignLS1zdGF0dXMgPHN0YXR1cz4nLCAnRmlsdGVyIGJ5IHN1Ym1pc3Npb24gc3RhdHVzIChjYXNlIGluc2Vuc2l0aXZlLCBlLmcuIHN1Y2NlZWRlZCwgRkFJTEVEKScpXG4gICAgLm9wdGlvbignLS1saW1pdCA8bj4nLCAnTWF4IHJlc3VsdHMgKDHigJMyMDApJywgJzUwJylcbiAgICAub3B0aW9uKCctLW9mZnNldCA8bj4nLCAnUGFnaW5hdGlvbiBvZmZzZXQnLCAnMCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAoaWRzOiBzdHJpbmdbXSwgb3B0czogQmFzZU9wdHMgJiB7IHN0YXR1cz86IHN0cmluZzsgbGltaXQ6IHN0cmluZzsgb2Zmc2V0OiBzdHJpbmc7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgcGFyYW1zID0gYnVpbGRQYXJhbXMob3B0cylcbiAgaWYgKG9wdHMuc3RhdHVzKSBwYXJhbXMuc2V0KCdzdWJtaXNzaW9uU3RhdHVzJywgb3B0cy5zdGF0dXMudG9VcHBlckNhc2UoKSlcbiAgaWRzLmZvckVhY2goaWQgPT4gcGFyYW1zLmFwcGVuZCgnaWQnLCBpZCkpXG4gIHBhcmFtcy5zZXQoJ2xpbWl0Jywgb3B0cy5saW1pdClcbiAgcGFyYW1zLnNldCgnb2Zmc2V0Jywgb3B0cy5vZmZzZXQpXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvc3VibWlzc2lvbiR7cXMocGFyYW1zKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGFuYWx5dGljc0J5U3VibWlzc2lvbkNvbHVtbnMpXG59KVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnZW52aXJvbm1lbnQnKVxuICAgIC5kZXNjcmlwdGlvbignQ29zdCBncm91cGVkIGJ5IGVudmlyb25tZW50JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChvcHRzOiBCYXNlT3B0cyAmIHsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2Nvc3RzL2Vudmlyb25tZW50JHtxcyhidWlsZFBhcmFtcyhvcHRzKSl9YCkpIGFzIHsgaXRlbXM6IHVua25vd25bXSB9XG4gIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCBhbmFseXRpY3NCeUVudmlyb25tZW50Q29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdxdWV1ZScpXG4gICAgLmRlc2NyaXB0aW9uKCdDb3N0IGdyb3VwZWQgYnkgcXVldWUnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKG9wdHM6IEJhc2VPcHRzICYgeyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvcXVldWUke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGFuYWx5dGljc0J5UXVldWVDb2x1bW5zKVxufSlcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ2luc3RhbmNlLXR5cGUnKVxuICAgIC5kZXNjcmlwdGlvbignQ29zdCBncm91cGVkIGJ5IEVDMiBpbnN0YW5jZSB0eXBlIGFuZCBtYXJrZXQgdHlwZScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAob3B0czogQmFzZU9wdHMgJiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9pbnN0YW5jZS10eXBlJHtxcyhidWlsZFBhcmFtcyhvcHRzKSl9YCkpIGFzIHsgaXRlbXM6IHVua25vd25bXSB9XG4gIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCBhbmFseXRpY3NCeUluc3RhbmNlVHlwZUNvbHVtbnMpXG59KVxuXG5jb3N0c0NvbW1hbmRcbiAgLmNvbW1hbmQoJ3Rhc2snKVxuICAuZGVzY3JpcHRpb24oJ1Blci10YXNrIGNvc3QgYnJlYWtkb3duJylcbiAgLmFyZ3VtZW50KCdbaWRzLi4uXScsICdGaWx0ZXIgYnkgdGFzayBJRHMnKVxuICAub3B0aW9uKCctLXN1Ym1pc3Npb24taWQgPGlkPicsICdGaWx0ZXIgYnkgc3VibWlzc2lvbiBJRCcpXG4gIC5vcHRpb24oJy0tbGltaXQgPG4+JywgJ01heCByZXN1bHRzICgx4oCTMjAwKScsICc1MCcpXG4gIC5vcHRpb24oJy0tb2Zmc2V0IDxuPicsICdQYWdpbmF0aW9uIG9mZnNldCcsICcwJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4gIC5hY3Rpb24oYXN5bmMgKGlkczogc3RyaW5nW10sIG9wdHM6IHsgc3VibWlzc2lvbklkPzogc3RyaW5nOyBsaW1pdDogc3RyaW5nOyBvZmZzZXQ6IHN0cmluZzsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgIGlmIChwcm9jZXNzLmVudi5HRU5JX1RFTkFOVF9JRCkgcGFyYW1zLnNldCgndGVuYW50SWQnLCBwcm9jZXNzLmVudi5HRU5JX1RFTkFOVF9JRClcbiAgICBpZHMuZm9yRWFjaChpZCA9PiBwYXJhbXMuYXBwZW5kKCdpZCcsIGlkKSlcbiAgICBpZiAob3B0cy5zdWJtaXNzaW9uSWQpIHBhcmFtcy5zZXQoJ3N1Ym1pc3Npb25JZCcsIG9wdHMuc3VibWlzc2lvbklkKVxuICAgIHBhcmFtcy5zZXQoJ2xpbWl0Jywgb3B0cy5saW1pdClcbiAgICBwYXJhbXMuc2V0KCdvZmZzZXQnLCBvcHRzLm9mZnNldClcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2Nvc3RzL3Rhc2ske3FzKHBhcmFtcyl9YCkpIGFzIHsgaXRlbXM6IHVua25vd25bXSB9XG4gICAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGNvc3RzQnlUYXNrQ29sdW1ucylcbiAgfSlcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ2luc3RhbmNlJylcbiAgICAuZGVzY3JpcHRpb24oJ1Blci1pbnN0YW5jZSBjb3N0IGJyZWFrZG93bicpXG4gICAgLm9wdGlvbignLS1lbnZpcm9ubWVudC1pZCA8aWQ+JywgICAnRmlsdGVyIGJ5IGVudmlyb25tZW50IElEJylcbiAgICAub3B0aW9uKCctLWVuZ2luZS1pZCA8aWQ+JywgICAgICAgICdGaWx0ZXIgYnkgZW5naW5lIElEJylcbiAgICAub3B0aW9uKCctLXF1ZXVlLWlkIDxpZD4nLCAgICAgICAgICdGaWx0ZXIgYnkgcXVldWUgSUQnKVxuICAgIC5vcHRpb24oJy0taW5zdGFuY2UtdHlwZSA8dHlwZT4nLCAgJ0ZpbHRlciBieSBFQzIgaW5zdGFuY2UgdHlwZSAoZS5nLiBtNS54bGFyZ2UpJylcbiAgICAub3B0aW9uKCctLWV4ZWN1dGlvbi1tb2RlIDxtb2RlPicsICdGaWx0ZXIgYnkgZXhlY3V0aW9uIG1vZGUgKGUuZy4gU1BPVCwgT05fREVNQU5EKScpXG4gICAgLm9wdGlvbignLS1saW1pdCA8bj4nLCAgJ01heCByZXN1bHRzICgx4oCTMjAwKScsICc1MCcpXG4gICAgLm9wdGlvbignLS1vZmZzZXQgPG4+JywgJ1BhZ2luYXRpb24gb2Zmc2V0JywgJzAnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKG9wdHM6IEJhc2VPcHRzICYge1xuICBlbnZpcm9ubWVudElkPzogc3RyaW5nOyBlbmdpbmVJZD86IHN0cmluZzsgcXVldWVJZD86IHN0cmluZztcbiAgaW5zdGFuY2VUeXBlPzogc3RyaW5nOyBleGVjdXRpb25Nb2RlPzogc3RyaW5nO1xuICBsaW1pdDogc3RyaW5nOyBvZmZzZXQ6IHN0cmluZzsgZm9ybWF0OiBPdXRwdXRGb3JtYXRcbn0pID0+IHtcbiAgY29uc3QgcGFyYW1zID0gYnVpbGRQYXJhbXMob3B0cylcbiAgaWYgKG9wdHMuZW52aXJvbm1lbnRJZCkgcGFyYW1zLnNldCgnZW52aXJvbm1lbnRJZCcsIG9wdHMuZW52aXJvbm1lbnRJZClcbiAgaWYgKG9wdHMuZW5naW5lSWQpICAgICAgcGFyYW1zLnNldCgnZW5naW5lSWQnLCBvcHRzLmVuZ2luZUlkKVxuICBpZiAob3B0cy5xdWV1ZUlkKSAgICAgICBwYXJhbXMuc2V0KCdxdWV1ZUlkJywgb3B0cy5xdWV1ZUlkKVxuICBpZiAob3B0cy5pbnN0YW5jZVR5cGUpICBwYXJhbXMuc2V0KCdpbnN0YW5jZVR5cGUnLCBvcHRzLmluc3RhbmNlVHlwZSlcbiAgaWYgKG9wdHMuZXhlY3V0aW9uTW9kZSkgcGFyYW1zLnNldCgnZXhlY3V0aW9uTW9kZScsIG9wdHMuZXhlY3V0aW9uTW9kZSlcbiAgcGFyYW1zLnNldCgnbGltaXQnLCBvcHRzLmxpbWl0KVxuICBwYXJhbXMuc2V0KCdvZmZzZXQnLCBvcHRzLm9mZnNldClcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9pbnN0YW5jZSR7cXMocGFyYW1zKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGNvc3RzQnlJbnN0YW5jZUNvbHVtbnMpXG59KVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnZW5naW5lJylcbiAgICAuZGVzY3JpcHRpb24oJ0Nvc3QgZ3JvdXBlZCBieSBlbmdpbmUnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKG9wdHM6IEJhc2VPcHRzICYgeyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvZW5naW5lJHtxcyhidWlsZFBhcmFtcyhvcHRzKSl9YCkpIGFzIHsgaXRlbXM6IHVua25vd25bXSB9XG4gIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCBjb3N0c0J5RW5naW5lQ29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdleGVjdXRpb24tbW9kZScpXG4gICAgLmRlc2NyaXB0aW9uKCdDb3N0IGdyb3VwZWQgYnkgZXhlY3V0aW9uIG1vZGUgKHNwb3QgLyBvbi1kZW1hbmQpJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChvcHRzOiBCYXNlT3B0cyAmIHsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2Nvc3RzL2V4ZWN1dGlvbi1tb2RlJHtxcyhidWlsZFBhcmFtcyhvcHRzKSl9YCkpIGFzIHsgaXRlbXM6IHVua25vd25bXSB9XG4gIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCBjb3N0c0J5RXhlY3V0aW9uTW9kZUNvbHVtbnMpXG59KVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnb3Zlci10aW1lJylcbiAgICAuZGVzY3JpcHRpb24oJ0Nvc3QgYnVja2V0ZWQgYnkgdGltZSBwZXJpb2QnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1pbnRlcnZhbCA8aW50ZXJ2YWw+JywgJ1RpbWUgYnVja2V0IHNpemUnKS5jaG9pY2VzKFsnZGF5JywgJ3dlZWsnLCAnbW9udGgnXSkuZGVmYXVsdCgnZGF5JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAob3B0czogQmFzZU9wdHMgJiB7IGludGVydmFsOiBzdHJpbmc7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgcGFyYW1zID0gYnVpbGRQYXJhbXMob3B0cylcbiAgcGFyYW1zLnNldCgnaW50ZXJ2YWwnLCBvcHRzLmludGVydmFsKVxuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2Nvc3RzL292ZXItdGltZSR7cXMocGFyYW1zKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGFuYWx5dGljc092ZXJUaW1lQ29sdW1ucylcbn0pXG5cbmNvc3RzQ29tbWFuZFxuICAuY29tbWFuZCgnc3luYycpXG4gIC5kZXNjcmlwdGlvbignVHJpZ2dlciBhIENVUiBhY3R1YWwtY29zdCBzeW5jJylcbiAgLm9wdGlvbignLS1yZXNldCcsICdDbGVhciBhbGwgYWN0dWFsIGNvc3QgZGF0YSBiZWZvcmUgc3luY2luZywgZm9yY2luZyBhIGZ1bGwgcmVjYWxjdWxhdGlvbiBmcm9tIENVUicpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdHM6IHsgcmVzZXQ/OiBib29sZWFuIH0pID0+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybCgnL2Nvc3RzL3N5bmMnKSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgcmVzZXQ6IG9wdHMucmVzZXQgPz8gZmFsc2UsXG4gICAgICAgIC4uLihwcm9jZXNzLmVudi5HRU5JX1RFTkFOVF9JRCA/IHsgdGVuYW50SWQ6IHByb2Nlc3MuZW52LkdFTklfVEVOQU5UX0lEIH0gOiB7fSksXG4gICAgICB9KSxcbiAgICB9KSBhcyB7IGpvYklkOiBzdHJpbmcgfVxuICAgIGNvbnNvbGUubG9nKGBTeW5jIGpvYiBlbnF1ZXVlZDogJHtkYXRhLmpvYklkfWApXG4gIH0pXG4iXX0=
@@ -1,3 +1,3 @@
1
1
  import { Command } from 'commander';
2
- export declare const submissionLogCommand: Command;
3
- export declare const taskLogCommand: Command;
2
+ export declare const logsSubcommand: Command;
3
+ export declare const taskLogsSubcommand: Command;
@@ -1,99 +1,80 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.taskLogCommand = exports.submissionLogCommand = void 0;
3
+ exports.taskLogsSubcommand = exports.logsSubcommand = void 0;
4
4
  const commander_1 = require("commander");
5
5
  const auth_1 = require("../auth");
6
6
  const format_js_1 = require("../format.js");
7
- exports.submissionLogCommand = new commander_1.Command('submission-log')
8
- .description('Manage submission logs');
9
- exports.submissionLogCommand
10
- .command('list')
11
- .description('List logs for a submission')
12
- .requiredOption('--submission-id <id>', 'Submission ID')
7
+ exports.logsSubcommand = new commander_1.Command('logs')
8
+ .description('View logs for a submission')
9
+ .argument('<submission-id>', 'Submission ID')
10
+ .option('--tail', 'Show last N lines instead of all logs')
11
+ .option('--limit <n>', 'Number of lines to show with --tail', '50')
12
+ .option('--follow', 'Continuously poll for new log lines')
13
13
  .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
14
- .action(async (opts) => {
15
- const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/submission-logs?submissionId=${opts.submissionId}`));
16
- if (opts.format === 'table') {
17
- data.items.forEach(item => console.log(item.message));
14
+ .action(async (submissionId, opts) => {
15
+ if (opts.tail || opts.follow) {
16
+ const limit = parseInt(opts.limit, 10);
17
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/submission-logs?submissionId=${submissionId}&limit=${limit}`));
18
+ let lastTimestamp = printLogLines(data.items);
19
+ if (opts.follow) {
20
+ await pollLogs(lastTimestamp, async (since) => {
21
+ const res = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/submission-logs?submissionId=${submissionId}&since=${encodeURIComponent(since)}`));
22
+ return res.items;
23
+ }, (items) => {
24
+ lastTimestamp = printLogLines(items) ?? lastTimestamp;
25
+ });
26
+ }
18
27
  }
19
28
  else {
20
- (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.submissionLogColumns);
29
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/submission-logs?submissionId=${submissionId}`));
30
+ if (opts.format === 'table') {
31
+ data.items.forEach(item => console.log(item.message));
32
+ }
33
+ else {
34
+ (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.submissionLogColumns);
35
+ }
21
36
  }
22
37
  });
23
- exports.submissionLogCommand
24
- .command('tail [submission-id]')
25
- .description('Tail logs for a submission')
26
- .option('--limit <n>', 'Number of recent log lines to show', '50')
38
+ exports.taskLogsSubcommand = new commander_1.Command('logs')
39
+ .description('View logs for a task')
40
+ .argument('<task-id>', 'Task ID')
41
+ .option('--tail', 'Show last N lines instead of all logs')
42
+ .option('--limit <n>', 'Number of lines to show with --tail', '50')
27
43
  .option('--follow', 'Continuously poll for new log lines')
28
- .action(async (submissionId, opts) => {
29
- const limit = parseInt(opts.limit, 10);
30
- const url = submissionId
31
- ? `/submission-logs?submissionId=${submissionId}&limit=${limit}`
32
- : `/submission-logs?limit=${limit}`;
33
- const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(url));
34
- let lastTimestamp = printLogLines(data.items);
35
- if (opts.follow) {
36
- await pollLogs(lastTimestamp, async (since) => {
37
- const base = submissionId
38
- ? `/submission-logs?submissionId=${submissionId}`
39
- : `/submission-logs`;
40
- const res = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`${base}&since=${encodeURIComponent(since)}`));
41
- return res.items;
42
- }, (items) => {
43
- lastTimestamp = printLogLines(items) ?? lastTimestamp;
44
- });
45
- }
46
- });
47
- exports.taskLogCommand = new commander_1.Command('task-log')
48
- .description('Manage task logs');
49
- exports.taskLogCommand
50
- .command('list')
51
- .description('List task logs for a submission')
52
- .requiredOption('--submission-id <id>', 'Submission ID')
53
- .option('--task-id <id>', 'Task ID (optional, filter by specific task)')
44
+ .option('--short', 'Omit task ID prefix')
54
45
  .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
55
- .action(async (opts) => {
56
- let url = `/task-logs?submissionId=${opts.submissionId}`;
57
- if (opts.taskId)
58
- url += `&taskId=${opts.taskId}`;
59
- const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(url));
60
- if (opts.format === 'table') {
61
- data.items.forEach(item => console.log(item.message));
46
+ .action(async (taskId, opts) => {
47
+ if (opts.tail || opts.follow) {
48
+ const limit = parseInt(opts.limit, 10);
49
+ const buildUrl = (since) => {
50
+ const params = new URLSearchParams();
51
+ params.set('taskId', taskId);
52
+ if (since)
53
+ params.set('since', since);
54
+ else
55
+ params.set('limit', String(limit));
56
+ return `/task-logs?${params}`;
57
+ };
58
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(buildUrl()));
59
+ const id = (item) => opts.short ? undefined : (item.jobName ?? item.taskId ?? taskId);
60
+ let lastTimestamp = printTaskLogLines(data.items, id);
61
+ if (opts.follow) {
62
+ await pollLogs(lastTimestamp, async (since) => {
63
+ const res = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(buildUrl(since)));
64
+ return res.items;
65
+ }, (items) => {
66
+ lastTimestamp = printTaskLogLines(items, id) ?? lastTimestamp;
67
+ });
68
+ }
62
69
  }
63
70
  else {
64
- (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.taskLogColumns);
65
- }
66
- });
67
- exports.taskLogCommand
68
- .command('tail <submission-id>')
69
- .description('Tail logs for a submission or task')
70
- .option('--task-id <id>', 'Task ID (optional, filter by specific task)')
71
- .option('--limit <n>', 'Number of recent log lines to show', '50')
72
- .option('--follow', 'Continuously poll for new log lines')
73
- .option('--short', 'Omit task ID prefix')
74
- .action(async (submissionId, opts) => {
75
- const limit = parseInt(opts.limit, 10);
76
- const buildUrl = (since) => {
77
- const params = new URLSearchParams();
78
- params.set('submissionId', submissionId);
79
- if (opts.taskId)
80
- params.set('taskId', opts.taskId);
81
- if (since)
82
- params.set('since', since);
83
- else
84
- params.set('limit', String(limit));
85
- return `/task-logs?${params}`;
86
- };
87
- const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(buildUrl()));
88
- const id = (item) => opts.short ? undefined : (item.jobName ?? item.taskId ?? opts.taskId);
89
- let lastTimestamp = printTaskLogLines(data.items, id);
90
- if (opts.follow) {
91
- await pollLogs(lastTimestamp, async (since) => {
92
- const res = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(buildUrl(since)));
93
- return res.items;
94
- }, (items) => {
95
- lastTimestamp = printTaskLogLines(items, id) ?? lastTimestamp;
96
- });
71
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/task-logs?taskId=${taskId}`));
72
+ if (opts.format === 'table') {
73
+ data.items.forEach(item => console.log(item.message));
74
+ }
75
+ else {
76
+ (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.taskLogColumns);
77
+ }
97
78
  }
98
79
  });
99
80
  function printLogLines(items, id) {
@@ -142,4 +123,4 @@ async function pollLogs(initialTimestamp, fetch, onItems) {
142
123
  });
143
124
  });
144
125
  }
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBMkM7QUFDM0Msa0NBQTJDO0FBQzNDLDRDQUFvRztBQUV2RixRQUFBLG9CQUFvQixHQUFHLElBQUksbUJBQU8sQ0FBQyxnQkFBZ0IsQ0FBQztLQUM5RCxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtBQUV4Qyw0QkFBb0I7S0FDakIsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNmLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQztLQUN6QyxjQUFjLENBQUMsc0JBQXNCLEVBQUUsZUFBZSxDQUFDO0tBQ3ZELFNBQVMsQ0FBQyxJQUFJLGtCQUFNLENBQUMsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUM5RyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQW9ELEVBQUUsRUFBRTtJQUNyRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsZ0JBQVMsRUFBQyxJQUFBLGFBQU0sRUFBQyxpQ0FBaUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQXlCLENBQUE7SUFDbEgsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUErQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDbEYsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFBLHdCQUFZLEVBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENB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Q3JCLGdCQUFvQyxFQUNwQyxLQUE0QyxFQUM1QyxPQUFtQztJQUVuQyxJQUFJLEtBQUssR0FBRyxnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3hELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUM3QixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDdEMsSUFBSSxDQUFDO2dCQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNoQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDZCxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO2dCQUMzQyxDQUFDO1lBQ0gsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCx5Q0FBeUM7WUFDM0MsQ0FBQztRQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUVSLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUN4QixhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDdkIsT0FBTyxFQUFFLENBQUE7UUFDWCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcidcbmltcG9ydCB7IGFwaVVybCwgZmV0Y2hKc29uIH0gZnJvbSAnLi4vYXV0aCdcbmltcG9ydCB7IGZvcm1hdE91dHB1dCwgc3VibWlzc2lvbkxvZ0NvbHVtbnMsIHRhc2tMb2dDb2x1bW5zLCB0eXBlIE91dHB1dEZvcm1hdCB9IGZyb20gJy4uL2Zvcm1hdC5qcydcblxuZXhwb3J0IGNvbnN0IHN1Ym1pc3Npb25Mb2dDb21tYW5kID0gbmV3IENvbW1hbmQoJ3N1Ym1pc3Npb24tbG9nJylcbiAgLmRlc2NyaXB0aW9uKCdNYW5hZ2Ugc3VibWlzc2lvbiBsb2dzJylcblxuc3VibWlzc2lvbkxvZ0NvbW1hbmRcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgbG9ncyBmb3IgYSBzdWJtaXNzaW9uJylcbiAgLnJlcXVpcmVkT3B0aW9uKCctLXN1Ym1pc3Npb24taWQgPGlkPicsICdTdWJtaXNzaW9uIElEJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdHM6IHsgc3VibWlzc2lvbklkOiBzdHJpbmc7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL3N1Ym1pc3Npb24tbG9ncz9zdWJtaXNzaW9uSWQ9JHtvcHRzLnN1Ym1pc3Npb25JZH1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgICBpZiAob3B0cy5mb3JtYXQgPT09ICd0YWJsZScpIHtcbiAgICAgIChkYXRhLml0ZW1zIGFzIHsgbWVzc2FnZTogc3RyaW5nIH1bXSkuZm9yRWFjaChpdGVtID0+IGNvbnNvbGUubG9nKGl0ZW0ubWVzc2FnZSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCBzdWJtaXNzaW9uTG9nQ29sdW1ucylcbiAgICB9XG4gIH0pXG5cbnN1Ym1pc3Npb25Mb2dDb21tYW5kXG4gIC5jb21tYW5kKCd0YWlsIFtzdWJtaXNzaW9uLWlkXScpXG4gIC5kZXNjcmlwdGlvbignVGFpbCBsb2dzIGZvciBhIHN1Ym1pc3Npb24nKVxuICAub3B0aW9uKCctLWxpbWl0IDxuPicsICdOdW1iZXIgb2YgcmVjZW50IGxvZyBsaW5lcyB0byBzaG93JywgJzUwJylcbiAgLm9wdGlvbignLS1mb2xsb3cnLCAnQ29udGludW91c2x5IHBvbGwgZm9yIG5ldyBsb2cgbGluZXMnKVxuICAuYWN0aW9uKGFzeW5jIChzdWJtaXNzaW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgb3B0czogeyBsaW1pdDogc3RyaW5nOyBmb2xsb3c6IGJvb2xlYW4gfSkgPT4ge1xuICAgIGNvbnN0IGxpbWl0ID0gcGFyc2VJbnQob3B0cy5saW1pdCwgMTApXG4gICAgY29uc3QgdXJsID0gc3VibWlzc2lvbklkXG4gICAgICA/IGAvc3VibWlzc2lvbi1sb2dzP3N1Ym1pc3Npb25JZD0ke3N1Ym1pc3Npb25JZH0mbGltaXQ9JHtsaW1pdH1gXG4gICAgICA6IGAvc3VibWlzc2lvbi1sb2dzP2xpbWl0PSR7bGltaXR9YFxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKHVybCkpIGFzIHsgaXRlbXM6IExvZ0l0ZW1bXSB9XG4gICAgbGV0IGxhc3RUaW1lc3RhbXAgPSBwcmludExvZ0xpbmVzKGRhdGEuaXRlbXMpXG5cbiAgICBpZiAob3B0cy5mb2xsb3cpIHtcbiAgICAgIGF3YWl0IHBvbGxMb2dzKGxhc3RUaW1lc3RhbXAsIGFzeW5jIChzaW5jZSkgPT4ge1xuICAgICAgICBjb25zdCBiYXNlID0gc3VibWlzc2lvbklkXG4gICAgICAgICAgPyBgL3N1Ym1pc3Npb24tbG9ncz9zdWJtaXNzaW9uSWQ9JHtzdWJtaXNzaW9uSWR9YFxuICAgICAgICAgIDogYC9zdWJtaXNzaW9uLWxvZ3NgXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYCR7YmFzZX0mc2luY2U9JHtlbmNvZGVVUklDb21wb25lbnQoc2luY2UpfWApKSBhcyB7IGl0ZW1zOiBMb2dJdGVtW10gfVxuICAgICAgICByZXR1cm4gcmVzLml0ZW1zXG4gICAgICB9LCAoaXRlbXMpID0+IHtcbiAgICAgICAgbGFzdFRpbWVzdGFtcCA9IHByaW50TG9nTGluZXMoaXRlbXMpID8/IGxhc3RUaW1lc3RhbXBcbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG5leHBvcnQgY29uc3QgdGFza0xvZ0NvbW1hbmQgPSBuZXcgQ29tbWFuZCgndGFzay1sb2cnKVxuICAuZGVzY3JpcHRpb24oJ01hbmFnZSB0YXNrIGxvZ3MnKVxuXG50YXNrTG9nQ29tbWFuZFxuICAuY29tbWFuZCgnbGlzdCcpXG4gIC5kZXNjcmlwdGlvbignTGlzdCB0YXNrIGxvZ3MgZm9yIGEgc3VibWlzc2lvbicpXG4gIC5yZXF1aXJlZE9wdGlvbignLS1zdWJtaXNzaW9uLWlkIDxpZD4nLCAnU3VibWlzc2lvbiBJRCcpXG4gIC5vcHRpb24oJy0tdGFzay1pZCA8aWQ+JywgJ1Rhc2sgSUQgKG9wdGlvbmFsLCBmaWx0ZXIgYnkgc3BlY2lmaWMgdGFzayknKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbiAgLmFjdGlvbihhc3luYyAob3B0czogeyBzdWJtaXNzaW9uSWQ6IHN0cmluZzsgdGFza0lkPzogc3RyaW5nOyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gICAgbGV0IHVybCA9IGAvdGFzay1sb2dzP3N1Ym1pc3Npb25JZD0ke29wdHMuc3VibWlzc2lvbklkfWBcbiAgICBpZiAob3B0cy50YXNrSWQpIHVybCArPSBgJnRhc2tJZD0ke29wdHMudGFza0lkfWBcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybCh1cmwpKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICAgIGlmIChvcHRzLmZvcm1hdCA9PT0gJ3RhYmxlJykge1xuICAgICAgKGRhdGEuaXRlbXMgYXMgeyBtZXNzYWdlOiBzdHJpbmcgfVtdKS5mb3JFYWNoKGl0ZW0gPT4gY29uc29sZS5sb2coaXRlbS5tZXNzYWdlKSlcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIHRhc2tMb2dDb2x1bW5zKVxuICAgIH1cbiAgfSlcblxudGFza0xvZ0NvbW1hbmRcbiAgLmNvbW1hbmQoJ3RhaWwgPHN1Ym1pc3Npb24taWQ+JylcbiAgLmRlc2NyaXB0aW9uKCdUYWlsIGxvZ3MgZm9yIGEgc3VibWlzc2lvbiBvciB0YXNrJylcbiAgLm9wdGlvbignLS10YXNrLWlkIDxpZD4nLCAnVGFzayBJRCAob3B0aW9uYWwsIGZpbHRlciBieSBzcGVjaWZpYyB0YXNrKScpXG4gIC5vcHRpb24oJy0tbGltaXQgPG4+JywgJ051bWJlciBvZiByZWNlbnQgbG9nIGxpbmVzIHRvIHNob3cnLCAnNTAnKVxuICAub3B0aW9uKCctLWZvbGxvdycsICdDb250aW51b3VzbHkgcG9sbCBmb3IgbmV3IGxvZyBsaW5lcycpXG4gIC5vcHRpb24oJy0tc2hvcnQnLCAnT21pdCB0YXNrIElEIHByZWZpeCcpXG4gIC5hY3Rpb24oYXN5bmMgKHN1Ym1pc3Npb25JZDogc3RyaW5nLCBvcHRzOiB7IHRhc2tJZD86IHN0cmluZzsgbGltaXQ6IHN0cmluZzsgZm9sbG93OiBib29sZWFuOyBzaG9ydDogYm9vbGVhbiB9KSA9PiB7XG4gICAgY29uc3QgbGltaXQgPSBwYXJzZUludChvcHRzLmxpbWl0LCAxMClcbiAgICBjb25zdCBidWlsZFVybCA9IChzaW5jZT86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG4gICAgICBwYXJhbXMuc2V0KCdzdWJtaXNzaW9uSWQnLCBzdWJtaXNzaW9uSWQpXG4gICAgICBpZiAob3B0cy50YXNrSWQpIHBhcmFtcy5zZXQoJ3Rhc2tJZCcsIG9wdHMudGFza0lkKVxuICAgICAgaWYgKHNpbmNlKSBwYXJhbXMuc2V0KCdzaW5jZScsIHNpbmNlKVxuICAgICAgZWxzZSBwYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhsaW1pdCkpXG4gICAgICByZXR1cm4gYC90YXNrLWxvZ3M/JHtwYXJhbXN9YFxuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChidWlsZFVybCgpKSkgYXMgeyBpdGVtczogVGFza0xvZ0l0ZW1bXSB9XG4gICAgY29uc3QgaWQgPSAoaXRlbTogVGFza0xvZ0l0ZW0pID0+IG9wdHMuc2hvcnQgPyB1bmRlZmluZWQgOiAoaXRlbS5qb2JOYW1lID8/IGl0ZW0udGFza0lkID8/IG9wdHMudGFza0lkKVxuICAgIGxldCBsYXN0VGltZXN0YW1wID0gcHJpbnRUYXNrTG9nTGluZXMoZGF0YS5pdGVtcywgaWQpXG5cbiAgICBpZiAob3B0cy5mb2xsb3cpIHtcbiAgICAgIGF3YWl0IHBvbGxMb2dzKGxhc3RUaW1lc3RhbXAsIGFzeW5jIChzaW5jZSkgPT4ge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGJ1aWxkVXJsKHNpbmNlKSkpIGFzIHsgaXRlbXM6IFRhc2tMb2dJdGVtW10gfVxuICAgICAgICByZXR1cm4gcmVzLml0ZW1zXG4gICAgICB9LCAoaXRlbXMpID0+IHtcbiAgICAgICAgbGFzdFRpbWVzdGFtcCA9IHByaW50VGFza0xvZ0xpbmVzKGl0ZW1zLCBpZCkgPz8gbGFzdFRpbWVzdGFtcFxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbmludGVyZmFjZSBMb2dJdGVtIHtcbiAgdGltZXN0YW1wOiBzdHJpbmdcbiAgbWVzc2FnZTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBUYXNrTG9nSXRlbSBleHRlbmRzIExvZ0l0ZW0ge1xuICB0YXNrSWQ/OiBzdHJpbmdcbiAgam9iTmFtZT86IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBwcmludExvZ0xpbmVzKGl0ZW1zOiBMb2dJdGVtW10sIGlkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdHMgPSBuZXcgRGF0ZShpdGVtLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgIGlmIChpZCkge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke2lkfSAgJHtpdGVtLm1lc3NhZ2V9YClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke2l0ZW0ubWVzc2FnZX1gKVxuICAgIH1cbiAgfVxuICByZXR1cm4gaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLnRpbWVzdGFtcCA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwcmludFRhc2tMb2dMaW5lcyhpdGVtczogVGFza0xvZ0l0ZW1bXSwgaWQ6IChpdGVtOiBUYXNrTG9nSXRlbSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdHMgPSBuZXcgRGF0ZShpdGVtLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgIGNvbnN0IHByZWZpeCA9IGlkKGl0ZW0pXG4gICAgaWYgKHByZWZpeCkge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke3ByZWZpeH0gICR7aXRlbS5tZXNzYWdlfWApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGAke3RzfSAgJHtpdGVtLm1lc3NhZ2V9YClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS50aW1lc3RhbXAgOiB1bmRlZmluZWRcbn1cblxuYXN5bmMgZnVuY3Rpb24gcG9sbExvZ3MoXG4gIGluaXRpYWxUaW1lc3RhbXA6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZmV0Y2g6IChzaW5jZTogc3RyaW5nKSA9PiBQcm9taXNlPExvZ0l0ZW1bXT4sXG4gIG9uSXRlbXM6IChpdGVtczogTG9nSXRlbVtdKSA9PiB2b2lkLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBzaW5jZSA9IGluaXRpYWxUaW1lc3RhbXAgPz8gbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBhd2FpdCBmZXRjaChzaW5jZSlcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBvbkl0ZW1zKGl0ZW1zKVxuICAgICAgICAgIHNpbmNlID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0udGltZXN0YW1wXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmUgdHJhbnNpZW50IGVycm9ycyBkdXJpbmcgcG9sbGluZ1xuICAgICAgfVxuICAgIH0sIDMwMDApXG5cbiAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxuICAgICAgcmVzb2x2ZSgpXG4gICAgfSlcbiAgfSlcbn1cbiJdfQ==
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBMkM7QUFDM0Msa0NBQTJDO0FBQzNDLDRDQUFvRztBQUV2RixRQUFBLGNBQWMsR0FBRyxJQUFJLG1CQUFPLENBQUMsTUFBTSxDQUFDO0tBQzlDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQztLQUN6QyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDO0tBQzVDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsdUNBQXVDLENBQUM7S0FDekQsTUFBTSxDQUFDLGFBQWEsRUFBRSxxQ0FBcUMsRUFBRSxJQUFJLENBQUM7S0FDbEUsTUFBTSxDQUFDLFVBQVUsRUFBRSxxQ0FBcUMsQ0FBQztLQUN6RCxTQUFTLENBQUMsSUFBSSxrQkFBTSxDQUFDLG1CQUFtQixFQUFFLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDOUcsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFvQixFQUFFLElBQTZFLEVBQUUsRUFBRTtJQUNwSCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxnQkFBUyxFQUFDLElBQUEsYUFBTSxFQUFDLGlDQUFpQyxZQUFZLFVBQVUsS0FBSyxFQUFFLENBQUMsQ0FBeUIsQ0FBQTtRQUM1SCxJQUFJLGFBQWEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE1B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O0lBQ0osQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJ1xuaW1wb3J0IHsgYXBpVXJsLCBmZXRjaEpzb24gfSBmcm9tICcuLi9hdXRoJ1xuaW1wb3J0IHsgZm9ybWF0T3V0cHV0LCBzdWJtaXNzaW9uTG9nQ29sdW1ucywgdGFza0xvZ0NvbHVtbnMsIHR5cGUgT3V0cHV0Rm9ybWF0IH0gZnJvbSAnLi4vZm9ybWF0LmpzJ1xuXG5leHBvcnQgY29uc3QgbG9nc1N1YmNvbW1hbmQgPSBuZXcgQ29tbWFuZCgnbG9ncycpXG4gIC5kZXNjcmlwdGlvbignVmlldyBsb2dzIGZvciBhIHN1Ym1pc3Npb24nKVxuICAuYXJndW1lbnQoJzxzdWJtaXNzaW9uLWlkPicsICdTdWJtaXNzaW9uIElEJylcbiAgLm9wdGlvbignLS10YWlsJywgJ1Nob3cgbGFzdCBOIGxpbmVzIGluc3RlYWQgb2YgYWxsIGxvZ3MnKVxuICAub3B0aW9uKCctLWxpbWl0IDxuPicsICdOdW1iZXIgb2YgbGluZXMgdG8gc2hvdyB3aXRoIC0tdGFpbCcsICc1MCcpXG4gIC5vcHRpb24oJy0tZm9sbG93JywgJ0NvbnRpbnVvdXNseSBwb2xsIGZvciBuZXcgbG9nIGxpbmVzJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4gIC5hY3Rpb24oYXN5bmMgKHN1Ym1pc3Npb25JZDogc3RyaW5nLCBvcHRzOiB7IHRhaWw6IGJvb2xlYW47IGxpbWl0OiBzdHJpbmc7IGZvbGxvdzogYm9vbGVhbjsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICAgIGlmIChvcHRzLnRhaWwgfHwgb3B0cy5mb2xsb3cpIHtcbiAgICAgIGNvbnN0IGxpbWl0ID0gcGFyc2VJbnQob3B0cy5saW1pdCwgMTApXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL3N1Ym1pc3Npb24tbG9ncz9zdWJtaXNzaW9uSWQ9JHtzdWJtaXNzaW9uSWR9JmxpbWl0PSR7bGltaXR9YCkpIGFzIHsgaXRlbXM6IExvZ0l0ZW1bXSB9XG4gICAgICBsZXQgbGFzdFRpbWVzdGFtcCA9IHByaW50TG9nTGluZXMoZGF0YS5pdGVtcylcbiAgICAgIGlmIChvcHRzLmZvbGxvdykge1xuICAgICAgICBhd2FpdCBwb2xsTG9ncyhsYXN0VGltZXN0YW1wLCBhc3luYyAoc2luY2UpID0+IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvc3VibWlzc2lvbi1sb2dzP3N1Ym1pc3Npb25JZD0ke3N1Ym1pc3Npb25JZH0mc2luY2U9JHtlbmNvZGVVUklDb21wb25lbnQoc2luY2UpfWApKSBhcyB7IGl0ZW1zOiBMb2dJdGVtW10gfVxuICAgICAgICAgIHJldHVybiByZXMuaXRlbXNcbiAgICAgICAgfSwgKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgbGFzdFRpbWVzdGFtcCA9IHByaW50TG9nTGluZXMoaXRlbXMpID8/IGxhc3RUaW1lc3RhbXBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9zdWJtaXNzaW9uLWxvZ3M/c3VibWlzc2lvbklkPSR7c3VibWlzc2lvbklkfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICAgICAgaWYgKG9wdHMuZm9ybWF0ID09PSAndGFibGUnKSB7XG4gICAgICAgIChkYXRhLml0ZW1zIGFzIHsgbWVzc2FnZTogc3RyaW5nIH1bXSkuZm9yRWFjaChpdGVtID0+IGNvbnNvbGUubG9nKGl0ZW0ubWVzc2FnZSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgc3VibWlzc2lvbkxvZ0NvbHVtbnMpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG5leHBvcnQgY29uc3QgdGFza0xvZ3NTdWJjb21tYW5kID0gbmV3IENvbW1hbmQoJ2xvZ3MnKVxuICAuZGVzY3JpcHRpb24oJ1ZpZXcgbG9ncyBmb3IgYSB0YXNrJylcbiAgLmFyZ3VtZW50KCc8dGFzay1pZD4nLCAnVGFzayBJRCcpXG4gIC5vcHRpb24oJy0tdGFpbCcsICdTaG93IGxhc3QgTiBsaW5lcyBpbnN0ZWFkIG9mIGFsbCBsb2dzJylcbiAgLm9wdGlvbignLS1saW1pdCA8bj4nLCAnTnVtYmVyIG9mIGxpbmVzIHRvIHNob3cgd2l0aCAtLXRhaWwnLCAnNTAnKVxuICAub3B0aW9uKCctLWZvbGxvdycsICdDb250aW51b3VzbHkgcG9sbCBmb3IgbmV3IGxvZyBsaW5lcycpXG4gIC5vcHRpb24oJy0tc2hvcnQnLCAnT21pdCB0YXNrIElEIHByZWZpeCcpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuICAuYWN0aW9uKGFzeW5jICh0YXNrSWQ6IHN0cmluZywgb3B0czogeyB0YWlsOiBib29sZWFuOyBsaW1pdDogc3RyaW5nOyBmb2xsb3c6IGJvb2xlYW47IHNob3J0OiBib29sZWFuOyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gICAgaWYgKG9wdHMudGFpbCB8fCBvcHRzLmZvbGxvdykge1xuICAgICAgY29uc3QgbGltaXQgPSBwYXJzZUludChvcHRzLmxpbWl0LCAxMClcbiAgICAgIGNvbnN0IGJ1aWxkVXJsID0gKHNpbmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgICAgICBwYXJhbXMuc2V0KCd0YXNrSWQnLCB0YXNrSWQpXG4gICAgICAgIGlmIChzaW5jZSkgcGFyYW1zLnNldCgnc2luY2UnLCBzaW5jZSlcbiAgICAgICAgZWxzZSBwYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhsaW1pdCkpXG4gICAgICAgIHJldHVybiBgL3Rhc2stbG9ncz8ke3BhcmFtc31gXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChidWlsZFVybCgpKSkgYXMgeyBpdGVtczogVGFza0xvZ0l0ZW1bXSB9XG4gICAgICBjb25zdCBpZCA9IChpdGVtOiBUYXNrTG9nSXRlbSkgPT4gb3B0cy5zaG9ydCA/IHVuZGVmaW5lZCA6IChpdGVtLmpvYk5hbWUgPz8gaXRlbS50YXNrSWQgPz8gdGFza0lkKVxuICAgICAgbGV0IGxhc3RUaW1lc3RhbXAgPSBwcmludFRhc2tMb2dMaW5lcyhkYXRhLml0ZW1zLCBpZClcbiAgICAgIGlmIChvcHRzLmZvbGxvdykge1xuICAgICAgICBhd2FpdCBwb2xsTG9ncyhsYXN0VGltZXN0YW1wLCBhc3luYyAoc2luY2UpID0+IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGJ1aWxkVXJsKHNpbmNlKSkpIGFzIHsgaXRlbXM6IFRhc2tMb2dJdGVtW10gfVxuICAgICAgICAgIHJldHVybiByZXMuaXRlbXNcbiAgICAgICAgfSwgKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgbGFzdFRpbWVzdGFtcCA9IHByaW50VGFza0xvZ0xpbmVzKGl0ZW1zLCBpZCkgPz8gbGFzdFRpbWVzdGFtcFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL3Rhc2stbG9ncz90YXNrSWQ9JHt0YXNrSWR9YCkpIGFzIHsgaXRlbXM6IHVua25vd25bXSB9XG4gICAgICBpZiAob3B0cy5mb3JtYXQgPT09ICd0YWJsZScpIHtcbiAgICAgICAgKGRhdGEuaXRlbXMgYXMgeyBtZXNzYWdlOiBzdHJpbmcgfVtdKS5mb3JFYWNoKGl0ZW0gPT4gY29uc29sZS5sb2coaXRlbS5tZXNzYWdlKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCB0YXNrTG9nQ29sdW1ucylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbmludGVyZmFjZSBMb2dJdGVtIHtcbiAgdGltZXN0YW1wOiBzdHJpbmdcbiAgbWVzc2FnZTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBUYXNrTG9nSXRlbSBleHRlbmRzIExvZ0l0ZW0ge1xuICB0YXNrSWQ/OiBzdHJpbmdcbiAgam9iTmFtZT86IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBwcmludExvZ0xpbmVzKGl0ZW1zOiBMb2dJdGVtW10sIGlkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdHMgPSBuZXcgRGF0ZShpdGVtLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgIGlmIChpZCkge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke2lkfSAgJHtpdGVtLm1lc3NhZ2V9YClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke2l0ZW0ubWVzc2FnZX1gKVxuICAgIH1cbiAgfVxuICByZXR1cm4gaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLnRpbWVzdGFtcCA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwcmludFRhc2tMb2dMaW5lcyhpdGVtczogVGFza0xvZ0l0ZW1bXSwgaWQ6IChpdGVtOiBUYXNrTG9nSXRlbSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdHMgPSBuZXcgRGF0ZShpdGVtLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgIGNvbnN0IHByZWZpeCA9IGlkKGl0ZW0pXG4gICAgaWYgKHByZWZpeCkge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke3ByZWZpeH0gICR7aXRlbS5tZXNzYWdlfWApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGAke3RzfSAgJHtpdGVtLm1lc3NhZ2V9YClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS50aW1lc3RhbXAgOiB1bmRlZmluZWRcbn1cblxuYXN5bmMgZnVuY3Rpb24gcG9sbExvZ3MoXG4gIGluaXRpYWxUaW1lc3RhbXA6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZmV0Y2g6IChzaW5jZTogc3RyaW5nKSA9PiBQcm9taXNlPExvZ0l0ZW1bXT4sXG4gIG9uSXRlbXM6IChpdGVtczogTG9nSXRlbVtdKSA9PiB2b2lkLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBzaW5jZSA9IGluaXRpYWxUaW1lc3RhbXAgPz8gbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBhd2FpdCBmZXRjaChzaW5jZSlcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBvbkl0ZW1zKGl0ZW1zKVxuICAgICAgICAgIHNpbmNlID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0udGltZXN0YW1wXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmUgdHJhbnNpZW50IGVycm9ycyBkdXJpbmcgcG9sbGluZ1xuICAgICAgfVxuICAgIH0sIDMwMDApXG5cbiAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxuICAgICAgcmVzb2x2ZSgpXG4gICAgfSlcbiAgfSlcbn1cbiJdfQ==
@@ -2,23 +2,57 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loginCommand = void 0;
4
4
  const commander_1 = require("commander");
5
+ const readline_1 = require("readline");
5
6
  const auth_1 = require("../auth");
7
+ async function prompt(question) {
8
+ const rl = (0, readline_1.createInterface)({ input: process.stdin, output: process.stdout });
9
+ return new Promise(resolve => rl.question(question, answer => { rl.close(); resolve(answer); }));
10
+ }
11
+ async function promptPassword(question) {
12
+ process.stdout.write(question);
13
+ process.stdin.setRawMode(true);
14
+ process.stdin.resume();
15
+ process.stdin.setEncoding('utf8');
16
+ return new Promise(resolve => {
17
+ let password = '';
18
+ process.stdin.on('data', function handler(ch) {
19
+ if (ch === '\n' || ch === '\r' || ch === '') {
20
+ process.stdin.setRawMode(false);
21
+ process.stdin.pause();
22
+ process.stdin.removeListener('data', handler);
23
+ process.stdout.write('\n');
24
+ resolve(password);
25
+ }
26
+ else if (ch === '' || ch === '\b') {
27
+ if (password.length > 0) {
28
+ password = password.slice(0, -1);
29
+ process.stdout.write('\b \b');
30
+ }
31
+ }
32
+ else {
33
+ password += ch;
34
+ process.stdout.write('*');
35
+ }
36
+ });
37
+ });
38
+ }
6
39
  exports.loginCommand = new commander_1.Command('login')
7
40
  .description('Login into GENI Workflows and store credentials')
8
- .option('--email <email>', 'User email')
9
41
  .option('--password <password>', 'User password')
10
42
  .action(async (opts) => {
11
- if (!opts.email || !opts.password) {
12
- exports.loginCommand.help();
13
- return;
43
+ const email = await prompt('Email: ');
44
+ const password = opts.password ?? await promptPassword('Password: ');
45
+ if (!email || !password) {
46
+ console.error('Email and password are required.');
47
+ process.exit(1);
14
48
  }
15
49
  const res = await fetch((0, auth_1.apiUrl)('/auth/login'), {
16
50
  method: 'POST',
17
51
  headers: { 'Content-Type': 'application/json' },
18
- body: JSON.stringify({ email: opts.email, password: opts.password }),
52
+ body: JSON.stringify({ email, password }),
19
53
  });
20
54
  const data = await (0, auth_1.readJsonResponse)(res, { method: 'POST', url: (0, auth_1.apiUrl)('/auth/login') });
21
55
  (0, auth_1.saveCredentials)(data.accessToken);
22
56
  console.log('Logged in. Credentials saved to ~/.geni/credentials.json');
23
57
  });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvbG9naW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQW9DO0FBQ3BDLGtDQUFvRTtBQUV2RCxRQUFBLFlBQVksR0FBRyxJQUFJLG1CQUFPLENBQUMsT0FBTyxDQUFDO0tBQzdDLFdBQVcsQ0FBQyxpREFBaUQsQ0FBQztLQUM5RCxNQUFNLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxDQUFDO0tBQ3ZDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxlQUFlLENBQUM7S0FDaEQsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUEyQyxFQUFFLEVBQUU7SUFDNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEMsb0JBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNuQixPQUFNO0lBQ1IsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUEsYUFBTSxFQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQzdDLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1FBQy9DLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztLQUNyRSxDQUFDLENBQUM7SUFDSCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsdUJBQWdCLEVBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBQSxhQUFNLEVBQUMsYUFBYSxDQUFDLEVBQUUsQ0FFdEYsQ0FBQztJQUNGLElBQUEsc0JBQWUsRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO0FBQzFFLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBhcGlVcmwsIHJlYWRKc29uUmVzcG9uc2UsIHNhdmVDcmVkZW50aWFscyB9IGZyb20gJy4uL2F1dGgnO1xuXG5leHBvcnQgY29uc3QgbG9naW5Db21tYW5kID0gbmV3IENvbW1hbmQoJ2xvZ2luJylcbiAgLmRlc2NyaXB0aW9uKCdMb2dpbiBpbnRvIEdFTkkgV29ya2Zsb3dzIGFuZCBzdG9yZSBjcmVkZW50aWFscycpXG4gIC5vcHRpb24oJy0tZW1haWwgPGVtYWlsPicsICdVc2VyIGVtYWlsJylcbiAgLm9wdGlvbignLS1wYXNzd29yZCA8cGFzc3dvcmQ+JywgJ1VzZXIgcGFzc3dvcmQnKVxuICAuYWN0aW9uKGFzeW5jIChvcHRzOiB7IGVtYWlsPzogc3RyaW5nOyBwYXNzd29yZD86IHN0cmluZyB9KSA9PiB7XG4gICAgaWYgKCFvcHRzLmVtYWlsIHx8ICFvcHRzLnBhc3N3b3JkKSB7XG4gICAgICBsb2dpbkNvbW1hbmQuaGVscCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYXBpVXJsKCcvYXV0aC9sb2dpbicpLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBlbWFpbDogb3B0cy5lbWFpbCwgcGFzc3dvcmQ6IG9wdHMucGFzc3dvcmQgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRKc29uUmVzcG9uc2UocmVzLCB7IG1ldGhvZDogJ1BPU1QnLCB1cmw6IGFwaVVybCgnL2F1dGgvbG9naW4nKSB9KSBhcyB7XG4gICAgICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICAgIH07XG4gICAgc2F2ZUNyZWRlbnRpYWxzKGRhdGEuYWNjZXNzVG9rZW4pO1xuICAgIGNvbnNvbGUubG9nKCdMb2dnZWQgaW4uIENyZWRlbnRpYWxzIHNhdmVkIHRvIH4vLmdlbmkvY3JlZGVudGlhbHMuanNvbicpO1xuICB9KTtcbiJdfQ==
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvbG9naW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQW9DO0FBQ3BDLHVDQUEyQztBQUMzQyxrQ0FBb0U7QUFFcEUsS0FBSyxVQUFVLE1BQU0sQ0FBQyxRQUFnQjtJQUNwQyxNQUFNLEVBQUUsR0FBRyxJQUFBLDBCQUFlLEVBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDN0UsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRyxDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxRQUFnQjtJQUM1QyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDM0IsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxTQUFTLE9BQU8sQ0FBQyxFQUFVO1lBQ2xELElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDN0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQixDQUFDO2lCQUFNLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3JDLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2pDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRVksUUFBQSxZQUFZLEdBQUcsSUFBSSxtQkFBTyxDQUFDLE9BQU8sQ0FBQztLQUM3QyxXQUFXLENBQUMsaURBQWlELENBQUM7S0FDOUQsTUFBTSxDQUFDLHVCQUF1QixFQUFFLGVBQWUsQ0FBQztLQUNoRCxNQUFNLENBQUMsS0FBSyxFQUFFLElBQTJCLEVBQUUsRUFBRTtJQUM1QyxNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QixPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDbEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBQSxhQUFNLEVBQUMsYUFBYSxDQUFDLEVBQUU7UUFDN0MsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7UUFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7S0FDMUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLHVCQUFnQixFQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUEsYUFBTSxFQUFDLGFBQWEsQ0FBQyxFQUFFLENBRXRGLENBQUM7SUFDRixJQUFBLHNCQUFlLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMERBQTBELENBQUMsQ0FBQztBQUMxRSxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgY3JlYXRlSW50ZXJmYWNlIH0gZnJvbSAncmVhZGxpbmUnO1xuaW1wb3J0IHsgYXBpVXJsLCByZWFkSnNvblJlc3BvbnNlLCBzYXZlQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9hdXRoJztcblxuYXN5bmMgZnVuY3Rpb24gcHJvbXB0KHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBybCA9IGNyZWF0ZUludGVyZmFjZSh7IGlucHV0OiBwcm9jZXNzLnN0ZGluLCBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0IH0pO1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybC5xdWVzdGlvbihxdWVzdGlvbiwgYW5zd2VyID0+IHsgcmwuY2xvc2UoKTsgcmVzb2x2ZShhbnN3ZXIpOyB9KSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb21wdFBhc3N3b3JkKHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShxdWVzdGlvbik7XG4gIHByb2Nlc3Muc3RkaW4uc2V0UmF3TW9kZSh0cnVlKTtcbiAgcHJvY2Vzcy5zdGRpbi5yZXN1bWUoKTtcbiAgcHJvY2Vzcy5zdGRpbi5zZXRFbmNvZGluZygndXRmOCcpO1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgbGV0IHBhc3N3b3JkID0gJyc7XG4gICAgcHJvY2Vzcy5zdGRpbi5vbignZGF0YScsIGZ1bmN0aW9uIGhhbmRsZXIoY2g6IHN0cmluZykge1xuICAgICAgaWYgKGNoID09PSAnXFxuJyB8fCBjaCA9PT0gJ1xccicgfHwgY2ggPT09ICdcdTAwMDMnKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkaW4uc2V0UmF3TW9kZShmYWxzZSk7XG4gICAgICAgIHByb2Nlc3Muc3RkaW4ucGF1c2UoKTtcbiAgICAgICAgcHJvY2Vzcy5zdGRpbi5yZW1vdmVMaXN0ZW5lcignZGF0YScsIGhhbmRsZXIpO1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFxuJyk7XG4gICAgICAgIHJlc29sdmUocGFzc3dvcmQpO1xuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ38nIHx8IGNoID09PSAnXFxiJykge1xuICAgICAgICBpZiAocGFzc3dvcmQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHBhc3N3b3JkID0gcGFzc3dvcmQuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdcXGIgXFxiJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhc3N3b3JkICs9IGNoO1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnKicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGxvZ2luQ29tbWFuZCA9IG5ldyBDb21tYW5kKCdsb2dpbicpXG4gIC5kZXNjcmlwdGlvbignTG9naW4gaW50byBHRU5JIFdvcmtmbG93cyBhbmQgc3RvcmUgY3JlZGVudGlhbHMnKVxuICAub3B0aW9uKCctLXBhc3N3b3JkIDxwYXNzd29yZD4nLCAnVXNlciBwYXNzd29yZCcpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdHM6IHsgcGFzc3dvcmQ/OiBzdHJpbmcgfSkgPT4ge1xuICAgIGNvbnN0IGVtYWlsID0gYXdhaXQgcHJvbXB0KCdFbWFpbDogJyk7XG4gICAgY29uc3QgcGFzc3dvcmQgPSBvcHRzLnBhc3N3b3JkID8/IGF3YWl0IHByb21wdFBhc3N3b3JkKCdQYXNzd29yZDogJyk7XG4gICAgaWYgKCFlbWFpbCB8fCAhcGFzc3dvcmQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0VtYWlsIGFuZCBwYXNzd29yZCBhcmUgcmVxdWlyZWQuJyk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGFwaVVybCgnL2F1dGgvbG9naW4nKSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZW1haWwsIHBhc3N3b3JkIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkSnNvblJlc3BvbnNlKHJlcywgeyBtZXRob2Q6ICdQT1NUJywgdXJsOiBhcGlVcmwoJy9hdXRoL2xvZ2luJykgfSkgYXMge1xuICAgICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICB9O1xuICAgIHNhdmVDcmVkZW50aWFscyhkYXRhLmFjY2Vzc1Rva2VuKTtcbiAgICBjb25zb2xlLmxvZygnTG9nZ2VkIGluLiBDcmVkZW50aWFscyBzYXZlZCB0byB+Ly5nZW5pL2NyZWRlbnRpYWxzLmpzb24nKTtcbiAgfSk7XG4iXX0=