@brainfish-ai/devdoc 0.1.23 → 0.1.24

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.
@@ -11,6 +11,38 @@ const net_1 = __importDefault(require("net"));
11
11
  const config_1 = require("../../config");
12
12
  const logger_1 = require("../../utils/logger");
13
13
  const paths_1 = require("../../utils/paths");
14
+ /**
15
+ * Open URL in the default browser (cross-platform)
16
+ */
17
+ async function openBrowser(url) {
18
+ const { platform } = process;
19
+ try {
20
+ let command;
21
+ let args;
22
+ switch (platform) {
23
+ case 'darwin': // macOS
24
+ command = 'open';
25
+ args = [url];
26
+ break;
27
+ case 'win32': // Windows
28
+ command = 'cmd';
29
+ args = ['/c', 'start', '', url];
30
+ break;
31
+ default: // Linux and others
32
+ command = 'xdg-open';
33
+ args = [url];
34
+ break;
35
+ }
36
+ const child = (0, child_process_1.spawn)(command, args, {
37
+ stdio: 'ignore',
38
+ detached: true,
39
+ });
40
+ child.unref();
41
+ }
42
+ catch {
43
+ // Silently fail if browser can't be opened
44
+ }
45
+ }
14
46
  /**
15
47
  * Check if a port is available
16
48
  */
@@ -39,6 +71,132 @@ async function findAvailablePort(startPort, host) {
39
71
  }
40
72
  throw new Error(`No available port found between ${startPort} and ${startPort + maxAttempts - 1}`);
41
73
  }
74
+ /**
75
+ * Create a progress bar string
76
+ */
77
+ function createProgressBar(progress, width = 30) {
78
+ const filled = Math.round(width * progress);
79
+ const empty = width - filled;
80
+ const bar = '█'.repeat(filled) + '░'.repeat(empty);
81
+ const percentage = Math.round(progress * 100);
82
+ return `[${bar}] ${percentage}%`;
83
+ }
84
+ /**
85
+ * Install dependencies with progress display
86
+ */
87
+ async function installWithProgress(cwd) {
88
+ return new Promise((resolve, reject) => {
89
+ const installChild = (0, child_process_1.spawn)('npm', ['install', '--progress'], {
90
+ cwd,
91
+ stdio: ['pipe', 'pipe', 'pipe'],
92
+ shell: true,
93
+ });
94
+ let packagesAdded = 0;
95
+ let totalPackages = 0;
96
+ let currentStep = '';
97
+ let lastLine = '';
98
+ const updateProgress = (line) => {
99
+ // Parse npm output to track progress
100
+ // Match "added X packages" pattern
101
+ const addedMatch = line.match(/added (\d+) packages?/i);
102
+ if (addedMatch) {
103
+ packagesAdded = parseInt(addedMatch[1], 10);
104
+ }
105
+ // Match package count from "reify:package-name: timing" or similar
106
+ const reifyMatch = line.match(/reify:([^:]+)/);
107
+ if (reifyMatch) {
108
+ currentStep = `Installing ${reifyMatch[1].trim()}`;
109
+ }
110
+ // Match "timing reifyNode:node_modules/X Completed in Xms"
111
+ const completedMatch = line.match(/Completed in \d+/);
112
+ if (completedMatch && totalPackages > 0) {
113
+ packagesAdded++;
114
+ }
115
+ // Match initial package count from lockfile or package.json analysis
116
+ const totalMatch = line.match(/(\d+) packages? (?:are|to be|will be)/i);
117
+ if (totalMatch) {
118
+ totalPackages = parseInt(totalMatch[1], 10);
119
+ }
120
+ // Match "idealTree" phase
121
+ if (line.includes('idealTree')) {
122
+ currentStep = 'Resolving dependencies...';
123
+ }
124
+ // Match "reify" phase start
125
+ if (line.includes('reify:') && !currentStep.startsWith('Installing')) {
126
+ currentStep = 'Installing packages...';
127
+ }
128
+ // Match "audit" phase
129
+ if (line.includes('audit')) {
130
+ currentStep = 'Running security audit...';
131
+ }
132
+ // Only update display if we have meaningful info
133
+ if (currentStep || packagesAdded > 0) {
134
+ // Clear line and show progress
135
+ process.stdout.clearLine(0);
136
+ process.stdout.cursorTo(0);
137
+ if (totalPackages > 0 && packagesAdded > 0) {
138
+ const progress = Math.min(packagesAdded / totalPackages, 1);
139
+ process.stdout.write(` ${createProgressBar(progress)} ${packagesAdded}/${totalPackages} packages`);
140
+ }
141
+ else if (currentStep) {
142
+ process.stdout.write(` ${logger_1.logger.cyan('○')} ${currentStep}`);
143
+ }
144
+ }
145
+ };
146
+ // Process stdout
147
+ installChild.stdout?.on('data', (data) => {
148
+ const lines = data.toString().split('\n');
149
+ for (const line of lines) {
150
+ if (line.trim()) {
151
+ lastLine = line;
152
+ updateProgress(line);
153
+ }
154
+ }
155
+ });
156
+ // Process stderr (npm often outputs progress to stderr)
157
+ installChild.stderr?.on('data', (data) => {
158
+ const lines = data.toString().split('\n');
159
+ for (const line of lines) {
160
+ if (line.trim()) {
161
+ // Skip WARN messages but process progress info
162
+ if (!line.includes('WARN') && !line.includes('npm warn')) {
163
+ lastLine = line;
164
+ updateProgress(line);
165
+ }
166
+ }
167
+ }
168
+ });
169
+ installChild.on('exit', (code) => {
170
+ // Clear the progress line
171
+ process.stdout.clearLine(0);
172
+ process.stdout.cursorTo(0);
173
+ if (code === 0) {
174
+ // Show final summary
175
+ if (packagesAdded > 0) {
176
+ console.log(` ${logger_1.logger.green('✓')} Installed ${packagesAdded} packages`);
177
+ }
178
+ else {
179
+ console.log(` ${logger_1.logger.green('✓')} Installation complete`);
180
+ }
181
+ resolve();
182
+ }
183
+ else {
184
+ console.log(` ${logger_1.logger.red('✗')} Installation failed`);
185
+ if (lastLine) {
186
+ console.log(` ${lastLine}`);
187
+ }
188
+ reject(new Error(`npm install failed with code ${code}`));
189
+ }
190
+ });
191
+ installChild.on('error', (error) => {
192
+ process.stdout.clearLine(0);
193
+ process.stdout.cursorTo(0);
194
+ reject(error);
195
+ });
196
+ // Show initial message
197
+ process.stdout.write(` ${logger_1.logger.cyan('○')} Resolving dependencies...`);
198
+ });
199
+ }
42
200
  async function dev(options) {
43
201
  const projectRoot = process.cwd();
44
202
  logger_1.logger.info('Starting DevDoc development server...');
@@ -61,7 +219,8 @@ async function dev(options) {
61
219
  logger_1.logger.success(`Loaded configuration: ${config.name || 'Untitled'}`);
62
220
  }
63
221
  catch (error) {
64
- logger_1.logger.error(`Failed to load docs.json: ${error.message}`);
222
+ const message = error instanceof Error ? error.message : String(error);
223
+ logger_1.logger.error(`Failed to load docs.json: ${message}`);
65
224
  process.exit(1);
66
225
  }
67
226
  // Get the renderer directory (bundled with this package)
@@ -75,20 +234,9 @@ async function dev(options) {
75
234
  const nodeModulesPath = path_1.default.join(rendererDir, 'node_modules');
76
235
  if (!fs_extra_1.default.existsSync(nodeModulesPath)) {
77
236
  logger_1.logger.info('Installing renderer dependencies (first run)...');
78
- const installChild = (0, child_process_1.spawn)('npm', ['install'], {
79
- cwd: rendererDir,
80
- stdio: 'inherit',
81
- shell: true,
82
- });
83
- await new Promise((resolve, reject) => {
84
- installChild.on('exit', (code) => {
85
- if (code === 0)
86
- resolve();
87
- else
88
- reject(new Error(`npm install failed with code ${code}`));
89
- });
90
- installChild.on('error', reject);
91
- });
237
+ console.log('');
238
+ await installWithProgress(rendererDir);
239
+ console.log('');
92
240
  logger_1.logger.success('Dependencies installed');
93
241
  }
94
242
  // Find available port
@@ -101,7 +249,8 @@ async function dev(options) {
101
249
  }
102
250
  }
103
251
  catch (error) {
104
- logger_1.logger.error(error.message);
252
+ const message = error instanceof Error ? error.message : String(error);
253
+ logger_1.logger.error(message);
105
254
  process.exit(1);
106
255
  }
107
256
  // Set environment variables - use STARTER_PATH with absolute path
@@ -111,8 +260,9 @@ async function dev(options) {
111
260
  PORT: String(actualPort),
112
261
  HOSTNAME: options.host,
113
262
  };
263
+ const serverUrl = `http://${options.host}:${actualPort}`;
114
264
  logger_1.logger.info(`Content directory: ${projectRoot}`);
115
- logger_1.logger.info(`Starting server at http://${options.host}:${actualPort}`);
265
+ logger_1.logger.info(`Starting server at ${serverUrl}`);
116
266
  logger_1.logger.info('Press Ctrl+C to stop\n');
117
267
  // Start Next.js dev server with Turbopack for better path alias support
118
268
  const child = (0, child_process_1.spawn)('npx', ['next', 'dev', '--turbo', '-p', String(actualPort), '-H', options.host], {
@@ -121,6 +271,13 @@ async function dev(options) {
121
271
  stdio: 'inherit',
122
272
  shell: true,
123
273
  });
274
+ // Open browser after a short delay to let the server start
275
+ if (options.open) {
276
+ setTimeout(async () => {
277
+ logger_1.logger.info(`Opening ${serverUrl} in your browser...`);
278
+ await openBrowser(serverUrl);
279
+ }, 3000); // Wait 3 seconds for server to be ready
280
+ }
124
281
  child.on('error', (error) => {
125
282
  logger_1.logger.error(`Failed to start server: ${error.message}`);
126
283
  process.exit(1);
@@ -136,4 +293,4 @@ async function dev(options) {
136
293
  child.kill('SIGTERM');
137
294
  });
138
295
  }
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy9kZXYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE2Q0Esa0JBa0hDO0FBL0pELGlEQUFzQztBQUN0QyxnREFBd0I7QUFDeEIsd0RBQTBCO0FBQzFCLDhDQUFzQjtBQUN0Qix5Q0FBMEQ7QUFDMUQsK0NBQTRDO0FBQzVDLDZDQUFtRDtBQU9uRDs7R0FFRztBQUNILEtBQUssVUFBVSxlQUFlLENBQUMsSUFBWSxFQUFFLElBQVk7SUFDdkQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7WUFDNUIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsaUJBQWlCLENBQUMsU0FBaUIsRUFBRSxJQUFZO0lBQzlELElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQztJQUNyQixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFFdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLElBQUksTUFBTSxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFF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QUFFLEdBQUcsRUFBRTtRQUN6QixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgeyBsb2FkQ29uZmlnLCB2YWxpZGF0ZUNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHsgZ2V0UmVuZGVyZXJEaXIgfSBmcm9tICcuLi8uLi91dGlscy9wYXRocyc7XG5cbmludGVyZmFjZSBEZXZPcHRpb25zIHtcbiAgcG9ydDogc3RyaW5nO1xuICBob3N0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBwb3J0IGlzIGF2YWlsYWJsZVxuICovXG5hc3luYyBmdW5jdGlvbiBpc1BvcnRBdmFpbGFibGUocG9ydDogbnVtYmVyLCBob3N0OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gbmV0LmNyZWF0ZVNlcnZlcigpO1xuICAgIHNlcnZlci5vbmNlKCdlcnJvcicsICgpID0+IHJlc29sdmUoZmFsc2UpKTtcbiAgICBzZXJ2ZXIub25jZSgnbGlzdGVuaW5nJywgKCkgPT4ge1xuICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICByZXNvbHZlKHRydWUpO1xuICAgIH0pO1xuICAgIHNlcnZlci5saXN0ZW4ocG9ydCwgaG9zdCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbmQgYW4gYXZhaWxhYmxlIHBvcnQgc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gcG9ydFxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kQXZhaWxhYmxlUG9ydChzdGFydFBvcnQ6IG51bWJlciwgaG9zdDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgbGV0IHBvcnQgPSBzdGFydFBvcnQ7XG4gIGNvbnN0IG1heEF0dGVtcHRzID0gMTA7XG4gIFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heEF0dGVtcHRzOyBpKyspIHtcbiAgICBpZiAoYXdhaXQgaXNQb3J0QXZhaWxhYmxlKHBvcnQsIGhvc3QpKSB7XG4gICAgICByZXR1cm4gcG9ydDtcbiAgICB9XG4gICAgcG9ydCsrO1xuICB9XG4gIFxuICB0aHJvdyBuZXcgRXJyb3IoYE5vIGF2YWlsYWJsZSBwb3J0IGZvdW5kIGJldHdlZW4gJHtzdGFydFBvcnR9IGFuZCAke3N0YXJ0UG9ydCArIG1heEF0dGVtcHRzIC0gMX1gKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRldihvcHRpb25zOiBEZXZPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb2plY3RSb290ID0gcHJvY2Vzcy5jd2QoKTtcbiAgXG4gIGxvZ2dlci5pbmZvKCdTdGFydGluZyBEZXZEb2MgZGV2ZWxvcG1lbnQgc2VydmVyLi4uJyk7XG4gIFxuICAvLyBDaGVjayBmb3IgZG9jcy5qc29uXG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICdkb2NzLmpzb24nKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdkb2NzLmpzb24gbm90IGZvdW5kIGluIGN1cnJlbnQgZGlyZWN0b3J5Jyk7XG4gICAgbG9nZ2VyLmluZm8oJ1J1biBcImRldmRvYyBpbml0XCIgdG8gY3JlYXRlIGEgbmV3IGRvY3VtZW50YXRpb24gcHJvamVjdCcpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuICBcbiAgLy8gTG9hZCBhbmQgdmFsaWRhdGUgY29uZmlnXG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgbG9hZENvbmZpZyhwcm9qZWN0Um9vdCk7XG4gICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlQ29uZmlnKGNvbmZpZyk7XG4gICAgXG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ludmFsaWQgZG9jcy5qc29uIGNvbmZpZ3VyYXRpb246Jyk7XG4gICAgICB2YWxpZGF0aW9uLmVycm9ycy5mb3JFYWNoKGVyciA9PiBsb2dnZXIuZXJyb3IoYCAgLSAke2Vycn1gKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIFxuICAgIGxvZ2dlci5zdWNjZXNzKGBMb2FkZWQgY29uZmlndXJhdGlvbjogJHtjb25maWcubmFtZSB8fCAnVW50aXRsZWQnfWApO1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBkb2NzLmpzb246ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbiAgXG4gIC8vIEdldCB0aGUgcmVuZGVyZXIgZGlyZWN0b3J5IChidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlKVxuICBjb25zdCByZW5kZXJlckRpciA9IGdldFJlbmRlcmVyRGlyKCk7XG4gIFxuICBpZiAoIXJlbmRlcmVyRGlyIHx8ICFmcy5leGlzdHNTeW5jKHJlbmRlcmVyRGlyKSkge1xuICAgIGxvZ2dlci5lcnJvcignUmVuZGVyZXIgbm90IGZvdW5kLiBQYWNrYWdlIG1heSBiZSBjb3JydXB0ZWQuJyk7XG4gICAgbG9nZ2VyLmRlYnVnKGBMb29rZWQgZm9yIHJlbmRlcmVyIGF0OiAke3JlbmRlcmVyRGlyfWApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuICBcbiAgLy8gQ2hlY2sgaWYgcmVuZGVyZXIgaGFzIG5vZGVfbW9kdWxlc1xuICBjb25zdCBub2RlTW9kdWxlc1BhdGggPSBwYXRoLmpvaW4ocmVuZGVyZXJEaXIsICdub2RlX21vZHVsZXMnKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKG5vZGVNb2R1bGVzUGF0aCkpIHtcbiAgICBsb2dnZXIuaW5mbygnSW5zdGFsbGluZyByZW5kZXJlciBkZXBlbmRlbmNpZXMgKGZpcnN0IHJ1bikuLi4nKTtcbiAgICBjb25zdCBpbnN0YWxsQ2hpbGQgPSBzcGF3bignbnBtJywgWydpbnN0YWxsJ10sIHtcbiAgICAgIGN3ZDogcmVuZGVyZXJEaXIsXG4gICAgICBzdGRpbzogJ2luaGVyaXQnLFxuICAgICAgc2hlbGw6IHRydWUsXG4gICAgfSk7XG4gICAgXG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaW5zdGFsbENoaWxkLm9uKCdleGl0JywgKGNvZGUpID0+IHtcbiAgICAgICAgaWYgKGNvZGUgPT09IDApIHJlc29sdmUoKTtcbiAgICAgICAgZWxzZSByZWplY3QobmV3IEVycm9yKGBucG0gaW5zdGFsbCBmYWlsZWQgd2l0aCBjb2RlICR7Y29kZX1gKSk7XG4gICAgICB9KTtcbiAgICAgIGluc3RhbGxDaGlsZC5vbignZXJyb3InLCByZWplY3QpO1xuICAgIH0pO1xuICAgIGxvZ2dlci5zdWNjZXNzKCdEZXBlbmRlbmNpZXMgaW5zdGFsbGVkJyk7XG4gIH1cbiAgXG4gIC8vIEZpbmQgYXZhaWxhYmxlIHBvcnRcbiAgY29uc3QgcmVxdWVzdGVkUG9ydCA9IHBhcnNlSW50KG9wdGlvbnMucG9ydCwgMTApO1xuICBsZXQgYWN0dWFsUG9ydDogbnVtYmVyO1xuICBcbiAgdHJ5IHtcbiAgICBhY3R1YWxQb3J0ID0gYXdhaXQgZmluZEF2YWlsYWJsZVBvcnQocmVxdWVzdGVkUG9ydCwgb3B0aW9ucy5ob3N0KTtcbiAgICBpZiAoYWN0dWFsUG9ydCAhPT0gcmVxdWVzdGVkUG9ydCkge1xuICAgICAgbG9nZ2VyLndhcm4oYFBvcnQgJHtyZXF1ZXN0ZWRQb3J0fSBpcyBpbiB1c2UsIHVzaW5nICR7YWN0dWFsUG9ydH0gaW5zdGVhZGApO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGxvZ2dlci5lcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbiAgXG4gIC8vIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgLSB1c2UgU1RBUlRFUl9QQVRIIHdpdGggYWJzb2x1dGUgcGF0aFxuICBjb25zdCBlbnYgPSB7XG4gICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgU1RBUlRFUl9QQVRIOiBwcm9qZWN0Um9vdCwgLy8gQWJzb2x1dGUgcGF0aCB0byB1c2VyJ3MgcHJvamVjdFxuICAgIFBPUlQ6IFN0cmluZyhhY3R1YWxQb3J0KSxcbiAgICBIT1NUTkFNRTogb3B0aW9ucy5ob3N0LFxuICB9O1xuICBcbiAgbG9nZ2VyLmluZm8oYENvbnRlbnQgZGlyZWN0b3J5OiAke3Byb2plY3RSb290fWApO1xuICBsb2dnZXIuaW5mbyhgU3RhcnRpbmcgc2VydmVyIGF0IGh0dHA6Ly8ke29wdGlvbnMuaG9zdH06JHthY3R1YWxQb3J0fWApO1xuICBsb2dnZXIuaW5mbygnUHJlc3MgQ3RybCtDIHRvIHN0b3BcXG4nKTtcbiAgXG4gIC8vIFN0YXJ0IE5leHQuanMgZGV2IHNlcnZlciB3aXRoIFR1cmJvcGFjayBmb3IgYmV0dGVyIHBhdGggYWxpYXMgc3VwcG9ydFxuICBjb25zdCBjaGlsZCA9IHNwYXduKFxuICAgICducHgnLFxuICAgIFsnbmV4dCcsICdkZXYnLCAnLS10dXJibycsICctcCcsIFN0cmluZyhhY3R1YWxQb3J0KSwgJy1IJywgb3B0aW9ucy5ob3N0XSxcbiAgICB7XG4gICAgICBjd2Q6IHJlbmRlcmVyRGlyLFxuICAgICAgZW52LFxuICAgICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICAgIHNoZWxsOiB0cnVlLFxuICAgIH1cbiAgKTtcbiAgXG4gIGNoaWxkLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHN0YXJ0IHNlcnZlcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfSk7XG4gIFxuICBjaGlsZC5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgcHJvY2Vzcy5leGl0KGNvZGUgfHwgMCk7XG4gIH0pO1xuICBcbiAgLy8gSGFuZGxlIHRlcm1pbmF0aW9uXG4gIHByb2Nlc3Mub24oJ1NJR0lOVCcsICgpID0+IHtcbiAgICBjaGlsZC5raWxsKCdTSUdJTlQnKTtcbiAgfSk7XG4gIFxuICBwcm9jZXNzLm9uKCdTSUdURVJNJywgKCkgPT4ge1xuICAgIGNoaWxkLmtpbGwoJ1NJR1RFUk0nKTtcbiAgfSk7XG59XG4iXX0=
296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy9kZXYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFnT0Esa0JBc0hDO0FBdFZELGlEQUFzQztBQUN0QyxnREFBd0I7QUFDeEIsd0RBQTBCO0FBQzFCLDhDQUFzQjtBQUN0Qix5Q0FBMEQ7QUFDMUQsK0NBQTRDO0FBQzVDLDZDQUFtRDtBQVFuRDs7R0FFRztBQUNILEtBQUssVUFBVSxXQUFXLENBQUMsR0FBVztJQUNwQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRTdCLElBQUksQ0FBQztRQUNILElBQUksT0FBZSxDQUFDO1FBQ3BCLElBQUksSUFBYyxDQUFDO1FBRW5CLFFBQVEsUUFBUSxFQUFFLENBQUM7WUFDakIsS0FBSyxRQUFRLEVBQUUsUUFBUTtnQkFDckIsT0FBTyxHQUFHLE1BQU0sQ0FBQztnQkFDakIsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2IsTUFBTTtZQUNSLEtBQUssT0FBTyxFQUFFLFVBQVU7Z0JBQ3RCLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ2hCLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQyxNQUFNO1lBQ1IsU0FBUyxtQkFBbUI7Z0JBQzFCLE9BQU8sR0FBRyxVQUFVLENBQUM7Z0JBQ3JCLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLE1BQU07UUFDVixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBQSxxQkFBSyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7WUFDakMsS0FBSyxFQUFFLFFBQVE7WUFDZixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsMkNB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Q0FBQyxLQUFLLElBQUksRUFBRTtZQUNwQixlQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsU0FBUyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLHdDQUF3QztJQUNwRCxDQUFDO0lBRUQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUMxQixlQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN6RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUgsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxQixDQUFDLENBQUMsQ0FBQztJQUVILHFCQUFxQjtJQUNyQixPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtRQUN6QixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgeyBsb2FkQ29uZmlnLCB2YWxpZGF0ZUNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHsgZ2V0UmVuZGVyZXJEaXIgfSBmcm9tICcuLi8uLi91dGlscy9wYXRocyc7XG5cbmludGVyZmFjZSBEZXZPcHRpb25zIHtcbiAgcG9ydDogc3RyaW5nO1xuICBob3N0OiBzdHJpbmc7XG4gIG9wZW46IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3BlbiBVUkwgaW4gdGhlIGRlZmF1bHQgYnJvd3NlciAoY3Jvc3MtcGxhdGZvcm0pXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG9wZW5Ccm93c2VyKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcGxhdGZvcm0gfSA9IHByb2Nlc3M7XG4gIFxuICB0cnkge1xuICAgIGxldCBjb21tYW5kOiBzdHJpbmc7XG4gICAgbGV0IGFyZ3M6IHN0cmluZ1tdO1xuICAgIFxuICAgIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICAgIGNhc2UgJ2Rhcndpbic6IC8vIG1hY09TXG4gICAgICAgIGNvbW1hbmQgPSAnb3Blbic7XG4gICAgICAgIGFyZ3MgPSBbdXJsXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd3aW4zMic6IC8vIFdpbmRvd3NcbiAgICAgICAgY29tbWFuZCA9ICdjbWQnO1xuICAgICAgICBhcmdzID0gWycvYycsICdzdGFydCcsICcnLCB1cmxdO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6IC8vIExpbnV4IGFuZCBvdGhlcnNcbiAgICAgICAgY29tbWFuZCA9ICd4ZGctb3Blbic7XG4gICAgICAgIGFyZ3MgPSBbdXJsXTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgICAgc3RkaW86ICdpZ25vcmUnLFxuICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgfSk7XG4gICAgXG4gICAgY2hpbGQudW5yZWYoKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gU2lsZW50bHkgZmFpbCBpZiBicm93c2VyIGNhbid0IGJlIG9wZW5lZFxuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBwb3J0IGlzIGF2YWlsYWJsZVxuICovXG5hc3luYyBmdW5jdGlvbiBpc1BvcnRBdmFpbGFibGUocG9ydDogbnVtYmVyLCBob3N0OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gbmV0LmNyZWF0ZVNlcnZlcigpO1xuICAgIHNlcnZlci5vbmNlKCdlcnJvcicsICgpID0+IHJlc29sdmUoZmFsc2UpKTtcbiAgICBzZXJ2ZXIub25jZSgnbGlzdGVuaW5nJywgKCkgPT4ge1xuICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICByZXNvbHZlKHRydWUpO1xuICAgIH0pO1xuICAgIHNlcnZlci5saXN0ZW4ocG9ydCwgaG9zdCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbmQgYW4gYXZhaWxhYmxlIHBvcnQgc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gcG9ydFxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kQXZhaWxhYmxlUG9ydChzdGFydFBvcnQ6IG51bWJlciwgaG9zdDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgbGV0IHBvcnQgPSBzdGFydFBvcnQ7XG4gIGNvbnN0IG1heEF0dGVtcHRzID0gMTA7XG4gIFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heEF0dGVtcHRzOyBpKyspIHtcbiAgICBpZiAoYXdhaXQgaXNQb3J0QXZhaWxhYmxlKHBvcnQsIGhvc3QpKSB7XG4gICAgICByZXR1cm4gcG9ydDtcbiAgICB9XG4gICAgcG9ydCsrO1xuICB9XG4gIFxuICB0aHJvdyBuZXcgRXJyb3IoYE5vIGF2YWlsYWJsZSBwb3J0IGZvdW5kIGJldHdlZW4gJHtzdGFydFBvcnR9IGFuZCAke3N0YXJ0UG9ydCArIG1heEF0dGVtcHRzIC0gMX1gKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwcm9ncmVzcyBiYXIgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVByb2dyZXNzQmFyKHByb2dyZXNzOiBudW1iZXIsIHdpZHRoOiBudW1iZXIgPSAzMCk6IHN0cmluZyB7XG4gIGNvbnN0IGZpbGxlZCA9IE1hdGgucm91bmQod2lkdGggKiBwcm9ncmVzcyk7XG4gIGNvbnN0IGVtcHR5ID0gd2lkdGggLSBmaWxsZWQ7XG4gIGNvbnN0IGJhciA9ICfilognLnJlcGVhdChmaWxsZWQpICsgJ+KWkScucmVwZWF0KGVtcHR5KTtcbiAgY29uc3QgcGVyY2VudGFnZSA9IE1hdGgucm91bmQocHJvZ3Jlc3MgKiAxMDApO1xuICByZXR1cm4gYFske2Jhcn1dICR7cGVyY2VudGFnZX0lYDtcbn1cblxuLyoqXG4gKiBJbnN0YWxsIGRlcGVuZGVuY2llcyB3aXRoIHByb2dyZXNzIGRpc3BsYXlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFdpdGhQcm9ncmVzcyhjd2Q6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGluc3RhbGxDaGlsZCA9IHNwYXduKCducG0nLCBbJ2luc3RhbGwnLCAnLS1wcm9ncmVzcyddLCB7XG4gICAgICBjd2QsXG4gICAgICBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgICAgc2hlbGw6IHRydWUsXG4gICAgfSk7XG4gICAgXG4gICAgbGV0IHBhY2thZ2VzQWRkZWQgPSAwO1xuICAgIGxldCB0b3RhbFBhY2thZ2VzID0gMDtcbiAgICBsZXQgY3VycmVudFN0ZXAgPSAnJztcbiAgICBsZXQgbGFzdExpbmUgPSAnJztcbiAgICBcbiAgICBjb25zdCB1cGRhdGVQcm9ncmVzcyA9IChsaW5lOiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIFBhcnNlIG5wbSBvdXRwdXQgdG8gdHJhY2sgcHJvZ3Jlc3NcbiAgICAgIFxuICAgICAgLy8gTWF0Y2ggXCJhZGRlZCBYIHBhY2thZ2VzXCIgcGF0dGVyblxuICAgICAgY29uc3QgYWRkZWRNYXRjaCA9IGxpbmUubWF0Y2goL2FkZGVkIChcXGQrKSBwYWNrYWdlcz8vaSk7XG4gICAgICBpZiAoYWRkZWRNYXRjaCkge1xuICAgICAgICBwYWNrYWdlc0FkZGVkID0gcGFyc2VJbnQoYWRkZWRNYXRjaFsxXSwgMTApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBNYXRjaCBwYWNrYWdlIGNvdW50IGZyb20gXCJyZWlmeTpwYWNrYWdlLW5hbWU6IHRpbWluZ1wiIG9yIHNpbWlsYXJcbiAgICAgIGNvbnN0IHJlaWZ5TWF0Y2ggPSBsaW5lLm1hdGNoKC9yZWlmeTooW146XSspLyk7XG4gICAgICBpZiAocmVpZnlNYXRjaCkge1xuICAgICAgICBjdXJyZW50U3RlcCA9IGBJbnN0YWxsaW5nICR7cmVpZnlNYXRjaFsxXS50cmltKCl9YDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gTWF0Y2ggXCJ0aW1pbmcgcmVpZnlOb2RlOm5vZGVfbW9kdWxlcy9YIENvbXBsZXRlZCBpbiBYbXNcIlxuICAgICAgY29uc3QgY29tcGxldGVkTWF0Y2ggPSBsaW5lLm1hdGNoKC9Db21wbGV0ZWQgaW4gXFxkKy8pO1xuICAgICAgaWYgKGNvbXBsZXRlZE1hdGNoICYmIHRvdGFsUGFja2FnZXMgPiAwKSB7XG4gICAgICAgIHBhY2thZ2VzQWRkZWQrKztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gTWF0Y2ggaW5pdGlhbCBwYWNrYWdlIGNvdW50IGZyb20gbG9ja2ZpbGUgb3IgcGFja2FnZS5qc29uIGFuYWx5c2lzXG4gICAgICBjb25zdCB0b3RhbE1hdGNoID0gbGluZS5tYXRjaCgvKFxcZCspIHBhY2thZ2VzPyAoPzphcmV8dG8gYmV8d2lsbCBiZSkvaSk7XG4gICAgICBpZiAodG90YWxNYXRjaCkge1xuICAgICAgICB0b3RhbFBhY2thZ2VzID0gcGFyc2VJbnQodG90YWxNYXRjaFsxXSwgMTApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBNYXRjaCBcImlkZWFsVHJlZVwiIHBoYXNlXG4gICAgICBpZiAobGluZS5pbmNsdWRlcygnaWRlYWxUcmVlJykpIHtcbiAgICAgICAgY3VycmVudFN0ZXAgPSAnUmVzb2x2aW5nIGRlcGVuZGVuY2llcy4uLic7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE1hdGNoIFwicmVpZnlcIiBwaGFzZSBzdGFydFxuICAgICAgaWYgKGxpbmUuaW5jbHVkZXMoJ3JlaWZ5OicpICYmICFjdXJyZW50U3RlcC5zdGFydHNXaXRoKCdJbnN0YWxsaW5nJykpIHtcbiAgICAgICAgY3VycmVudFN0ZXAgPSAnSW5zdGFsbGluZyBwYWNrYWdlcy4uLic7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE1hdGNoIFwiYXVkaXRcIiBwaGFzZVxuICAgICAgaWYgKGxpbmUuaW5jbHVkZXMoJ2F1ZGl0JykpIHtcbiAgICAgICAgY3VycmVudFN0ZXAgPSAnUnVubmluZyBzZWN1cml0eSBhdWRpdC4uLic7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE9ubHkgdXBkYXRlIGRpc3BsYXkgaWYgd2UgaGF2ZSBtZWFuaW5nZnVsIGluZm9cbiAgICAgIGlmIChjdXJyZW50U3RlcCB8fCBwYWNrYWdlc0FkZGVkID4gMCkge1xuICAgICAgICAvLyBDbGVhciBsaW5lIGFuZCBzaG93IHByb2dyZXNzXG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LmNsZWFyTGluZSgwKTtcbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQuY3Vyc29yVG8oMCk7XG4gICAgICAgIFxuICAgICAgICBpZiAodG90YWxQYWNrYWdlcyA+IDAgJiYgcGFja2FnZXNBZGRlZCA+IDApIHtcbiAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IE1hdGgubWluKHBhY2thZ2VzQWRkZWQgLyB0b3RhbFBhY2thZ2VzLCAxKTtcbiAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgICAke2NyZWF0ZVByb2dyZXNzQmFyKHByb2dyZXNzKX0gJHtwYWNrYWdlc0FkZGVkfS8ke3RvdGFsUGFja2FnZXN9IHBhY2thZ2VzYCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFN0ZXApIHtcbiAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgICAke2xvZ2dlci5jeWFuKCfil4snKX0gJHtjdXJyZW50U3RlcH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgLy8gUHJvY2VzcyBzdGRvdXRcbiAgICBpbnN0YWxsQ2hpbGQuc3Rkb3V0Py5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IGxpbmVzID0gZGF0YS50b1N0cmluZygpLnNwbGl0KCdcXG4nKTtcbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICBpZiAobGluZS50cmltKCkpIHtcbiAgICAgICAgICBsYXN0TGluZSA9IGxpbmU7XG4gICAgICAgICAgdXBkYXRlUHJvZ3Jlc3MobGluZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvLyBQcm9jZXNzIHN0ZGVyciAobnBtIG9mdGVuIG91dHB1dHMgcHJvZ3Jlc3MgdG8gc3RkZXJyKVxuICAgIGluc3RhbGxDaGlsZC5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgY29uc3QgbGluZXMgPSBkYXRhLnRvU3RyaW5nKCkuc3BsaXQoJ1xcbicpO1xuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGlmIChsaW5lLnRyaW0oKSkge1xuICAgICAgICAgIC8vIFNraXAgV0FSTiBtZXNzYWdlcyBidXQgcHJvY2VzcyBwcm9ncmVzcyBpbmZvXG4gICAgICAgICAgaWYgKCFsaW5lLmluY2x1ZGVzKCdXQVJOJykgJiYgIWxpbmUuaW5jbHVkZXMoJ25wbSB3YXJuJykpIHtcbiAgICAgICAgICAgIGxhc3RMaW5lID0gbGluZTtcbiAgICAgICAgICAgIHVwZGF0ZVByb2dyZXNzKGxpbmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIGluc3RhbGxDaGlsZC5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgICAvLyBDbGVhciB0aGUgcHJvZ3Jlc3MgbGluZVxuICAgICAgcHJvY2Vzcy5zdGRvdXQuY2xlYXJMaW5lKDApO1xuICAgICAgcHJvY2Vzcy5zdGRvdXQuY3Vyc29yVG8oMCk7XG4gICAgICBcbiAgICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICAgIC8vIFNob3cgZmluYWwgc3VtbWFyeVxuICAgICAgICBpZiAocGFja2FnZXNBZGRlZCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2xvZ2dlci5ncmVlbign4pyTJyl9IEluc3RhbGxlZCAke3BhY2thZ2VzQWRkZWR9IHBhY2thZ2VzYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgJHtsb2dnZXIuZ3JlZW4oJ+KckycpfSBJbnN0YWxsYXRpb24gY29tcGxldGVgKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke2xvZ2dlci5yZWQoJ+KclycpfSBJbnN0YWxsYXRpb24gZmFpbGVkYCk7XG4gICAgICAgIGlmIChsYXN0TGluZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICR7bGFzdExpbmV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgbnBtIGluc3RhbGwgZmFpbGVkIHdpdGggY29kZSAke2NvZGV9YCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIGluc3RhbGxDaGlsZC5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LmNsZWFyTGluZSgwKTtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LmN1cnNvclRvKDApO1xuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9KTtcbiAgICBcbiAgICAvLyBTaG93IGluaXRpYWwgbWVzc2FnZVxuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAgICR7bG9nZ2VyLmN5YW4oJ+KXiycpfSBSZXNvbHZpbmcgZGVwZW5kZW5jaWVzLi4uYCk7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGV2KG9wdGlvbnM6IERldk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJvamVjdFJvb3QgPSBwcm9jZXNzLmN3ZCgpO1xuICBcbiAgbG9nZ2VyLmluZm8oJ1N0YXJ0aW5nIERldkRvYyBkZXZlbG9wbWVudCBzZXJ2ZXIuLi4nKTtcbiAgXG4gIC8vIENoZWNrIGZvciBkb2NzLmpzb25cbiAgY29uc3QgY29uZmlnUGF0aCA9IHBhdGguam9pbihwcm9qZWN0Um9vdCwgJ2RvY3MuanNvbicpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnUGF0aCkpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ2RvY3MuanNvbiBub3QgZm91bmQgaW4gY3VycmVudCBkaXJlY3RvcnknKTtcbiAgICBsb2dnZXIuaW5mbygnUnVuIFwiZGV2ZG9jIGluaXRcIiB0byBjcmVhdGUgYSBuZXcgZG9jdW1lbnRhdGlvbiBwcm9qZWN0Jyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG4gIFxuICAvLyBMb2FkIGFuZCB2YWxpZGF0ZSBjb25maWdcbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCBsb2FkQ29uZmlnKHByb2plY3RSb290KTtcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVDb25maWcoY29uZmlnKTtcbiAgICBcbiAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBkb2NzLmpzb24gY29uZmlndXJhdGlvbjonKTtcbiAgICAgIHZhbGlkYXRpb24uZXJyb3JzLmZvckVhY2goZXJyID0+IGxvZ2dlci5lcnJvcihgICAtICR7ZXJyfWApKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gICAgXG4gICAgbG9nZ2VyLnN1Y2Nlc3MoYExvYWRlZCBjb25maWd1cmF0aW9uOiAke2NvbmZpZy5uYW1lIHx8ICdVbnRpdGxlZCd9YCk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGRvY3MuanNvbjogJHttZXNzYWdlfWApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuICBcbiAgLy8gR2V0IHRoZSByZW5kZXJlciBkaXJlY3RvcnkgKGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UpXG4gIGNvbnN0IHJlbmRlcmVyRGlyID0gZ2V0UmVuZGVyZXJEaXIoKTtcbiAgXG4gIGlmICghcmVuZGVyZXJEaXIgfHwgIWZzLmV4aXN0c1N5bmMocmVuZGVyZXJEaXIpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdSZW5kZXJlciBub3QgZm91bmQuIFBhY2thZ2UgbWF5IGJlIGNvcnJ1cHRlZC4nKTtcbiAgICBsb2dnZXIuZGVidWcoYExvb2tlZCBmb3IgcmVuZGVyZXIgYXQ6ICR7cmVuZGVyZXJEaXJ9YCk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG4gIFxuICAvLyBDaGVjayBpZiByZW5kZXJlciBoYXMgbm9kZV9tb2R1bGVzXG4gIGNvbnN0IG5vZGVNb2R1bGVzUGF0aCA9IHBhdGguam9pbihyZW5kZXJlckRpciwgJ25vZGVfbW9kdWxlcycpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMobm9kZU1vZHVsZXNQYXRoKSkge1xuICAgIGxvZ2dlci5pbmZvKCdJbnN0YWxsaW5nIHJlbmRlcmVyIGRlcGVuZGVuY2llcyAoZmlyc3QgcnVuKS4uLicpO1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICBcbiAgICBhd2FpdCBpbnN0YWxsV2l0aFByb2dyZXNzKHJlbmRlcmVyRGlyKTtcbiAgICBcbiAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoJ0RlcGVuZGVuY2llcyBpbnN0YWxsZWQnKTtcbiAgfVxuICBcbiAgLy8gRmluZCBhdmFpbGFibGUgcG9ydFxuICBjb25zdCByZXF1ZXN0ZWRQb3J0ID0gcGFyc2VJbnQob3B0aW9ucy5wb3J0LCAxMCk7XG4gIGxldCBhY3R1YWxQb3J0OiBudW1iZXI7XG4gIFxuICB0cnkge1xuICAgIGFjdHVhbFBvcnQgPSBhd2FpdCBmaW5kQXZhaWxhYmxlUG9ydChyZXF1ZXN0ZWRQb3J0LCBvcHRpb25zLmhvc3QpO1xuICAgIGlmIChhY3R1YWxQb3J0ICE9PSByZXF1ZXN0ZWRQb3J0KSB7XG4gICAgICBsb2dnZXIud2FybihgUG9ydCAke3JlcXVlc3RlZFBvcnR9IGlzIGluIHVzZSwgdXNpbmcgJHthY3R1YWxQb3J0fSBpbnN0ZWFkYCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgbG9nZ2VyLmVycm9yKG1lc3NhZ2UpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuICBcbiAgLy8gU2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyAtIHVzZSBTVEFSVEVSX1BBVEggd2l0aCBhYnNvbHV0ZSBwYXRoXG4gIGNvbnN0IGVudiA9IHtcbiAgICAuLi5wcm9jZXNzLmVudixcbiAgICBTVEFSVEVSX1BBVEg6IHByb2plY3RSb290LCAvLyBBYnNvbHV0ZSBwYXRoIHRvIHVzZXIncyBwcm9qZWN0XG4gICAgUE9SVDogU3RyaW5nKGFjdHVhbFBvcnQpLFxuICAgIEhPU1ROQU1FOiBvcHRpb25zLmhvc3QsXG4gIH07XG4gIFxuICBjb25zdCBzZXJ2ZXJVcmwgPSBgaHR0cDovLyR7b3B0aW9ucy5ob3N0fToke2FjdHVhbFBvcnR9YDtcbiAgXG4gIGxvZ2dlci5pbmZvKGBDb250ZW50IGRpcmVjdG9yeTogJHtwcm9qZWN0Um9vdH1gKTtcbiAgbG9nZ2VyLmluZm8oYFN0YXJ0aW5nIHNlcnZlciBhdCAke3NlcnZlclVybH1gKTtcbiAgbG9nZ2VyLmluZm8oJ1ByZXNzIEN0cmwrQyB0byBzdG9wXFxuJyk7XG4gIFxuICAvLyBTdGFydCBOZXh0LmpzIGRldiBzZXJ2ZXIgd2l0aCBUdXJib3BhY2sgZm9yIGJldHRlciBwYXRoIGFsaWFzIHN1cHBvcnRcbiAgY29uc3QgY2hpbGQgPSBzcGF3bihcbiAgICAnbnB4JyxcbiAgICBbJ25leHQnLCAnZGV2JywgJy0tdHVyYm8nLCAnLXAnLCBTdHJpbmcoYWN0dWFsUG9ydCksICctSCcsIG9wdGlvbnMuaG9zdF0sXG4gICAge1xuICAgICAgY3dkOiByZW5kZXJlckRpcixcbiAgICAgIGVudixcbiAgICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gICAgICBzaGVsbDogdHJ1ZSxcbiAgICB9XG4gICk7XG4gIFxuICAvLyBPcGVuIGJyb3dzZXIgYWZ0ZXIgYSBzaG9ydCBkZWxheSB0byBsZXQgdGhlIHNlcnZlciBzdGFydFxuICBpZiAob3B0aW9ucy5vcGVuKSB7XG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICBsb2dnZXIuaW5mbyhgT3BlbmluZyAke3NlcnZlclVybH0gaW4geW91ciBicm93c2VyLi4uYCk7XG4gICAgICBhd2FpdCBvcGVuQnJvd3NlcihzZXJ2ZXJVcmwpO1xuICAgIH0sIDMwMDApOyAvLyBXYWl0IDMgc2Vjb25kcyBmb3Igc2VydmVyIHRvIGJlIHJlYWR5XG4gIH1cbiAgXG4gIGNoaWxkLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHN0YXJ0IHNlcnZlcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfSk7XG4gIFxuICBjaGlsZC5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgcHJvY2Vzcy5leGl0KGNvZGUgfHwgMCk7XG4gIH0pO1xuICBcbiAgLy8gSGFuZGxlIHRlcm1pbmF0aW9uXG4gIHByb2Nlc3Mub24oJ1NJR0lOVCcsICgpID0+IHtcbiAgICBjaGlsZC5raWxsKCdTSUdJTlQnKTtcbiAgfSk7XG4gIFxuICBwcm9jZXNzLm9uKCdTSUdURVJNJywgKCkgPT4ge1xuICAgIGNoaWxkLmtpbGwoJ1NJR1RFUk0nKTtcbiAgfSk7XG59XG4iXX0=
@@ -5,7 +5,8 @@ interface InitOptions {
5
5
  url?: string;
6
6
  }
7
7
  /**
8
- * Initialize a DevDoc project with .devdoc.json and register with Brainfish
8
+ * Initialize a DevDoc project with .devdoc.json
9
+ * Note: Subdomain is only reserved when documentation is actually deployed (devdoc deploy)
9
10
  */
10
11
  export declare function init(options: InitOptions): Promise<void>;
11
12
  export {};
@@ -93,13 +93,14 @@ async function checkSubdomainAvailability(subdomain, apiUrl) {
93
93
  const result = await response.json();
94
94
  return result;
95
95
  }
96
- catch (error) {
96
+ catch {
97
97
  // If API is unavailable, allow proceeding (will fail at registration if invalid)
98
98
  return { available: true };
99
99
  }
100
100
  }
101
101
  /**
102
- * Initialize a DevDoc project with .devdoc.json and register with Brainfish
102
+ * Initialize a DevDoc project with .devdoc.json
103
+ * Note: Subdomain is only reserved when documentation is actually deployed (devdoc deploy)
103
104
  */
104
105
  async function init(options) {
105
106
  const projectRoot = process.cwd();
@@ -112,12 +113,12 @@ async function init(options) {
112
113
  logger_1.logger.info('Make sure you are in a DevDoc documentation project directory');
113
114
  process.exit(1);
114
115
  }
115
- // Check if .devdoc.json already exists with API key
116
+ // Check if .devdoc.json already exists with API key (already deployed)
116
117
  const devdocConfigPath = path_1.default.join(projectRoot, '.devdoc.json');
117
118
  if (fs_extra_1.default.existsSync(devdocConfigPath) && !options.force) {
118
119
  const existingConfig = fs_extra_1.default.readJsonSync(devdocConfigPath);
119
120
  if (existingConfig.apiKey) {
120
- logger_1.logger.warn('.devdoc.json already exists with API key');
121
+ logger_1.logger.warn('.devdoc.json already exists with API key (project is deployed)');
121
122
  logger_1.logger.info('Use --force to overwrite and create a new project');
122
123
  process.exit(1);
123
124
  }
@@ -148,6 +149,7 @@ async function init(options) {
148
149
  process.exit(1);
149
150
  }
150
151
  // Check subdomain availability via API (server validates blacklist)
152
+ // Note: This only checks availability, it does NOT reserve the subdomain
151
153
  logger_1.logger.info(`Checking if ${subdomain}.devdoc.sh is available...`);
152
154
  const availability = await checkSubdomainAvailability(subdomain, apiUrl);
153
155
  if (!availability.available) {
@@ -159,65 +161,25 @@ async function init(options) {
159
161
  }
160
162
  logger_1.logger.success(`✓ ${subdomain}.devdoc.sh is available!`);
161
163
  console.log('');
162
- // Register project with Brainfish API
163
- logger_1.logger.info('Registering project with Brainfish...');
164
- try {
165
- const response = await fetch(`${apiUrl}/api/projects/register`, {
166
- method: 'POST',
167
- headers: {
168
- 'Content-Type': 'application/json',
169
- },
170
- body: JSON.stringify({
171
- name: projectName,
172
- slug,
173
- subdomain,
174
- }),
175
- });
176
- if (!response.ok) {
177
- const errorData = await response.json().catch(() => ({ error: 'Unknown error' }));
178
- const errorMessage = errorData.error || `HTTP ${response.status}`;
179
- const details = errorData.details ? `\n Details: ${errorData.details}` : '';
180
- throw new Error(`${errorMessage}${details}`);
181
- }
182
- const result = await response.json();
183
- // Create .devdoc.json with API key
184
- const devdocConfig = {
185
- projectId: result.projectId,
186
- name: projectName,
187
- slug: result.slug,
188
- subdomain: result.subdomain,
189
- apiKey: result.apiKey,
190
- createdAt: new Date().toISOString(),
191
- };
192
- fs_extra_1.default.writeJsonSync(devdocConfigPath, devdocConfig, { spaces: 2 });
193
- logger_1.logger.success('✓ Project registered successfully');
194
- console.log('');
195
- console.log(' Project ID:', result.projectId);
196
- console.log(' URL:', `https://${result.subdomain}.devdoc.sh`);
197
- console.log(' API Key:', result.apiKey);
198
- console.log('');
199
- logger_1.logger.warn('⚠️ API key saved to .devdoc.json - add to .gitignore!');
200
- console.log('');
201
- logger_1.logger.info('Run "devdoc deploy" to deploy your documentation');
202
- }
203
- catch (error) {
204
- const message = error instanceof Error ? error.message : String(error);
205
- logger_1.logger.error(`Failed to register project: ${message}`);
206
- // Create local .devdoc.json without API key (offline mode)
207
- logger_1.logger.warn('Creating local config without API key...');
208
- const projectId = `${slug}-${generateId()}`;
209
- const devdocConfig = {
210
- projectId,
211
- name: projectName,
212
- slug,
213
- subdomain,
214
- createdAt: new Date().toISOString(),
215
- };
216
- fs_extra_1.default.writeJsonSync(devdocConfigPath, devdocConfig, { spaces: 2 });
217
- logger_1.logger.success('✓ Created .devdoc.json (offline mode)');
218
- console.log('');
219
- logger_1.logger.info('Run "devdoc init" again when online to register and get API key');
220
- }
164
+ // Create .devdoc.json with subdomain (but NO API key - not registered yet)
165
+ // The subdomain will only be reserved when the user actually deploys
166
+ const projectId = `${slug}-${generateId()}`;
167
+ const devdocConfig = {
168
+ projectId,
169
+ name: projectName,
170
+ slug,
171
+ subdomain,
172
+ createdAt: new Date().toISOString(),
173
+ // Note: No apiKey - subdomain is not reserved until deploy
174
+ };
175
+ fs_extra_1.default.writeJsonSync(devdocConfigPath, devdocConfig, { spaces: 2 });
176
+ logger_1.logger.success('✓ Project initialized');
177
+ console.log('');
178
+ console.log(' Subdomain:', `${subdomain}.devdoc.sh`);
179
+ console.log(' Status:', 'Not yet deployed');
180
+ console.log('');
181
+ logger_1.logger.info('Note: The subdomain is not reserved until you deploy.');
182
+ logger_1.logger.info('Run "devdoc deploy" to deploy and claim your subdomain.');
221
183
  }
222
184
  /**
223
185
  * Generate a URL-friendly slug from a name
@@ -235,4 +197,4 @@ function generateSlug(name) {
235
197
  function generateId() {
236
198
  return Math.random().toString(36).substring(2, 8);
237
199
  }
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvY29tbWFuZHMvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRHQSxvQkF5SUM7QUFyUEQsZ0RBQXVCO0FBQ3ZCLHdEQUF5QjtBQUN6Qix5Q0FBeUM7QUFDekMsK0NBQTJDO0FBQzNDLCtDQUFpRDtBQWlDakQsc0NBQXNDO0FBQ3RDLEtBQUssVUFBVSxNQUFNLENBQUMsUUFBZ0IsRUFBRSxZQUFxQjtJQUMzRCxNQUFNLFFBQVEsR0FBRyx3REFBYSxVQUFVLEdBQUMsQ0FBQTtJQUN6QyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFBO0lBRUYsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQzVELEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLEdBQUcsV0FBVyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNwRCxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDVixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUM5QyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxTQUFpQjtJQUMvQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQTtJQUN6RCxDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSx5Q0FBeUMsRUFBRSxDQUFBO0lBQzNFLENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDMUIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLHlDQUF5QyxFQUFFLENBQUE7SUFDM0UsQ0FBQztJQUVELElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUscUVBQXFFLEVBQUUsQ0FBQTtJQUN2RyxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLDhDQUE4QyxFQUFFLENBQUE7SUFDaEYsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUE7QUFDeEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLDBCQUEwQixDQUN2QyxTQUFpQixFQUNqQixNQUFjO0lBRWQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxNQUFNLHVCQUF1QixFQUFFO1lBQzdELE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDO1NBQ3BDLENBQUMsQ0FBQTtRQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBNEIsQ0FBQTtRQUM5RCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsaUZBQWlGO1FBQ2pGLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFDNUIsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxJQUFJLENBQUMsT0FBb0I7SUFDN0MsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksMkJBQWUsQ0FBQTtJQUUzRSxlQUFNLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUE7SUFFL0Msc0JBQXNCO0lBQ3RCLE1BQU0sVUFBVSxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ3RELElBQUksQ0FBQyxrQkFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQy9CLGVBQU0sQ0FBQyxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQTtRQUN4RCxlQUFNLENBQUMsSUFBSSxDQUFDLCtEQUErRCxDQUFDLENBQUE7UUFDNUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELE1BQU0sZ0JBQWdCLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFDL0QsSUFBSSxrQkFBRSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RELE1BQU0sY0FBYyxHQUFHLGtCQUFFLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFpQixDQUFBO1FBQ3hFLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFCLGVBQU0sQ0FBQyxJQUFJLENBQUMsMENBQTBDLENBQUMsQ0FBQTtZQUN2RCxlQUFNLENBQUMsSUFBSSxDQUFDLG1EQUFtRCxDQUFDLENBQUE7WUFDaEUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxJQUFJLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQTtJQUNwQyxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsbUJBQVUsRUFBQyxXQUFXLENBQUMsQ0FBQTtRQUM1QyxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUE7SUFDMUMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLG1CQUFtQjtJQUNyQixDQUFDO0lBRUQsdURBQXVEO0lBQ3ZELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRXRELHlDQUF5QztJQUN6QyxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFBO0lBRWpDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFBO1FBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDZixTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUMsdUJBQXVCLGtCQUFrQixZQUFZLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtRQUNuRyxTQUFTLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN2RixDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsZUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBTSxDQUFDLENBQUE7UUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBRUQsb0VBQW9FO0lBQ3BFLGVBQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxTQUFTLDRCQUE0QixDQUFDLENBQUE7SUFDakUsTUFBTSxZQUFZLEdBQUcsTUFBTSwwQkFBMEIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFeEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM1QixlQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksY0FBYyxTQUFTLG9CQUFvQixDQUFDLENBQUE7UUFDL0UsSUFBSSxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUIsZUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsWUFBWSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUE7UUFDN0QsQ0FBQztRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakIsQ0FBQztJQUVELGVBQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxTQUFTLDBCQUEwQixDQUFDLENBQUE7SUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUVmLHNDQUFzQztJQUN0QyxlQUFNLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQUE7SUFFcEQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxNQUFNLHdCQUF3QixFQUFFO1lBQzlELE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLElBQUk7Z0JBQ0osU0FBUzthQUNWLENBQUM7U0FDSCxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sU0FBUyxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQXlDLENBQUE7WUFDekgsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxRQUFRLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtZQUNqRSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDN0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFlBQVksR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQzlDLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQXNCLENBQUE7UUFFeEQsbUNBQW1DO1FBQ25DLE1BQU0sWUFBWSxHQUFpQjtZQUNqQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7WUFDM0IsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztZQUMzQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1NBQ3BDLENBQUE7UUFFRCxrQkFBRSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUUvRCxlQUFNLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUE7UUFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUM5QyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLE1BQU0sQ0FBQyxTQUFTLFlBQVksQ0FBQyxDQUFBO1FBQzlELE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2YsZUFBTSxDQUFDLElBQUksQ0FBQyx3REFBd0QsQ0FBQyxDQUFBO1FBQ3JFLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDZixlQUFNLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxDQUFDLENBQUE7SUFFakUsQ0FBQztJQUFDLE9BQU8sS0FBYyxFQUFFLENBQUM7UUFDeEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RFLGVBQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFFdEQsMkRBQTJEO1FBQzNELGVBQU0sQ0FBQyxJQUFJLENBQUMsMENBQTBDLENBQUMsQ0FBQTtRQUN2RCxNQUFNLFNBQVMsR0FBRyxHQUFHLElBQUksSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFBO1FBQzNDLE1BQU0sWUFBWSxHQUFpQjtZQUNqQyxTQUFTO1lBQ1QsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSTtZQUNKLFNBQVM7WUFDVCxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7U0FDcEMsQ0FBQTtRQUVELGtCQUFFLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRS9ELGVBQU0sQ0FBQyxPQUFPLENBQUMsdUNBQXVDLENBQUMsQ0FBQTtRQUN2RCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2YsZUFBTSxDQUFDLElBQUksQ0FBQyxpRUFBaUUsQ0FBQyxDQUFBO0lBQ2hGLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxJQUFZO0lBQ2hDLE9BQU8sSUFBSTtTQUNSLFdBQVcsRUFBRTtTQUNiLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDO1NBQzNCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1NBQ3JCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDckIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxVQUFVO0lBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHsgbG9hZENvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZydcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlcidcbmltcG9ydCB7IERFRkFVTFRfQVBJX1VSTCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cydcblxuaW50ZXJmYWNlIEluaXRPcHRpb25zIHtcbiAgc2x1Zz86IHN0cmluZ1xuICBzdWJkb21haW4/OiBzdHJpbmdcbiAgZm9yY2U/OiBib29sZWFuXG4gIHVybD86IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgRGV2RG9jQ29uZmlnIHtcbiAgcHJvamVjdElkOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHNsdWc6IHN0cmluZ1xuICBzdWJkb21haW46IHN0cmluZ1xuICBhcGlLZXk/OiBzdHJpbmdcbiAgY3JlYXRlZEF0OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIFJlZ2lzdGVyUmVzcG9uc2Uge1xuICBzdWNjZXNzOiBib29sZWFuXG4gIHByb2plY3RJZDogc3RyaW5nXG4gIHNsdWc6IHN0cmluZ1xuICBzdWJkb21haW46IHN0cmluZ1xuICBhcGlLZXk6IHN0cmluZ1xuICBlcnJvcj86IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgQ2hlY2tTdWJkb21haW5SZXNwb25zZSB7XG4gIGF2YWlsYWJsZTogYm9vbGVhblxuICBlcnJvcj86IHN0cmluZ1xuICBzdWdnZXN0aW9uPzogc3RyaW5nXG59XG5cbi8vIFNpbXBsZSBwcm9tcHQgaGVscGVyIHVzaW5nIHJlYWRsaW5lXG5hc3luYyBmdW5jdGlvbiBwcm9tcHQocXVlc3Rpb246IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVhZGxpbmUgPSBhd2FpdCBpbXBvcnQoJ3JlYWRsaW5lJylcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gIH0pXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdEhpbnQgPSBkZWZhdWx0VmFsdWUgPyBgICgke2RlZmF1bHRWYWx1ZX0pYCA6ICcnXG4gICAgcmwucXVlc3Rpb24oYCR7cXVlc3Rpb259JHtkZWZhdWx0SGludH06IGAsIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKClcbiAgICAgIHJlc29sdmUoYW5zd2VyLnRyaW0oKSB8fCBkZWZhdWx0VmFsdWUgfHwgJycpXG4gICAgfSlcbiAgfSlcbn1cblxuLyoqXG4gKiBCYXNpYyBzdWJkb21haW4gZm9ybWF0IHZhbGlkYXRpb24gKHNlcnZlciBkb2VzIGZ1bGwgdmFsaWRhdGlvbilcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFN1YmRvbWFpbkZvcm1hdChzdWJkb21haW46IHN0cmluZyk6IHsgdmFsaWQ6IGJvb2xlYW47IGVycm9yPzogc3RyaW5nIH0ge1xuICBpZiAoIXN1YmRvbWFpbikge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gaXMgcmVxdWlyZWQnIH1cbiAgfVxuICBcbiAgaWYgKHN1YmRvbWFpbi5sZW5ndGggPCAzKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBtdXN0IGJlIGF0IGxlYXN0IDMgY2hhcmFjdGVycycgfVxuICB9XG4gIFxuICBpZiAoc3ViZG9tYWluLmxlbmd0aCA+IDYzKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBtdXN0IGJlIDYzIGNoYXJhY3RlcnMgb3IgbGVzcycgfVxuICB9XG4gIFxuICBpZiAoIS9eW2EtejAtOV0oW2EtejAtOS1dKlthLXowLTldKT8kLy50ZXN0KHN1YmRvbWFpbikpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoIGFscGhhbnVtZXJpYywgY2FuIGNvbnRhaW4gaHlwaGVucycgfVxuICB9XG4gIFxuICBpZiAoLy0tLy50ZXN0KHN1YmRvbWFpbikpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIGNhbm5vdCBjb250YWluIGNvbnNlY3V0aXZlIGh5cGhlbnMnIH1cbiAgfVxuICBcbiAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfVxufVxuXG4vKipcbiAqIENoZWNrIHN1YmRvbWFpbiBhdmFpbGFiaWxpdHkgdmlhIEFQSSAoYWxzbyB2YWxpZGF0ZXMgYWdhaW5zdCBzZXJ2ZXIgYmxhY2tsaXN0KVxuICovXG5hc3luYyBmdW5jdGlvbiBjaGVja1N1YmRvbWFpbkF2YWlsYWJpbGl0eShcbiAgc3ViZG9tYWluOiBzdHJpbmcsXG4gIGFwaVVybDogc3RyaW5nXG4pOiBQcm9taXNlPENoZWNrU3ViZG9tYWluUmVzcG9uc2U+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2FwaVVybH0vYXBpL3N1YmRvbWFpbnMvY2hlY2tgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHN1YmRvbWFpbiB9KSxcbiAgICB9KVxuICAgIFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBDaGVja1N1YmRvbWFpblJlc3BvbnNlXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIElmIEFQSSBpcyB1bmF2YWlsYWJsZSwgYWxsb3cgcHJvY2VlZGluZyAod2lsbCBmYWlsIGF0IHJlZ2lzdHJhdGlvbiBpZiBpbnZhbGlkKVxuICAgIHJldHVybiB7IGF2YWlsYWJsZTogdHJ1ZSB9XG4gIH1cbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIGEgRGV2RG9jIHByb2plY3Qgd2l0aCAuZGV2ZG9jLmpzb24gYW5kIHJlZ2lzdGVyIHdpdGggQnJhaW5maXNoXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0KG9wdGlvbnM6IEluaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb2plY3RSb290ID0gcHJvY2Vzcy5jd2QoKVxuICBjb25zdCBhcGlVcmwgPSBvcHRpb25zLnVybCB8fCBwcm9jZXNzLmVudi5ERVZET0NfQVBJX1VSTCB8fCBERUZBVUxUX0FQSV9VUkxcbiAgXG4gIGxvZ2dlci5pbmZvKCdJbml0aWFsaXppbmcgRGV2RG9jIHByb2plY3QuLi5cXG4nKVxuICBcbiAgLy8gQ2hlY2sgZm9yIGRvY3MuanNvblxuICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5qb2luKHByb2plY3RSb290LCAnZG9jcy5qc29uJylcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdkb2NzLmpzb24gbm90IGZvdW5kIGluIGN1cnJlbnQgZGlyZWN0b3J5JylcbiAgICBsb2dnZXIuaW5mbygnTWFrZSBzdXJlIHlvdSBhcmUgaW4gYSBEZXZEb2MgZG9jdW1lbnRhdGlvbiBwcm9qZWN0IGRpcmVjdG9yeScpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgXG4gIC8vIENoZWNrIGlmIC5kZXZkb2MuanNvbiBhbHJlYWR5IGV4aXN0cyB3aXRoIEFQSSBrZXlcbiAgY29uc3QgZGV2ZG9jQ29uZmlnUGF0aCA9IHBhdGguam9pbihwcm9qZWN0Um9vdCwgJy5kZXZkb2MuanNvbicpXG4gIGlmIChmcy5leGlzdHNTeW5jKGRldmRvY0NvbmZpZ1BhdGgpICYmICFvcHRpb25zLmZvcmNlKSB7XG4gICAgY29uc3QgZXhpc3RpbmdDb25maWcgPSBmcy5yZWFkSnNvblN5bmMoZGV2ZG9jQ29uZmlnUGF0aCkgYXMgRGV2RG9jQ29uZmlnXG4gICAgaWYgKGV4aXN0aW5nQ29uZmlnLmFwaUtleSkge1xuICAgICAgbG9nZ2VyLndhcm4oJy5kZXZkb2MuanNvbiBhbHJlYWR5IGV4aXN0cyB3aXRoIEFQSSBrZXknKVxuICAgICAgbG9nZ2VyLmluZm8oJ1VzZSAtLWZvcmNlIHRvIG92ZXJ3cml0ZSBhbmQgY3JlYXRlIGEgbmV3IHByb2plY3QnKVxuICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgfVxuICB9XG4gIFxuICAvLyBMb2FkIGRvY3MuanNvbiB0byBnZXQgcHJvamVjdCBuYW1lXG4gIGxldCBwcm9qZWN0TmFtZSA9ICdNeSBEb2N1bWVudGF0aW9uJ1xuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGxvYWRDb25maWcocHJvamVjdFJvb3QpXG4gICAgcHJvamVjdE5hbWUgPSBjb25maWcubmFtZSB8fCBwcm9qZWN0TmFtZVxuICB9IGNhdGNoIHtcbiAgICAvLyBVc2UgZGVmYXVsdCBuYW1lXG4gIH1cbiAgXG4gIC8vIEdlbmVyYXRlIHNsdWcgZnJvbSBwcm9qZWN0IG5hbWUgb3IgdXNlIHByb3ZpZGVkIHNsdWdcbiAgY29uc3Qgc2x1ZyA9IG9wdGlvbnMuc2x1ZyB8fCBnZW5lcmF0ZVNsdWcocHJvamVjdE5hbWUpXG4gIFxuICAvLyBHZXQgc3ViZG9tYWluIC0gcHJvbXB0IGlmIG5vdCBwcm92aWRlZFxuICBsZXQgc3ViZG9tYWluID0gb3B0aW9ucy5zdWJkb21haW5cbiAgXG4gIGlmICghc3ViZG9tYWluKSB7XG4gICAgY29uc3Qgc3VnZ2VzdGVkU3ViZG9tYWluID0gc2x1Z1xuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIHN1YmRvbWFpbiA9IGF3YWl0IHByb21wdChgRW50ZXIgc3ViZG9tYWluIGZvciAke3N1Z2dlc3RlZFN1YmRvbWFpbn0uZGV2ZG9jLnNoYCwgc3VnZ2VzdGVkU3ViZG9tYWluKVxuICAgIHN1YmRvbWFpbiA9IHN1YmRvbWFpbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05LV0vZywgJy0nKS5yZXBsYWNlKC9eLXwtJC9nLCAnJylcbiAgfVxuICBcbiAgLy8gVmFsaWRhdGUgc3ViZG9tYWluIGZvcm1hdCBsb2NhbGx5XG4gIGNvbnN0IGZvcm1hdENoZWNrID0gaXNWYWxpZFN1YmRvbWFpbkZvcm1hdChzdWJkb21haW4pXG4gIGlmICghZm9ybWF0Q2hlY2sudmFsaWQpIHtcbiAgICBsb2dnZXIuZXJyb3IoZm9ybWF0Q2hlY2suZXJyb3IhKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIFxuICAvLyBDaGVjayBzdWJkb21haW4gYXZhaWxhYmlsaXR5IHZpYSBBUEkgKHNlcnZlciB2YWxpZGF0ZXMgYmxhY2tsaXN0KVxuICBsb2dnZXIuaW5mbyhgQ2hlY2tpbmcgaWYgJHtzdWJkb21haW59LmRldmRvYy5zaCBpcyBhdmFpbGFibGUuLi5gKVxuICBjb25zdCBhdmFpbGFiaWxpdHkgPSBhd2FpdCBjaGVja1N1YmRvbWFpbkF2YWlsYWJpbGl0eShzdWJkb21haW4sIGFwaVVybClcbiAgXG4gIGlmICghYXZhaWxhYmlsaXR5LmF2YWlsYWJsZSkge1xuICAgIGxvZ2dlci5lcnJvcihhdmFpbGFiaWxpdHkuZXJyb3IgfHwgYFN1YmRvbWFpbiBcIiR7c3ViZG9tYWlufVwiIGlzIG5vdCBhdmFpbGFibGVgKVxuICAgIGlmIChhdmFpbGFiaWxpdHkuc3VnZ2VzdGlvbikge1xuICAgICAgbG9nZ2VyLmluZm8oYFN1Z2dlc3Rpb246IFRyeSBcIiR7YXZhaWxhYmlsaXR5LnN1Z2dlc3Rpb259XCJgKVxuICAgIH1cbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgbG9nZ2VyLnN1Y2Nlc3MoYOKckyAke3N1YmRvbWFpbn0uZGV2ZG9jLnNoIGlzIGF2YWlsYWJsZSFgKVxuICBjb25zb2xlLmxvZygnJylcbiAgXG4gIC8vIFJlZ2lzdGVyIHByb2plY3Qgd2l0aCBCcmFpbmZpc2ggQVBJXG4gIGxvZ2dlci5pbmZvKCdSZWdpc3RlcmluZyBwcm9qZWN0IHdpdGggQnJhaW5maXNoLi4uJylcbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9wcm9qZWN0cy9yZWdpc3RlcmAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbmFtZTogcHJvamVjdE5hbWUsXG4gICAgICAgIHNsdWcsXG4gICAgICAgIHN1YmRvbWFpbixcbiAgICAgIH0pLFxuICAgIH0pXG4gICAgXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+ICh7IGVycm9yOiAnVW5rbm93biBlcnJvcicgfSkpIGFzIHsgZXJyb3I/OiBzdHJpbmc7IGRldGFpbHM/OiBzdHJpbmcgfVxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3JEYXRhLmVycm9yIHx8IGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWBcbiAgICAgIGNvbnN0IGRldGFpbHMgPSBlcnJvckRhdGEuZGV0YWlscyA/IGBcXG4gICBEZXRhaWxzOiAke2Vycm9yRGF0YS5kZXRhaWxzfWAgOiAnJ1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yTWVzc2FnZX0ke2RldGFpbHN9YClcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIFJlZ2lzdGVyUmVzcG9uc2VcbiAgICBcbiAgICAvLyBDcmVhdGUgLmRldmRvYy5qc29uIHdpdGggQVBJIGtleVxuICAgIGNvbnN0IGRldmRvY0NvbmZpZzogRGV2RG9jQ29uZmlnID0ge1xuICAgICAgcHJvamVjdElkOiByZXN1bHQucHJvamVjdElkLFxuICAgICAgbmFtZTogcHJvamVjdE5hbWUsXG4gICAgICBzbHVnOiByZXN1bHQuc2x1ZyxcbiAgICAgIHN1YmRvbWFpbjogcmVzdWx0LnN1YmRvbWFpbixcbiAgICAgIGFwaUtleTogcmVzdWx0LmFwaUtleSxcbiAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH1cbiAgICBcbiAgICBmcy53cml0ZUpzb25TeW5jKGRldmRvY0NvbmZpZ1BhdGgsIGRldmRvY0NvbmZpZywgeyBzcGFjZXM6IDIgfSlcbiAgICBcbiAgICBsb2dnZXIuc3VjY2Vzcygn4pyTIFByb2plY3QgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHknKVxuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGNvbnNvbGUubG9nKCcgIFByb2plY3QgSUQ6JywgcmVzdWx0LnByb2plY3RJZClcbiAgICBjb25zb2xlLmxvZygnICBVUkw6JywgYGh0dHBzOi8vJHtyZXN1bHQuc3ViZG9tYWlufS5kZXZkb2Muc2hgKVxuICAgIGNvbnNvbGUubG9nKCcgIEFQSSBLZXk6JywgcmVzdWx0LmFwaUtleSlcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBsb2dnZXIud2Fybign4pqg77iPICBBUEkga2V5IHNhdmVkIHRvIC5kZXZkb2MuanNvbiAtIGFkZCB0byAuZ2l0aWdub3JlIScpXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgbG9nZ2VyLmluZm8oJ1J1biBcImRldmRvYyBkZXBsb3lcIiB0byBkZXBsb3kgeW91ciBkb2N1bWVudGF0aW9uJylcbiAgICBcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gcmVnaXN0ZXIgcHJvamVjdDogJHttZXNzYWdlfWApXG4gICAgXG4gICAgLy8gQ3JlYXRlIGxvY2FsIC5kZXZkb2MuanNvbiB3aXRob3V0IEFQSSBrZXkgKG9mZmxpbmUgbW9kZSlcbiAgICBsb2dnZXIud2FybignQ3JlYXRpbmcgbG9jYWwgY29uZmlnIHdpdGhvdXQgQVBJIGtleS4uLicpXG4gICAgY29uc3QgcHJvamVjdElkID0gYCR7c2x1Z30tJHtnZW5lcmF0ZUlkKCl9YFxuICAgIGNvbnN0IGRldmRvY0NvbmZpZzogRGV2RG9jQ29uZmlnID0ge1xuICAgICAgcHJvamVjdElkLFxuICAgICAgbmFtZTogcHJvamVjdE5hbWUsXG4gICAgICBzbHVnLFxuICAgICAgc3ViZG9tYWluLFxuICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfVxuICAgIFxuICAgIGZzLndyaXRlSnNvblN5bmMoZGV2ZG9jQ29uZmlnUGF0aCwgZGV2ZG9jQ29uZmlnLCB7IHNwYWNlczogMiB9KVxuICAgIFxuICAgIGxvZ2dlci5zdWNjZXNzKCfinJMgQ3JlYXRlZCAuZGV2ZG9jLmpzb24gKG9mZmxpbmUgbW9kZSknKVxuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGxvZ2dlci5pbmZvKCdSdW4gXCJkZXZkb2MgaW5pdFwiIGFnYWluIHdoZW4gb25saW5lIHRvIHJlZ2lzdGVyIGFuZCBnZXQgQVBJIGtleScpXG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIFVSTC1mcmllbmRseSBzbHVnIGZyb20gYSBuYW1lXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlU2x1ZyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbmFtZVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgJy0nKVxuICAgIC5yZXBsYWNlKC9eLXwtJC9nLCAnJylcbiAgICAuc3Vic3RyaW5nKDAsIDUwKVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgc2hvcnQgcmFuZG9tIElEXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlSWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA4KVxufVxuIl19
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvY29tbWFuZHMvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9HQSxvQkEyRkM7QUEvTEQsZ0RBQXVCO0FBQ3ZCLHdEQUF5QjtBQUN6Qix5Q0FBeUM7QUFDekMsK0NBQTJDO0FBQzNDLCtDQUFpRDtBQXdCakQsc0NBQXNDO0FBQ3RDLEtBQUssVUFBVSxNQUFNLENBQUMsUUFBZ0IsRUFBRSxZQUFxQjtJQUMzRCxNQUFNLFFBQVEsR0FBRyx3REFBYSxVQUFVLEdBQUMsQ0FBQTtJQUN6QyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFBO0lBRUYsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQzVELEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLEdBQUcsV0FBVyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNwRCxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDVixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUM5QyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxTQUFpQjtJQUMvQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUss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dUJBQXVCLENBQUMsQ0FBQTtJQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsR0FBRyxTQUFTLFlBQVksQ0FBQyxDQUFBO0lBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUE7SUFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsdURBQXVELENBQUMsQ0FBQTtJQUNwRSxlQUFNLENBQUMsSUFBSSxDQUFDLHlEQUF5RCxDQUFDLENBQUE7QUFDeEUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxZQUFZLENBQUMsSUFBWTtJQUNoQyxPQUFPLElBQUk7U0FDUixXQUFXLEVBQUU7U0FDYixPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQztTQUMzQixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztTQUNyQixTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQ3JCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsVUFBVTtJQUNqQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcbmltcG9ydCB7IGxvYWRDb25maWcgfSBmcm9tICcuLi8uLi9jb25maWcnXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInXG5pbXBvcnQgeyBERUZBVUxUX0FQSV9VUkwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnXG5cbmludGVyZmFjZSBJbml0T3B0aW9ucyB7XG4gIHNsdWc/OiBzdHJpbmdcbiAgc3ViZG9tYWluPzogc3RyaW5nXG4gIGZvcmNlPzogYm9vbGVhblxuICB1cmw/OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERldkRvY0NvbmZpZyB7XG4gIHByb2plY3RJZDogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBzbHVnOiBzdHJpbmdcbiAgc3ViZG9tYWluOiBzdHJpbmdcbiAgYXBpS2V5Pzogc3RyaW5nXG4gIGNyZWF0ZWRBdDogc3RyaW5nXG59XG5cbmludGVyZmFjZSBDaGVja1N1YmRvbWFpblJlc3BvbnNlIHtcbiAgYXZhaWxhYmxlOiBib29sZWFuXG4gIGVycm9yPzogc3RyaW5nXG4gIHN1Z2dlc3Rpb24/OiBzdHJpbmdcbn1cblxuLy8gU2ltcGxlIHByb21wdCBoZWxwZXIgdXNpbmcgcmVhZGxpbmVcbmFzeW5jIGZ1bmN0aW9uIHByb21wdChxdWVzdGlvbjogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZWFkbGluZSA9IGF3YWl0IGltcG9ydCgncmVhZGxpbmUnKVxuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgfSlcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0SGludCA9IGRlZmF1bHRWYWx1ZSA/IGAgKCR7ZGVmYXVsdFZhbHVlfSlgIDogJydcbiAgICBybC5xdWVzdGlvbihgJHtxdWVzdGlvbn0ke2RlZmF1bHRIaW50fTogYCwgKGFuc3dlcikgPT4ge1xuICAgICAgcmwuY2xvc2UoKVxuICAgICAgcmVzb2x2ZShhbnN3ZXIudHJpbSgpIHx8IGRlZmF1bHRWYWx1ZSB8fCAnJylcbiAgICB9KVxuICB9KVxufVxuXG4vKipcbiAqIEJhc2ljIHN1YmRvbWFpbiBmb3JtYXQgdmFsaWRhdGlvbiAoc2VydmVyIGRvZXMgZnVsbCB2YWxpZGF0aW9uKVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3ViZG9tYWluRm9ybWF0KHN1YmRvbWFpbjogc3RyaW5nKTogeyB2YWxpZDogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfSB7XG4gIGlmICghc3ViZG9tYWluKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBpcyByZXF1aXJlZCcgfVxuICB9XG4gIFxuICBpZiAoc3ViZG9tYWluLmxlbmd0aCA8IDMpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIG11c3QgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzJyB9XG4gIH1cbiAgXG4gIGlmIChzdWJkb21haW4ubGVuZ3RoID4gNjMpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIG11c3QgYmUgNjMgY2hhcmFjdGVycyBvciBsZXNzJyB9XG4gIH1cbiAgXG4gIGlmICghL15bYS16MC05XShbYS16MC05LV0qW2EtejAtOV0pPyQvLnRlc3Qoc3ViZG9tYWluKSkge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gbXVzdCBzdGFydCBhbmQgZW5kIHdpdGggYWxwaGFudW1lcmljLCBjYW4gY29udGFpbiBoeXBoZW5zJyB9XG4gIH1cbiAgXG4gIGlmICgvLS0vLnRlc3Qoc3ViZG9tYWluKSkge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gY2Fubm90IGNvbnRhaW4gY29uc2VjdXRpdmUgaHlwaGVucycgfVxuICB9XG4gIFxuICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9XG59XG5cbi8qKlxuICogQ2hlY2sgc3ViZG9tYWluIGF2YWlsYWJpbGl0eSB2aWEgQVBJIChhbHNvIHZhbGlkYXRlcyBhZ2FpbnN0IHNlcnZlciBibGFja2xpc3QpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrU3ViZG9tYWluQXZhaWxhYmlsaXR5KFxuICBzdWJkb21haW46IHN0cmluZyxcbiAgYXBpVXJsOiBzdHJpbmdcbik6IFByb21pc2U8Q2hlY2tTdWJkb21haW5SZXNwb25zZT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YXBpVXJsfS9hcGkvc3ViZG9tYWlucy9jaGVja2AsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc3ViZG9tYWluIH0pLFxuICAgIH0pXG4gICAgXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIENoZWNrU3ViZG9tYWluUmVzcG9uc2VcbiAgICByZXR1cm4gcmVzdWx0XG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIEFQSSBpcyB1bmF2YWlsYWJsZSwgYWxsb3cgcHJvY2VlZGluZyAod2lsbCBmYWlsIGF0IHJlZ2lzdHJhdGlvbiBpZiBpbnZhbGlkKVxuICAgIHJldHVybiB7IGF2YWlsYWJsZTogdHJ1ZSB9XG4gIH1cbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIGEgRGV2RG9jIHByb2plY3Qgd2l0aCAuZGV2ZG9jLmpzb25cbiAqIE5vdGU6IFN1YmRvbWFpbiBpcyBvbmx5IHJlc2VydmVkIHdoZW4gZG9jdW1lbnRhdGlvbiBpcyBhY3R1YWxseSBkZXBsb3llZCAoZGV2ZG9jIGRlcGxveSlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXQob3B0aW9uczogSW5pdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJvamVjdFJvb3QgPSBwcm9jZXNzLmN3ZCgpXG4gIGNvbnN0IGFwaVVybCA9IG9wdGlvbnMudXJsIHx8IHByb2Nlc3MuZW52LkRFVkRPQ19BUElfVVJMIHx8IERFRkFVTFRfQVBJX1VSTFxuICBcbiAgbG9nZ2VyLmluZm8oJ0luaXRpYWxpemluZyBEZXZEb2MgcHJvamVjdC4uLlxcbicpXG4gIFxuICAvLyBDaGVjayBmb3IgZG9jcy5qc29uXG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICdkb2NzLmpzb24nKVxuICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnUGF0aCkpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ2RvY3MuanNvbiBub3QgZm91bmQgaW4gY3VycmVudCBkaXJlY3RvcnknKVxuICAgIGxvZ2dlci5pbmZvKCdNYWtlIHN1cmUgeW91IGFyZSBpbiBhIERldkRvYyBkb2N1bWVudGF0aW9uIHByb2plY3QgZGlyZWN0b3J5JylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgLy8gQ2hlY2sgaWYgLmRldmRvYy5qc29uIGFscmVhZHkgZXhpc3RzIHdpdGggQVBJIGtleSAoYWxyZWFkeSBkZXBsb3llZClcbiAgY29uc3QgZGV2ZG9jQ29uZmlnUGF0aCA9IHBhdGguam9pbihwcm9qZWN0Um9vdCwgJy5kZXZkb2MuanNvbicpXG4gIGlmIChmcy5leGlzdHNTeW5jKGRldmRvY0NvbmZpZ1BhdGgpICYmICFvcHRpb25zLmZvcmNlKSB7XG4gICAgY29uc3QgZXhpc3RpbmdDb25maWcgPSBmcy5yZWFkSnNvblN5bmMoZGV2ZG9jQ29uZmlnUGF0aCkgYXMgRGV2RG9jQ29uZmlnXG4gICAgaWYgKGV4aXN0aW5nQ29uZmlnLmFwaUtleSkge1xuICAgICAgbG9nZ2VyLndhcm4oJy5kZXZkb2MuanNvbiBhbHJlYWR5IGV4aXN0cyB3aXRoIEFQSSBrZXkgKHByb2plY3QgaXMgZGVwbG95ZWQpJylcbiAgICAgIGxvZ2dlci5pbmZvKCdVc2UgLS1mb3JjZSB0byBvdmVyd3JpdGUgYW5kIGNyZWF0ZSBhIG5ldyBwcm9qZWN0JylcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cbiAgfVxuICBcbiAgLy8gTG9hZCBkb2NzLmpzb24gdG8gZ2V0IHByb2plY3QgbmFtZVxuICBsZXQgcHJvamVjdE5hbWUgPSAnTXkgRG9jdW1lbnRhdGlvbidcbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCBsb2FkQ29uZmlnKHByb2plY3RSb290KVxuICAgIHByb2plY3ROYW1lID0gY29uZmlnLm5hbWUgfHwgcHJvamVjdE5hbWVcbiAgfSBjYXRjaCB7XG4gICAgLy8gVXNlIGRlZmF1bHQgbmFtZVxuICB9XG4gIFxuICAvLyBHZW5lcmF0ZSBzbHVnIGZyb20gcHJvamVjdCBuYW1lIG9yIHVzZSBwcm92aWRlZCBzbHVnXG4gIGNvbnN0IHNsdWcgPSBvcHRpb25zLnNsdWcgfHwgZ2VuZXJhdGVTbHVnKHByb2plY3ROYW1lKVxuICBcbiAgLy8gR2V0IHN1YmRvbWFpbiAtIHByb21wdCBpZiBub3QgcHJvdmlkZWRcbiAgbGV0IHN1YmRvbWFpbiA9IG9wdGlvbnMuc3ViZG9tYWluXG4gIFxuICBpZiAoIXN1YmRvbWFpbikge1xuICAgIGNvbnN0IHN1Z2dlc3RlZFN1YmRvbWFpbiA9IHNsdWdcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBzdWJkb21haW4gPSBhd2FpdCBwcm9tcHQoYEVudGVyIHN1YmRvbWFpbiBmb3IgJHtzdWdnZXN0ZWRTdWJkb21haW59LmRldmRvYy5zaGAsIHN1Z2dlc3RlZFN1YmRvbWFpbilcbiAgICBzdWJkb21haW4gPSBzdWJkb21haW4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOS1dL2csICctJykucmVwbGFjZSgvXi18LSQvZywgJycpXG4gIH1cbiAgXG4gIC8vIFZhbGlkYXRlIHN1YmRvbWFpbiBmb3JtYXQgbG9jYWxseVxuICBjb25zdCBmb3JtYXRDaGVjayA9IGlzVmFsaWRTdWJkb21haW5Gb3JtYXQoc3ViZG9tYWluKVxuICBpZiAoIWZvcm1hdENoZWNrLnZhbGlkKSB7XG4gICAgbG9nZ2VyLmVycm9yKGZvcm1hdENoZWNrLmVycm9yISlcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgLy8gQ2hlY2sgc3ViZG9tYWluIGF2YWlsYWJpbGl0eSB2aWEgQVBJIChzZXJ2ZXIgdmFsaWRhdGVzIGJsYWNrbGlzdClcbiAgLy8gTm90ZTogVGhpcyBvbmx5IGNoZWNrcyBhdmFpbGFiaWxpdHksIGl0IGRvZXMgTk9UIHJlc2VydmUgdGhlIHN1YmRvbWFpblxuICBsb2dnZXIuaW5mbyhgQ2hlY2tpbmcgaWYgJHtzdWJkb21haW59LmRldmRvYy5zaCBpcyBhdmFpbGFibGUuLi5gKVxuICBjb25zdCBhdmFpbGFiaWxpdHkgPSBhd2FpdCBjaGVja1N1YmRvbWFpbkF2YWlsYWJpbGl0eShzdWJkb21haW4sIGFwaVVybClcbiAgXG4gIGlmICghYXZhaWxhYmlsaXR5LmF2YWlsYWJsZSkge1xuICAgIGxvZ2dlci5lcnJvcihhdmFpbGFiaWxpdHkuZXJyb3IgfHwgYFN1YmRvbWFpbiBcIiR7c3ViZG9tYWlufVwiIGlzIG5vdCBhdmFpbGFibGVgKVxuICAgIGlmIChhdmFpbGFiaWxpdHkuc3VnZ2VzdGlvbikge1xuICAgICAgbG9nZ2VyLmluZm8oYFN1Z2dlc3Rpb246IFRyeSBcIiR7YXZhaWxhYmlsaXR5LnN1Z2dlc3Rpb259XCJgKVxuICAgIH1cbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgbG9nZ2VyLnN1Y2Nlc3MoYOKckyAke3N1YmRvbWFpbn0uZGV2ZG9jLnNoIGlzIGF2YWlsYWJsZSFgKVxuICBjb25zb2xlLmxvZygnJylcbiAgXG4gIC8vIENyZWF0ZSAuZGV2ZG9jLmpzb24gd2l0aCBzdWJkb21haW4gKGJ1dCBOTyBBUEkga2V5IC0gbm90IHJlZ2lzdGVyZWQgeWV0KVxuICAvLyBUaGUgc3ViZG9tYWluIHdpbGwgb25seSBiZSByZXNlcnZlZCB3aGVuIHRoZSB1c2VyIGFjdHVhbGx5IGRlcGxveXNcbiAgY29uc3QgcHJvamVjdElkID0gYCR7c2x1Z30tJHtnZW5lcmF0ZUlkKCl9YFxuICBjb25zdCBkZXZkb2NDb25maWc6IERldkRvY0NvbmZpZyA9IHtcbiAgICBwcm9qZWN0SWQsXG4gICAgbmFtZTogcHJvamVjdE5hbWUsXG4gICAgc2x1ZyxcbiAgICBzdWJkb21haW4sXG4gICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgLy8gTm90ZTogTm8gYXBpS2V5IC0gc3ViZG9tYWluIGlzIG5vdCByZXNlcnZlZCB1bnRpbCBkZXBsb3lcbiAgfVxuICBcbiAgZnMud3JpdGVKc29uU3luYyhkZXZkb2NDb25maWdQYXRoLCBkZXZkb2NDb25maWcsIHsgc3BhY2VzOiAyIH0pXG4gIFxuICBsb2dnZXIuc3VjY2Vzcygn4pyTIFByb2plY3QgaW5pdGlhbGl6ZWQnKVxuICBjb25zb2xlLmxvZygnJylcbiAgY29uc29sZS5sb2coJyAgU3ViZG9tYWluOicsIGAke3N1YmRvbWFpbn0uZGV2ZG9jLnNoYClcbiAgY29uc29sZS5sb2coJyAgU3RhdHVzOicsICdOb3QgeWV0IGRlcGxveWVkJylcbiAgY29uc29sZS5sb2coJycpXG4gIGxvZ2dlci5pbmZvKCdOb3RlOiBUaGUgc3ViZG9tYWluIGlzIG5vdCByZXNlcnZlZCB1bnRpbCB5b3UgZGVwbG95LicpXG4gIGxvZ2dlci5pbmZvKCdSdW4gXCJkZXZkb2MgZGVwbG95XCIgdG8gZGVwbG95IGFuZCBjbGFpbSB5b3VyIHN1YmRvbWFpbi4nKVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgVVJMLWZyaWVuZGx5IHNsdWcgZnJvbSBhIG5hbWVcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVTbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBuYW1lXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvW15hLXowLTldKy9nLCAnLScpXG4gICAgLnJlcGxhY2UoL14tfC0kL2csICcnKVxuICAgIC5zdWJzdHJpbmcoMCwgNTApXG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzaG9ydCByYW5kb20gSURcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVJZCgpOiBzdHJpbmcge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDgpXG59XG4iXX0=
package/dist/cli/index.js CHANGED
@@ -39,6 +39,8 @@ program
39
39
  .description('Start development server with hot reload')
40
40
  .option('-p, --port <port>', 'Port to run the server on', '3333')
41
41
  .option('-H, --host <host>', 'Host to bind the server to', 'localhost')
42
+ .option('-o, --open', 'Open browser automatically', true)
43
+ .option('--no-open', 'Do not open browser automatically')
42
44
  .action(dev_1.dev);
43
45
  program
44
46
  .command('build')
@@ -103,4 +105,4 @@ program
103
105
  .option('-k, --api-key <key>', 'API key for authentication')
104
106
  .action(upload_1.upload);
105
107
  program.parse(process.argv);
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQW9DO0FBQ3BDLDhDQUEyQztBQUMzQywwQ0FBdUM7QUFDdkMsd0NBQXFDO0FBQ3JDLDRDQUF5QztBQUN6Qyw0Q0FBeUM7QUFDekMsNENBQXlDO0FBQ3pDLDhDQUEyQztBQUMzQywwQ0FBMEQ7QUFDMUQsOENBQTJDO0FBQzNDLDhDQUF1RDtBQUV2RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUVsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLG1CQUFPLEVBQUUsQ0FBQztBQUU5QixPQUFPO0tBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQztLQUNkLFdBQVcsQ0FBQyx3Q0FBd0MsQ0FBQztLQUNyRCxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRWhDLE9BQU87S0FDSixPQUFPLENBQUMsNEJBQTRCLENBQUM7S0FDckMsV0FBVyxDQUFDLHdDQUF3QyxDQUFDO0tBQ3JELE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSwyQ0FBMkMsQ0FBQztLQUM1RSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsbURBQW1ELENBQUM7S0FDMUYsTUFBTSxDQUFDLFVBQVUsRUFBRSx5QkFBeUIsQ0FBQztLQUM3QyxNQUFNLENBQUMsY0FBYyxFQUFFLDhCQUE4QixDQUFDO0tBQ3RELE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxzQ0FBc0MsQ0FBQztLQUNqRSxNQUFNLENBQUMsZUFBTSxDQUFDLENBQUM7QUFFbEIsT0FBTztLQUNKLE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDZixXQUFXLENBQUMsNENBQTRDLENBQUM7S0FDekQsTUFBTSxDQUFDLG1CQUFtQixFQUFFLGNBQWMsQ0FBQztLQUMzQyxNQUFNLENBQUMseUJBQXlCLEVBQUUsbURBQW1ELENBQUM7S0FDdEYsTUFBTSxDQUFDLGFBQWEsRUFBRSxpQ0FBaUMsQ0FBQztLQUN4RCxNQUFNLENBQUMsaUJBQWlCLEVBQUUsc0NBQXNDLENBQUM7S0FDakUsTUFBTSxDQUFDLFdBQUksQ0FBQyxDQUFDO0FBRWhCLE9BQU87S0FDSixPQUFPLENBQUMsS0FBSyxDQUFDO0tBQ2QsV0FBVyxDQUFDLDBDQUEwQyxDQUFDO0tBQ3ZELE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLENBQUM7S0FDaEUsTUFBTSxDQUFDLG1CQUFtQixFQUFFLDRCQUE0QixFQUFFLFdBQVcsQ0FBQztLQUN0RSxNQUFNLENBQUMsU0FBRyxDQUFDLENBQUM7QUFFZixPQUFPO0tBQ0osT0FBTyxDQUFDLE9BQU8sQ0FBQztLQUNoQixXQUFXLENBQUMsb0NBQW9DLENBQUM7S0FDakQsTUFBTSxDQUFDLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sQ0FBQztLQUN4RCxNQUFNLENBQUMsYUFBSyxDQUFDLENBQUM7QUFFakIsT0FBTztLQUNKLE9BQU8sQ0FBQyxPQUFPLENBQUM7S0FDaEIsV0FBVyxDQUFDLHlCQUF5QixDQUFDO0tBQ3RDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLENBQUM7S0FDaEUsTUFBTSxDQUFDLGFBQUssQ0FBQyxDQUFDO0FBRWpCLE9BQU87S0FDSixPQUFPLENBQUMsT0FBTyxDQUFDO0tBQ2hCLFdBQVcsQ0FBQyxrQ0FBa0MsQ0FBQztLQUMvQyxNQUFNLENBQUMsYUFBSyxDQUFDLENBQUM7QUFFakIsT0FBTztLQUNKLE9BQU8sQ0FBQyxRQUFRLENBQUM7S0FDakIsV0FBVyxDQUFDLHlDQUF5QyxDQUFDO0tBQ3RELE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxzQ0FBc0MsQ0FBQztLQUNqRSxNQUFNLENBQUMscUJBQXFCLEVBQUUsNEJBQTRCLENBQUM7S0FDM0QsTUFBTSxDQUFDLGVBQU0sQ0FBQyxDQUFDO0FBRWxCLGtCQUFrQjtBQUNsQixNQUFNLE9BQU8sR0FBRyxPQUFPO0tBQ3BCLE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDZixXQUFXLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUVuRCxPQUFPO0tBQ0osT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNmLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQztLQUN4QyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0tBQ3BDLE1BQU0sQ0FBQyxlQUFRLENBQUMsQ0FBQztBQUVwQixPQUFPO0tBQ0osT0FBTyxDQUFDLFlBQVksQ0FBQztLQUNyQixXQUFXLENBQUMsa0RBQWtELENBQUM7S0FDL0QsTUFBTSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztLQUNwQyxNQUFNLENBQUMsb0JBQWEsQ0FBQyxDQUFDO0FBRXpCLE9BQU87S0FDSixPQUFPLENBQUMsUUFBUSxDQUFDO0tBQ2pCLFdBQVcsQ0FBQyxrQ0FBa0MsQ0FBQztLQUMvQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0tBQ3BDLE1BQU0sQ0FBQyxlQUFNLENBQUMsQ0FBQztBQUVsQixvQkFBb0I7QUFDcEIsTUFBTSxTQUFTLEdBQUcsT0FBTztLQUN0QixPQUFPLENBQUMsUUFBUSxDQUFDO0tBQ2pCLFdBQVcsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0FBRXhELFNBQVM7S0FDTixPQUFPLENBQUMsbUJBQW1CLENBQUM7S0FDNUIsV0FBVyxDQUFDLDhDQUE4QyxDQUFDO0tBQzNELE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUM7S0FDcEMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDRCQUE0QixDQUFDO0tBQzNELE1BQU0sQ0FBQyxlQUFNLENBQUMsQ0FBQztBQUVsQixTQUFTO0tBQ04sT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNmLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQztLQUNuQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0tBQ3BDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSw0QkFBNEIsQ0FBQztLQUMzRCxNQUFNLENBQUMsbUJBQVUsQ0FBQyxDQUFDO0FBRXRCLHNCQUFzQjtBQUN0QixPQUFPO0tBQ0osT0FBTyxDQUFDLG1CQUFtQixDQUFDO0tBQzVCLFdBQVcsQ0FBQyxnRUFBZ0UsQ0FBQztLQUM3RSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0tBQ3BDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSw0QkFBNEIsQ0FBQztLQUMzRCxNQUFNLENBQUMsZUFBTSxDQUFDLENBQUM7QUFFbEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGNyZWF0ZSB9IGZyb20gJy4vY29tbWFuZHMvY3JlYXRlJztcbmltcG9ydCB7IGluaXQgfSBmcm9tICcuL2NvbW1hbmRzL2luaXQnO1xuaW1wb3J0IHsgZGV2IH0gZnJvbSAnLi9jb21tYW5kcy9kZXYnO1xuaW1wb3J0IHsgYnVpbGQgfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkJztcbmltcG9ydCB7IHN0YXJ0IH0gZnJvbSAnLi9jb21tYW5kcy9zdGFydCc7XG5pbXBvcnQgeyBjaGVjayB9IGZyb20gJy4vY29tbWFuZHMvY2hlY2snO1xuaW1wb3J0IHsgZGVwbG95IH0gZnJvbSAnLi9jb21tYW5kcy9kZXBsb3knO1xuaW1wb3J0IHsgbGlzdEtleXMsIHJlZ2VuZXJhdGVLZXkgfSBmcm9tICcuL2NvbW1hbmRzL2tleXMnO1xuaW1wb3J0IHsgd2hvYW1pIH0gZnJvbSAnLi9jb21tYW5kcy93aG9hbWknO1xuaW1wb3J0IHsgdXBsb2FkLCBsaXN0QXNzZXRzIH0gZnJvbSAnLi9jb21tYW5kcy91cGxvYWQnO1xuXG5jb25zdCBwYWNrYWdlSnNvbiA9IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpO1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbVxuICAubmFtZSgnZGV2ZG9jJylcbiAgLmRlc2NyaXB0aW9uKCdEb2N1bWVudGF0aW9uIGZyYW1ld29yayBmb3IgZGV2ZWxvcGVycycpXG4gIC52ZXJzaW9uKHBhY2thZ2VKc29uLnZlcnNpb24pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjcmVhdGUgW3Byb2plY3QtZGlyZWN0b3J5XScpXG4gIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgbmV3IERldkRvYyBkb2N1bWVudGF0aW9uIHNpdGUnKVxuICAub3B0aW9uKCctdCwgLS10ZW1wbGF0ZSA8dHlwZT4nLCAnVGVtcGxhdGUgdG8gdXNlIChiYXNpYywgb3BlbmFwaSwgZ3JhcGhxbCknKVxuICAub3B0aW9uKCctcywgLS1zdWJkb21haW4gPHN1YmRvbWFpbj4nLCAnU3ViZG9tYWluIGZvciB5b3VyIGRvY3MgKGUuZy4sIG15LWRvY3MuZGV2ZG9jLnNoKScpXG4gIC5vcHRpb24oJy0tbm8tZ2l0JywgJ1NraXAgZ2l0IGluaXRpYWxpemF0aW9uJylcbiAgLm9wdGlvbignLS1uby1pbnN0YWxsJywgJ1NraXAgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMnKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCAoZGVmYXVsdDogaHR0cHM6Ly9kZXZkb2Muc2gpJylcbiAgLmFjdGlvbihjcmVhdGUpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdpbml0JylcbiAgLmRlc2NyaXB0aW9uKCdJbml0aWFsaXplL3JlZ2lzdGVyIHByb2plY3Qgd2l0aCBCcmFpbmZpc2gnKVxuICAub3B0aW9uKCctcywgLS1zbHVnIDxzbHVnPicsICdQcm9qZWN0IHNsdWcnKVxuICAub3B0aW9uKCctLXN1YmRvbWFpbiA8c3ViZG9tYWluPicsICdTdWJkb21haW4gZm9yIHlvdXIgZG9jcyAoZS5nLiwgbXktZG9jcy5kZXZkb2Muc2gpJylcbiAgLm9wdGlvbignLWYsIC0tZm9yY2UnLCAnT3ZlcndyaXRlIGV4aXN0aW5nIC5kZXZkb2MuanNvbicpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMIChkZWZhdWx0OiBodHRwczovL2RldmRvYy5zaCknKVxuICAuYWN0aW9uKGluaXQpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdkZXYnKVxuICAuZGVzY3JpcHRpb24oJ1N0YXJ0IGRldmVsb3BtZW50IHNlcnZlciB3aXRoIGhvdCByZWxvYWQnKVxuICAub3B0aW9uKCctcCwgLS1wb3J0IDxwb3J0PicsICdQb3J0IHRvIHJ1biB0aGUgc2VydmVyIG9uJywgJzMzMzMnKVxuICAub3B0aW9uKCctSCwgLS1ob3N0IDxob3N0PicsICdIb3N0IHRvIGJpbmQgdGhlIHNlcnZlciB0bycsICdsb2NhbGhvc3QnKVxuICAuYWN0aW9uKGRldik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2J1aWxkJylcbiAgLmRlc2NyaXB0aW9uKCdCdWlsZCBkb2N1bWVudGF0aW9uIGZvciBwcm9kdWN0aW9uJylcbiAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxkaXI+JywgJ091dHB1dCBkaXJlY3RvcnknLCAnZGlzdCcpXG4gIC5hY3Rpb24oYnVpbGQpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdzdGFydCcpXG4gIC5kZXNjcmlwdGlvbignU3RhcnQgcHJvZHVjdGlvbiBzZXJ2ZXInKVxuICAub3B0aW9uKCctcCwgLS1wb3J0IDxwb3J0PicsICdQb3J0IHRvIHJ1biB0aGUgc2VydmVyIG9uJywgJzMwMDAnKVxuICAuYWN0aW9uKHN0YXJ0KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2snKVxuICAuZGVzY3JpcHRpb24oJ1ZhbGlkYXRlIGRvY3MuanNvbiBhbmQgTURYIGZpbGVzJylcbiAgLmFjdGlvbihjaGVjayk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2RlcGxveScpXG4gIC5kZXNjcmlwdGlvbignRGVwbG95IGRvY3VtZW50YXRpb24gdG8gRGV2RG9jIHBsYXRmb3JtJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwgKGRlZmF1bHQ6IGh0dHBzOi8vZGV2ZG9jLnNoKScpXG4gIC5vcHRpb24oJy1rLCAtLWFwaS1rZXkgPGtleT4nLCAnQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24nKVxuICAuYWN0aW9uKGRlcGxveSk7XG5cbi8vIEtleXMgbWFuYWdlbWVudFxuY29uc3Qga2V5c0NtZCA9IHByb2dyYW1cbiAgLmNvbW1hbmQoJ2tleXMnKVxuICAuZGVzY3JpcHRpb24oJ01hbmFnZSBBUEkga2V5cyBmb3IgeW91ciBwcm9qZWN0Jyk7XG5cbmtleXNDbWRcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgY3VycmVudCBBUEkga2V5IGluZm8nKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5hY3Rpb24obGlzdEtleXMpO1xuXG5rZXlzQ21kXG4gIC5jb21tYW5kKCdyZWdlbmVyYXRlJylcbiAgLmRlc2NyaXB0aW9uKCdHZW5lcmF0ZSBhIG5ldyBBUEkga2V5IChpbnZhbGlkYXRlcyB0aGUgb2xkIG9uZSknKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5hY3Rpb24ocmVnZW5lcmF0ZUtleSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3dob2FtaScpXG4gIC5kZXNjcmlwdGlvbignU2hvdyBjdXJyZW50IHByb2plY3QgaW5mb3JtYXRpb24nKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5hY3Rpb24od2hvYW1pKTtcblxuLy8gQXNzZXRzIG1hbmFnZW1lbnRcbmNvbnN0IGFzc2V0c0NtZCA9IHByb2dyYW1cbiAgLmNvbW1hbmQoJ2Fzc2V0cycpXG4gIC5kZXNjcmlwdGlvbignTWFuYWdlIHByb2plY3QgYXNzZXRzIChpbWFnZXMsIGZpbGVzKScpO1xuXG5hc3NldHNDbWRcbiAgLmNvbW1hbmQoJ3VwbG9hZCA8ZmlsZXMuLi4+JylcbiAgLmRlc2NyaXB0aW9uKCdVcGxvYWQgYXNzZXRzIHRvIHN0b3JhZ2UgKG1heCAyNU1CIHBlciBmaWxlKScpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24odXBsb2FkKTtcblxuYXNzZXRzQ21kXG4gIC5jb21tYW5kKCdsaXN0JylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IHVwbG9hZGVkIGFzc2V0cycpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24obGlzdEFzc2V0cyk7XG5cbi8vIFNob3J0Y3V0IGZvciB1cGxvYWRcbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwbG9hZCA8ZmlsZXMuLi4+JylcbiAgLmRlc2NyaXB0aW9uKCdVcGxvYWQgYXNzZXRzIHRvIHN0b3JhZ2UgKHNob3J0Y3V0IGZvciBcImRldmRvYyBhc3NldHMgdXBsb2FkXCIpJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAub3B0aW9uKCctaywgLS1hcGkta2V5IDxrZXk+JywgJ0FQSSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uJylcbiAgLmFjdGlvbih1cGxvYWQpO1xuXG5wcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndik7XG4iXX0=
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQW9DO0FBQ3BDLDhDQUEyQztBQUMzQywwQ0FBdUM7QUFDdkMsd0NBQXFDO0FBQ3JDLDRDQUF5QztBQUN6Qyw0Q0FBeUM7QUFDekMsNENBQXlDO0FBQ3pDLDhDQUEyQztBQUMzQywwQ0FBMEQ7QUFDMUQsOENBQTJDO0FBQzNDLDhDQUF1RDtBQUV2RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUVsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLG1CQUFPLEVBQUUsQ0FBQztBQUU5QixPQUFPO0tBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQztLQUNkLFdBQVcsQ0FBQyx3Q0FBd0MsQ0FBQztLQUNyRCxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRWhDLE9BQU87S0FDSixPQUFPLENBQUMsNEJBQTRCLENBQUM7S0FDckMsV0FBVyxDQUFDLHdDQUF3QyxDQUFDO0tBQ3JELE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSwyQ0FBMkMsQ0FBQztLQUM1RSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsbURBQW1ELENBQUM7S0FDMUYsTUFBTSxDQUFDLFVBQVUsRUFBRSx5QkFBeUIsQ0FBQztLQUM3QyxNQUFNLENBQUMsY0FBYyxFQUFFLDhCQUE4QixDQUFDO0tBQ3RELE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxzQ0FBc0MsQ0FBQztLQUNqRSxNQUFNLENBQUMsZUFBTSxDQUFDLENBQUM7QUFFbEIsT0FBTztLQUNKLE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDZixXQUFXLENBQUMsNENBQTRDLENBQUM7S0FDekQsTUFBTSxDQUFDLG1CQUFtQixFQUFFLGNBQWMsQ0FBQztLQUMzQyxNQUFNLENBQUMseUJBQXlCLEVBQUUsbURBQW1ELENBQUM7S0FDdEYsTUFBTSxDQUFDLGFBQWEs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cEMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDRCQUE0QixDQUFDO0tBQzNELE1BQU0sQ0FBQyxtQkFBVSxDQUFDLENBQUM7QUFFdEIsc0JBQXNCO0FBQ3RCLE9BQU87S0FDSixPQUFPLENBQUMsbUJBQW1CLENBQUM7S0FDNUIsV0FBVyxDQUFDLGdFQUFnRSxDQUFDO0tBQzdFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUM7S0FDcEMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDRCQUE0QixDQUFDO0tBQzNELE1BQU0sQ0FBQyxlQUFNLENBQUMsQ0FBQztBQUVsQixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgY3JlYXRlIH0gZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUnO1xuaW1wb3J0IHsgaW5pdCB9IGZyb20gJy4vY29tbWFuZHMvaW5pdCc7XG5pbXBvcnQgeyBkZXYgfSBmcm9tICcuL2NvbW1hbmRzL2Rldic7XG5pbXBvcnQgeyBidWlsZCB9IGZyb20gJy4vY29tbWFuZHMvYnVpbGQnO1xuaW1wb3J0IHsgc3RhcnQgfSBmcm9tICcuL2NvbW1hbmRzL3N0YXJ0JztcbmltcG9ydCB7IGNoZWNrIH0gZnJvbSAnLi9jb21tYW5kcy9jaGVjayc7XG5pbXBvcnQgeyBkZXBsb3kgfSBmcm9tICcuL2NvbW1hbmRzL2RlcGxveSc7XG5pbXBvcnQgeyBsaXN0S2V5cywgcmVnZW5lcmF0ZUtleSB9IGZyb20gJy4vY29tbWFuZHMva2V5cyc7XG5pbXBvcnQgeyB3aG9hbWkgfSBmcm9tICcuL2NvbW1hbmRzL3dob2FtaSc7XG5pbXBvcnQgeyB1cGxvYWQsIGxpc3RBc3NldHMgfSBmcm9tICcuL2NvbW1hbmRzL3VwbG9hZCc7XG5cbmNvbnN0IHBhY2thZ2VKc29uID0gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJyk7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG4gIC5uYW1lKCdkZXZkb2MnKVxuICAuZGVzY3JpcHRpb24oJ0RvY3VtZW50YXRpb24gZnJhbWV3b3JrIGZvciBkZXZlbG9wZXJzJylcbiAgLnZlcnNpb24ocGFja2FnZUpzb24udmVyc2lvbik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2NyZWF0ZSBbcHJvamVjdC1kaXJlY3RvcnldJylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgRGV2RG9jIGRvY3VtZW50YXRpb24gc2l0ZScpXG4gIC5vcHRpb24oJy10LCAtLXRlbXBsYXRlIDx0eXBlPicsICdUZW1wbGF0ZSB0byB1c2UgKGJhc2ljLCBvcGVuYXBpLCBncmFwaHFsKScpXG4gIC5vcHRpb24oJy1zLCAtLXN1YmRvbWFpbiA8c3ViZG9tYWluPicsICdTdWJkb21haW4gZm9yIHlvdXIgZG9jcyAoZS5nLiwgbXktZG9jcy5kZXZkb2Muc2gpJylcbiAgLm9wdGlvbignLS1uby1naXQnLCAnU2tpcCBnaXQgaW5pdGlhbGl6YXRpb24nKVxuICAub3B0aW9uKCctLW5vLWluc3RhbGwnLCAnU2tpcCBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcycpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMIChkZWZhdWx0OiBodHRwczovL2RldmRvYy5zaCknKVxuICAuYWN0aW9uKGNyZWF0ZSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2luaXQnKVxuICAuZGVzY3JpcHRpb24oJ0luaXRpYWxpemUvcmVnaXN0ZXIgcHJvamVjdCB3aXRoIEJyYWluZmlzaCcpXG4gIC5vcHRpb24oJy1zLCAtLXNsdWcgPHNsdWc+JywgJ1Byb2plY3Qgc2x1ZycpXG4gIC5vcHRpb24oJy0tc3ViZG9tYWluIDxzdWJkb21haW4+JywgJ1N1YmRvbWFpbiBmb3IgeW91ciBkb2NzIChlLmcuLCBteS1kb2NzLmRldmRvYy5zaCknKVxuICAub3B0aW9uKCctZiwgLS1mb3JjZScsICdPdmVyd3JpdGUgZXhpc3RpbmcgLmRldmRvYy5qc29uJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwgKGRlZmF1bHQ6IGh0dHBzOi8vZGV2ZG9jLnNoKScpXG4gIC5hY3Rpb24oaW5pdCk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2RldicpXG4gIC5kZXNjcmlwdGlvbignU3RhcnQgZGV2ZWxvcG1lbnQgc2VydmVyIHdpdGggaG90IHJlbG9hZCcpXG4gIC5vcHRpb24oJy1wLCAtLXBvcnQgPHBvcnQ+JywgJ1BvcnQgdG8gcnVuIHRoZSBzZXJ2ZXIgb24nLCAnMzMzMycpXG4gIC5vcHRpb24oJy1ILCAtLWhvc3QgPGhvc3Q+JywgJ0hvc3QgdG8gYmluZCB0aGUgc2VydmVyIHRvJywgJ2xvY2FsaG9zdCcpXG4gIC5vcHRpb24oJy1vLCAtLW9wZW4nLCAnT3BlbiBicm93c2VyIGF1dG9tYXRpY2FsbHknLCB0cnVlKVxuICAub3B0aW9uKCctLW5vLW9wZW4nLCAnRG8gbm90IG9wZW4gYnJvd3NlciBhdXRvbWF0aWNhbGx5JylcbiAgLmFjdGlvbihkZXYpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdidWlsZCcpXG4gIC5kZXNjcmlwdGlvbignQnVpbGQgZG9jdW1lbnRhdGlvbiBmb3IgcHJvZHVjdGlvbicpXG4gIC5vcHRpb24oJy1vLCAtLW91dHB1dCA8ZGlyPicsICdPdXRwdXQgZGlyZWN0b3J5JywgJ2Rpc3QnKVxuICAuYWN0aW9uKGJ1aWxkKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnc3RhcnQnKVxuICAuZGVzY3JpcHRpb24oJ1N0YXJ0IHByb2R1Y3Rpb24gc2VydmVyJylcbiAgLm9wdGlvbignLXAsIC0tcG9ydCA8cG9ydD4nLCAnUG9ydCB0byBydW4gdGhlIHNlcnZlciBvbicsICczMDAwJylcbiAgLmFjdGlvbihzdGFydCk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2NoZWNrJylcbiAgLmRlc2NyaXB0aW9uKCdWYWxpZGF0ZSBkb2NzLmpzb24gYW5kIE1EWCBmaWxlcycpXG4gIC5hY3Rpb24oY2hlY2spO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdkZXBsb3knKVxuICAuZGVzY3JpcHRpb24oJ0RlcGxveSBkb2N1bWVudGF0aW9uIHRvIERldkRvYyBwbGF0Zm9ybScpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMIChkZWZhdWx0OiBodHRwczovL2RldmRvYy5zaCknKVxuICAub3B0aW9uKCctaywgLS1hcGkta2V5IDxrZXk+JywgJ0FQSSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uJylcbiAgLmFjdGlvbihkZXBsb3kpO1xuXG4vLyBLZXlzIG1hbmFnZW1lbnRcbmNvbnN0IGtleXNDbWQgPSBwcm9ncmFtXG4gIC5jb21tYW5kKCdrZXlzJylcbiAgLmRlc2NyaXB0aW9uKCdNYW5hZ2UgQVBJIGtleXMgZm9yIHlvdXIgcHJvamVjdCcpO1xuXG5rZXlzQ21kXG4gIC5jb21tYW5kKCdsaXN0JylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IGN1cnJlbnQgQVBJIGtleSBpbmZvJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAuYWN0aW9uKGxpc3RLZXlzKTtcblxua2V5c0NtZFxuICAuY29tbWFuZCgncmVnZW5lcmF0ZScpXG4gIC5kZXNjcmlwdGlvbignR2VuZXJhdGUgYSBuZXcgQVBJIGtleSAoaW52YWxpZGF0ZXMgdGhlIG9sZCBvbmUpJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAuYWN0aW9uKHJlZ2VuZXJhdGVLZXkpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd3aG9hbWknKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgY3VycmVudCBwcm9qZWN0IGluZm9ybWF0aW9uJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAuYWN0aW9uKHdob2FtaSk7XG5cbi8vIEFzc2V0cyBtYW5hZ2VtZW50XG5jb25zdCBhc3NldHNDbWQgPSBwcm9ncmFtXG4gIC5jb21tYW5kKCdhc3NldHMnKVxuICAuZGVzY3JpcHRpb24oJ01hbmFnZSBwcm9qZWN0IGFzc2V0cyAoaW1hZ2VzLCBmaWxlcyknKTtcblxuYXNzZXRzQ21kXG4gIC5jb21tYW5kKCd1cGxvYWQgPGZpbGVzLi4uPicpXG4gIC5kZXNjcmlwdGlvbignVXBsb2FkIGFzc2V0cyB0byBzdG9yYWdlIChtYXggMjVNQiBwZXIgZmlsZSknKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5vcHRpb24oJy1rLCAtLWFwaS1rZXkgPGtleT4nLCAnQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24nKVxuICAuYWN0aW9uKHVwbG9hZCk7XG5cbmFzc2V0c0NtZFxuICAuY29tbWFuZCgnbGlzdCcpXG4gIC5kZXNjcmlwdGlvbignTGlzdCB1cGxvYWRlZCBhc3NldHMnKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5vcHRpb24oJy1rLCAtLWFwaS1rZXkgPGtleT4nLCAnQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24nKVxuICAuYWN0aW9uKGxpc3RBc3NldHMpO1xuXG4vLyBTaG9ydGN1dCBmb3IgdXBsb2FkXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd1cGxvYWQgPGZpbGVzLi4uPicpXG4gIC5kZXNjcmlwdGlvbignVXBsb2FkIGFzc2V0cyB0byBzdG9yYWdlIChzaG9ydGN1dCBmb3IgXCJkZXZkb2MgYXNzZXRzIHVwbG9hZFwiKScpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24odXBsb2FkKTtcblxucHJvZ3JhbS5wYXJzZShwcm9jZXNzLmFyZ3YpO1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brainfish-ai/devdoc",
3
- "version": "0.1.23",
3
+ "version": "0.1.24",
4
4
  "description": "Documentation framework for developers. Write docs in MDX, preview locally, deploy to Brainfish.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",