@brainfish-ai/devdoc 0.1.44 → 0.1.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -112,12 +112,16 @@ Your browser will automatically open to http://localhost:3333 with your docs.
112
112
 
113
113
  | Command | Description |
114
114
  | --------------- | ---------------------------------------- |
115
- | `devdoc create` | Create a new DevDoc documentation site |
115
+ | `devdoc create` | Create a new DevDoc documentation site |
116
116
  | `devdoc dev` | Start development server with hot reload |
117
117
  | `devdoc build` | Build documentation for production |
118
118
  | `devdoc start` | Start production server |
119
119
  | `devdoc check` | Validate configuration and MDX files |
120
- | `devdoc deploy` | Deploy documentation to DevDoc platform |
120
+ | `devdoc deploy` | Deploy documentation to DevDoc platform |
121
+ | `devdoc sdk` | Generate client SDKs from OpenAPI spec |
122
+ | `devdoc ai` | Set up AI agent configuration |
123
+ | `devdoc domain` | Manage custom domains |
124
+ | `devdoc keys` | Manage API keys |
121
125
 
122
126
  ### Command Options
123
127
 
@@ -182,6 +186,45 @@ Deploy your documentation to the DevDoc platform and get a public URL (e.g., `ht
182
186
 
183
187
  On first deploy, a `.devdoc.json` file is created to track your project. Subsequent deploys will update the same project.
184
188
 
189
+ **devdoc sdk**
190
+
191
+ Generate client SDKs from your OpenAPI specification:
192
+
193
+ ```bash
194
+ # Initialize SDK configuration
195
+ devdoc sdk init
196
+
197
+ # Generate SDKs for all configured languages
198
+ devdoc sdk generate
199
+
200
+ # Generate for a specific language
201
+ devdoc sdk generate --lang typescript
202
+
203
+ # Validate your OpenAPI spec
204
+ devdoc sdk validate
205
+
206
+ # List available generators
207
+ devdoc sdk list
208
+ ```
209
+
210
+ Supported languages:
211
+ - **Native (no Java required)**: TypeScript, Python, Go
212
+ - **OpenAPI Generator (requires Java)**: Java, C#, Ruby, PHP, Swift, Kotlin, Rust
213
+
214
+ SDK configuration is stored in `sdk.json`:
215
+
216
+ ```json
217
+ {
218
+ "openapi": "./api-reference/openapi.json",
219
+ "packageName": "my-api",
220
+ "output": "./sdks",
221
+ "languages": {
222
+ "typescript": { "enabled": true, "packageName": "@my-org/sdk" },
223
+ "python": { "enabled": true, "packageName": "my_sdk" }
224
+ }
225
+ }
226
+ ```
227
+
185
228
  ## Configuration (docs.json)
186
229
 
187
230
  ### Basic Configuration
@@ -606,20 +606,37 @@ async function create(projectDirectory, options) {
606
606
  else {
607
607
  console.log(' Status:', 'Internal docs (local development only)');
608
608
  }
609
- // Initialize git
609
+ // Initialize git (skip if already inside a git repository)
610
610
  if (options.git !== false) {
611
- logger_1.logger.info('Initializing git repository...');
611
+ // Check if we're inside an existing git repository
612
+ let isInsideGitRepo = false;
612
613
  try {
613
- (0, child_process_1.execSync)('git init', { cwd: resolvedPath, stdio: 'ignore' });
614
- (0, child_process_1.execSync)('git add -A', { cwd: resolvedPath, stdio: 'ignore' });
615
- (0, child_process_1.execSync)('git commit -m "Initial commit from devdoc create"', {
614
+ (0, child_process_1.execSync)('git rev-parse --is-inside-work-tree', {
616
615
  cwd: resolvedPath,
617
616
  stdio: 'ignore',
618
617
  });
619
- logger_1.logger.success('Git repository initialized');
618
+ isInsideGitRepo = true;
620
619
  }
621
620
  catch {
622
- logger_1.logger.warn('Could not initialize git repository');
621
+ // Not inside a git repo
622
+ }
623
+ if (isInsideGitRepo) {
624
+ logger_1.logger.info('Skipping git init (already inside a git repository)');
625
+ }
626
+ else {
627
+ logger_1.logger.info('Initializing git repository...');
628
+ try {
629
+ (0, child_process_1.execSync)('git init', { cwd: resolvedPath, stdio: 'ignore' });
630
+ (0, child_process_1.execSync)('git add -A', { cwd: resolvedPath, stdio: 'ignore' });
631
+ (0, child_process_1.execSync)('git commit -m "Initial commit from devdoc create"', {
632
+ cwd: resolvedPath,
633
+ stdio: 'ignore',
634
+ });
635
+ logger_1.logger.success('Git repository initialized');
636
+ }
637
+ catch {
638
+ logger_1.logger.warn('Could not initialize git repository');
639
+ }
623
640
  }
624
641
  }
625
642
  // Install dependencies
@@ -712,4 +729,4 @@ async function create(projectDirectory, options) {
712
729
  console.log('Happy documenting!');
713
730
  console.log();
714
731
  }
715
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy9jcmVhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpZEEsd0JBeVVDO0FBMXhCRCxpREFBeUM7QUFDekMsZ0RBQXdCO0FBQ3hCLHdEQUEwQjtBQUMxQixpQ0FBeUM7QUFDekMsK0NBQTRDO0FBQzVDLCtDQUFrRDtBQUVsRCx1REFBdUQ7QUFDdkQsTUFBTSxhQUFhLEdBQUcsOENBQThDLENBQUM7QUFFckUsdUZBQXVGO0FBQ3ZGLE1BQU0sU0FBUyxHQUFHO0lBQ2hCLEtBQUssRUFBRTtRQUNMLElBQUksRUFBRSxPQUFPO1FBQ2IsV0FBVyxFQUFFLGlEQUFpRDtRQUM5RCxLQUFLLEVBQUUsU0FBUztLQUNqQjtJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxTQUFTO1FBQ2YsV0FBVyxFQUFFLHlEQUF5RDtRQUN0RSxLQUFLLEVBQUUsU0FBUztLQUNqQjtJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxTQUFTO1FBQ2YsV0FBVyxFQUFFLDJDQUEyQztRQUN4RCxLQUFLLEVBQUUsU0FBUztLQUNqQjtDQUNPLENBQUM7QUFJWCxzQkFBc0I7QUFDdEIsTUFBTSxTQUFTLEdBQUc7SUFDaEIsTUFBTSxFQUFFO1FBQ04sSUFBSSxFQUFFLFFBQVE7UUFDZCxXQUFXLEVBQUUsdURBQXVEO0tBQ3JFO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFLFVBQVU7UUFDaEIsV0FBVyxFQUFFLDREQUE0RDtLQUMxRTtDQUNPLENBQUM7QUFtQlgsc0NBQXNDO0FBQ3RDLEtBQUssVUFBVSxNQUFNLENBQUMsUUFBZ0IsRUFBRSxZQUFxQjtJQUMzRCxNQUFNLFFBQVEsR0FBRyx3REFBYSxVQUFVLEdBQUMsQ0FBQztJQUMxQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxD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LENBQUMsQ0FBQztJQUM3RCxPQUFPLENBQUMsR0FBRyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDakUsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0lBQzdELE9BQU8sQ0FBQyxHQUFHLENBQUMscURBQXFELENBQUMsQ0FBQztJQUNuRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFZCxPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDcEQsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM3QixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFZCxpQ0FBaUM7SUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3JDLElBQUksTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxJQUFJLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0RBQStELENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRWQsbUJBQW1CO0lBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUM7Ozs7Ozs7R0FPWCxDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDbEMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgZG93bmxvYWRUZW1wbGF0ZSB9IGZyb20gJ2dpZ2V0JztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlcic7XG5pbXBvcnQgeyBERUZBVUxUX0FQSV9VUkwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuXG4vLyBSZW1vdGUgdGVtcGxhdGUgcmVwb3NpdG9yeSAtIHNpbmdsZSBzdGFydGVyIHRlbXBsYXRlXG5jb25zdCBURU1QTEFURV9SRVBPID0gJ2dpdGh1YjpicmFpbmZpc2gtYWkvZGV2ZG9jL3RlbXBsYXRlcy9zdGFydGVyJztcblxuLy8gQXZhaWxhYmxlIHRlbXBsYXRlIHR5cGVzIChhbGwgdXNlIHRoZSBzYW1lIHN0YXJ0ZXIgdGVtcGxhdGUsIGp1c3QgZGlmZmVyZW50IGNvbmZpZ3MpXG5jb25zdCBURU1QTEFURVMgPSB7XG4gIGJhc2ljOiB7XG4gICAgbmFtZTogJ0Jhc2ljJyxcbiAgICBkZXNjcmlwdGlvbjogJ1NpbXBsZSBkb2N1bWVudGF0aW9uIHNpdGUgd2l0aCBndWlkZXMgYW5kIHBhZ2VzJyxcbiAgICBjb2xvcjogJyMxMGI5ODEnLFxuICB9LFxuICBvcGVuYXBpOiB7XG4gICAgbmFtZTogJ09wZW5BUEknLFxuICAgIGRlc2NyaXB0aW9uOiAnRG9jdW1lbnRhdGlvbiB3aXRoIFJFU1QgQVBJIHJlZmVyZW5jZSAoT3BlbkFQSS9Td2FnZ2VyKScsXG4gICAgY29sb3I6ICcjMTBiOTgxJyxcbiAgfSxcbiAgZ3JhcGhxbDoge1xuICAgIG5hbWU6ICdHcmFwaFFMJyxcbiAgICBkZXNjcmlwdGlvbjogJ0RvY3VtZW50YXRpb24gd2l0aCBHcmFwaFFMIEFQSSBwbGF5Z3JvdW5kJyxcbiAgICBjb2xvcjogJyNlNTM1YWInLFxuICB9LFxufSBhcyBjb25zdDtcblxudHlwZSBUZW1wbGF0ZVR5cGUgPSBrZXlvZiB0eXBlb2YgVEVNUExBVEVTO1xuXG4vLyBEb2N1bWVudGF0aW9uIHR5cGVzXG5jb25zdCBET0NfVFlQRVMgPSB7XG4gIHB1YmxpYzoge1xuICAgIG5hbWU6ICdQdWJsaWMnLFxuICAgIGRlc2NyaXB0aW9uOiAnVXNlci1mYWNpbmcgZG9jcyB3aXRoIGN1c3RvbSBzdWJkb21haW4gYW5kIGRlcGxveW1lbnQnLFxuICB9LFxuICBpbnRlcm5hbDoge1xuICAgIG5hbWU6ICdJbnRlcm5hbCcsXG4gICAgZGVzY3JpcHRpb246ICdEZXZlbG9wZXIgZG9jcyBmb3IgbG9jYWwvcHJpdmF0ZSB1c2UgKG5vIHN1YmRvbWFpbiBuZWVkZWQpJyxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbnR5cGUgRG9jVHlwZSA9IGtleW9mIHR5cGVvZiBET0NfVFlQRVM7XG5cbmludGVyZmFjZSBDcmVhdGVPcHRpb25zIHtcbiAgdGVtcGxhdGU/OiBUZW1wbGF0ZVR5cGU7XG4gIGRvY1R5cGU/OiBEb2NUeXBlO1xuICBnaXQ/OiBib29sZWFuO1xuICBpbnN0YWxsPzogYm9vbGVhbjtcbiAgdXJsPzogc3RyaW5nO1xuICBzdWJkb21haW4/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDaGVja1N1YmRvbWFpblJlc3BvbnNlIHtcbiAgYXZhaWxhYmxlOiBib29sZWFuO1xuICBlcnJvcj86IHN0cmluZztcbiAgc3VnZ2VzdGlvbj86IHN0cmluZztcbn1cblxuLy8gU2ltcGxlIHByb21wdCBoZWxwZXIgdXNpbmcgcmVhZGxpbmVcbmFzeW5jIGZ1bmN0aW9uIHByb21wdChxdWVzdGlvbjogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZWFkbGluZSA9IGF3YWl0IGltcG9ydCgncmVhZGxpbmUnKTtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGRpc3BsYXlRdWVzdGlvbiA9IGRlZmF1bHRWYWx1ZSBcbiAgICAgID8gYCR7cXVlc3Rpb259ICgke2RlZmF1bHRWYWx1ZX0pOiBgXG4gICAgICA6IGAke3F1ZXN0aW9ufTogYDtcbiAgICBcbiAgICBybC5xdWVzdGlvbihkaXNwbGF5UXVlc3Rpb24sIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICByZXNvbHZlKGFuc3dlci50cmltKCkgfHwgZGVmYXVsdFZhbHVlIHx8ICcnKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb21wdFNlbGVjdChxdWVzdGlvbjogc3RyaW5nLCBjaG9pY2VzOiB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc29sZS5sb2coYFxcbiR7cXVlc3Rpb259XFxuYCk7XG4gIGNob2ljZXMuZm9yRWFjaCgoY2hvaWNlLCBpKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCAgJHtpICsgMX0uICR7Y2hvaWNlLmxhYmVsfWApO1xuICB9KTtcbiAgY29uc29sZS5sb2coKTtcbiAgXG4gIGNvbnN0IHJlYWRsaW5lID0gYXdhaXQgaW1wb3J0KCdyZWFkbGluZScpO1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmwucXVlc3Rpb24oJ0VudGVyIG51bWJlcjogJywgKGFuc3dlcikgPT4ge1xuICAgICAgcmwuY2xvc2UoKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoYW5zd2VyLnRyaW0oKSwgMTApIC0gMTtcbiAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgY2hvaWNlcy5sZW5ndGgpIHtcbiAgICAgICAgcmVzb2x2ZShjaG9pY2VzW2luZGV4XS52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEZWZhdWx0IHRvIGZpcnN0IGNob2ljZVxuICAgICAgICByZXNvbHZlKGNob2ljZXNbMF0udmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvbXB0Q29uZmlybShxdWVzdGlvbjogc3RyaW5nLCBkZWZhdWx0VmFsdWUgPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCByZWFkbGluZSA9IGF3YWl0IGltcG9ydCgncmVhZGxpbmUnKTtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGhpbnQgPSBkZWZhdWx0VmFsdWUgPyAnW1kvbl0nIDogJ1t5L05dJztcbiAgICBybC5xdWVzdGlvbihgJHtxdWVzdGlvbn0gJHtoaW50fTogYCwgKGFuc3dlcikgPT4ge1xuICAgICAgcmwuY2xvc2UoKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBhbnN3ZXIudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobm9ybWFsaXplZCA9PT0gJycpIHtcbiAgICAgICAgcmVzb2x2ZShkZWZhdWx0VmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShub3JtYWxpemVkID09PSAneScgfHwgbm9ybWFsaXplZCA9PT0gJ3llcycpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9qZWN0TmFtZShuYW1lOiBzdHJpbmcpOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9IHtcbiAgaWYgKCFuYW1lKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1Byb2plY3QgbmFtZSBpcyByZXF1aXJlZCcgfTtcbiAgfVxuICBcbiAgLy8gQ2hlY2sgZm9yIHZhbGlkIG5wbSBwYWNrYWdlIG5hbWVcbiAgaWYgKCEvXlthLXowLTldW2EtejAtOS0uX10qJC9pLnRlc3QobmFtZSkpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnSW52YWxpZCBwcm9qZWN0IG5hbWUuIFVzZSBsb3dlcmNhc2UgbGV0dGVycywgbnVtYmVycywgYW5kIGRhc2hlcy4nIH07XG4gIH1cbiAgXG4gIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG59XG5cbi8qKlxuICogQmFzaWMgc3ViZG9tYWluIGZvcm1hdCB2YWxpZGF0aW9uIChzZXJ2ZXIgZG9lcyBmdWxsIHZhbGlkYXRpb24gaW5jbHVkaW5nIGJsYWNrbGlzdClcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFN1YmRvbWFpbkZvcm1hdChzdWJkb21haW46IHN0cmluZyk6IHsgdmFsaWQ6IGJvb2xlYW47IGVycm9yPzogc3RyaW5nIH0ge1xuICBpZiAoIXN1YmRvbWFpbikge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gaXMgcmVxdWlyZWQnIH07XG4gIH1cbiAgXG4gIGlmIChzdWJkb21haW4ubGVuZ3RoIDwgMykge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnMnIH07XG4gIH1cbiAgXG4gIGlmIChzdWJkb21haW4ubGVuZ3RoID4gNjMpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIG11c3QgYmUgNjMgY2hhcmFjdGVycyBvciBsZXNzJyB9O1xuICB9XG4gIFxuICBpZiAoIS9eW2EtejAtOV0oW2EtejAtOS1dKlthLXowLTldKT8kLy50ZXN0KHN1YmRvbWFpbikpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoIGFscGhhbnVtZXJpYywgY2FuIGNvbnRhaW4gaHlwaGVucycgfTtcbiAgfVxuICBcbiAgaWYgKC8tLS8udGVzdChzdWJkb21haW4pKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBjYW5ub3QgY29udGFpbiBjb25zZWN1dGl2ZSBoeXBoZW5zJyB9O1xuICB9XG4gIFxuICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xufVxuXG4vKipcbiAqIENoZWNrIHN1YmRvbWFpbiBhdmFpbGFiaWxpdHkgdmlhIEFQSSAoYWxzbyB2YWxpZGF0ZXMgYWdhaW5zdCBzZXJ2ZXIgYmxhY2tsaXN0KVxuICovXG5hc3luYyBmdW5jdGlvbiBjaGVja1N1YmRvbWFpbkF2YWlsYWJpbGl0eShcbiAgc3ViZG9tYWluOiBzdHJpbmcsXG4gIGFwaVVybDogc3RyaW5nXG4pOiBQcm9taXNlPENoZWNrU3ViZG9tYWluUmVzcG9uc2U+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2FwaVVybH0vYXBpL3N1YmRvbWFpbnMvY2hlY2tgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHN1YmRvbWFpbiB9KSxcbiAgICB9KTtcbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgQ2hlY2tTdWJkb21haW5SZXNwb25zZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZiBBUEkgaXMgdW5hdmFpbGFibGUsIGFsbG93IHByb2NlZWRpbmcgKHdpbGwgZmFpbCBhdCByZWdpc3RyYXRpb24gaWYgaW52YWxpZClcbiAgICByZXR1cm4geyBhdmFpbGFibGU6IHRydWUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRQcm9qZWN0TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbmFtZVxuICAgIC5yZXBsYWNlKC8tL2csICcgJylcbiAgICAucmVwbGFjZSgvXFxiXFx3L2csIChjaGFyKSA9PiBjaGFyLnRvVXBwZXJDYXNlKCkpO1xufVxuXG5mdW5jdGlvbiBnZXRQYWNrYWdlTWFuYWdlcigpOiBzdHJpbmcge1xuICBjb25zdCB1c2VyQWdlbnQgPSBwcm9jZXNzLmVudi5ucG1fY29uZmlnX3VzZXJfYWdlbnQgfHwgJyc7XG4gIFxuICBpZiAodXNlckFnZW50LnN0YXJ0c1dpdGgoJ3lhcm4nKSkge1xuICAgIHJldHVybiAneWFybic7XG4gIH1cbiAgXG4gIGlmICh1c2VyQWdlbnQuc3RhcnRzV2l0aCgncG5wbScpKSB7XG4gICAgcmV0dXJuICdwbnBtJztcbiAgfVxuICBcbiAgcmV0dXJuICducG0nO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGRvY3MuanNvbiBjb25maWd1cmF0aW9uIGJhc2VkIG9uIHRlbXBsYXRlIHR5cGVcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVEb2NzQ29uZmlnKHByb2plY3ROYW1lOiBzdHJpbmcsIHRlbXBsYXRlVHlwZTogVGVtcGxhdGVUeXBlKTogb2JqZWN0IHtcbiAgY29uc3QgZm9ybWF0dGVkTmFtZSA9IGZvcm1hdFByb2plY3ROYW1lKHByb2plY3ROYW1lKTtcbiAgY29uc3QgdGVtcGxhdGUgPSBURU1QTEFURVNbdGVtcGxhdGVUeXBlXTtcbiAgXG4gIC8vIEJhc2UgY29uZmlndXJhdGlvbiAoc2hhcmVkIGFjcm9zcyBhbGwgdGVtcGxhdGVzKVxuICAvLyBOb3RlOiBBc3NldHMgYXJlIHN0b3JlZCBpbiB0aGUgL2Fzc2V0cyBmb2xkZXIgYW5kIHNlcnZlZCB2aWEgL2FwaS9sb2NhbC1hc3NldHMgaW4gZGV2IG1vZGVcbiAgLy8gVGhlbWUgc2V0dGluZ3MgKGNvbG9ycywgbG9nbykgYXJlIGluIHRoZW1lLmpzb25cbiAgY29uc3QgYmFzZUNvbmZpZyA9IHtcbiAgICAkc2NoZW1hOiAnaHR0cHM6Ly9kZXZkb2Muc2gvZG9jcy5qc29uJyxcbiAgICBuYW1lOiBmb3JtYXR0ZWROYW1lLFxuICAgIGZhdmljb246ICcvYXNzZXRzL2Zhdmljb24uc3ZnJyxcbiAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICB0YWJzOiBbXSBhcyBvYmplY3RbXSxcbiAgICAgIGdsb2JhbDoge1xuICAgICAgICBhbmNob3JzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYW5jaG9yOiAnR2l0SHViJyxcbiAgICAgICAgICAgIGhyZWY6ICdodHRwczovL2dpdGh1Yi5jb20veW91ci1vcmcveW91ci1yZXBvJyxcbiAgICAgICAgICAgIGljb246ICdnaXRodWItbG9nbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICAvLyBEb2N1bWVudGF0aW9uIHRhYiAoYWx3YXlzIHByZXNlbnQpXG4gIGNvbnN0IGRvY3NUYWIgPSB7XG4gICAgdGFiOiAnRG9jdW1lbnRhdGlvbicsXG4gICAgdHlwZTogJ2RvY3MnLFxuICAgIGdyb3VwczogW1xuICAgICAge1xuICAgICAgICBncm91cDogJ0dldHRpbmcgU3RhcnRlZCcsXG4gICAgICAgIGljb246ICdyb2NrZXQtbGF1bmNoJyxcbiAgICAgICAgcGFnZXM6IFsnaW5kZXgnLCAncXVpY2tzdGFydCddLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZ3JvdXA6ICdHdWlkZXMnLFxuICAgICAgICBpY29uOiAnYm9vay1vcGVuJyxcbiAgICAgICAgcGFnZXM6IFsnZ3VpZGVzL292ZXJ2aWV3JywgJ2d1aWRlcy9jb25maWd1cmF0aW9uJ10sXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgYmFzZUNvbmZpZy5uYXZpZ2F0aW9uLnRhYnMucHVzaChkb2NzVGFiKTtcblxuICAvLyBBZGQgQVBJIHJlZmVyZW5jZSB0YWIgYmFzZWQgb24gdGVtcGxhdGUgdHlwZVxuICBpZiAodGVtcGxhdGVUeXBlID09PSAnb3BlbmFwaScpIHtcbiAgICBiYXNlQ29uZmlnLm5hdmlnYXRpb24udGFicy5wdXNoKHtcbiAgICAgIHRhYjogJ0FQSSBSZWZlcmVuY2UnLFxuICAgICAgdHlwZTogJ29wZW5hcGknLFxuICAgICAgcGF0aDogJy9hcGktcmVmZXJlbmNlJyxcbiAgICAgIHZlcnNpb25zOiBbXG4gICAgICAgIHsgdmVyc2lvbjogJ3YxJywgc3BlYzogJ2FwaS1yZWZlcmVuY2Uvb3BlbmFwaS5qc29uJywgZGVmYXVsdDogdHJ1ZSB9LFxuICAgICAgXSxcbiAgICAgIGdyb3VwczogW1xuICAgICAgICB7XG4gICAgICAgICAgZ3JvdXA6ICdPdmVydmlldycsXG4gICAgICAgICAgaWNvbjogJ2Jvb2stb3BlbicsXG4gICAgICAgICAgcGFnZXM6IFtcbiAgICAgICAgICAgICdhcGktcmVmZXJlbmNlL2ludHJvZHVjdGlvbicsXG4gICAgICAgICAgICAnYXBpLXJlZmVyZW5jZS9hdXRoZW50aWNhdGlvbicsXG4gICAgICAgICAgICAnYXBpLXJlZmVyZW5jZS9lcnJvcnMnLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIEFQSSBwbGF5Z3JvdW5kIGNvbmZpZ1xuICAgIChiYXNlQ29uZmlnIGFzIGFueSkuYXBpID0ge1xuICAgICAgYmFzZVVybDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJyxcbiAgICAgIHBsYXlncm91bmQ6IHtcbiAgICAgICAgbW9kZTogJ3Nob3cnLFxuICAgICAgfSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHRlbXBsYXRlVHlwZSA9PT0gJ2dyYXBocWwnKSB7XG4gICAgYmFzZUNvbmZpZy5uYXZpZ2F0aW9uLnRhYnMucHVzaCh7XG4gICAgICB0YWI6ICdHcmFwaFFMIEFQSScsXG4gICAgICB0eXBlOiAnZ3JhcGhxbCcsXG4gICAgICBwYXRoOiAnL2dyYXBocWwtYXBpJyxcbiAgICAgIHNjaGVtYTogJ2FwaS1yZWZlcmVuY2Uvc2NoZW1hLmdyYXBocWwnLFxuICAgICAgZW5kcG9pbnQ6ICdodHRwczovL2NvdW50cmllcy50cmV2b3JibGFkZXMuY29tL2dyYXBocWwnLFxuICAgICAgZ3JvdXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBncm91cDogJ092ZXJ2aWV3JyxcbiAgICAgICAgICBpY29uOiAnYm9vay1vcGVuJyxcbiAgICAgICAgICBwYWdlczogW1xuICAgICAgICAgICAgJ2FwaS1yZWZlcmVuY2UvaW50cm9kdWN0aW9uJyxcbiAgICAgICAgICAgICdhcGktcmVmZXJlbmNlL2F1dGhlbnRpY2F0aW9uJyxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBiYXNlQ29uZmlnO1xufVxuXG4vLyBDbGF1ZGUgQ29kZSBza2lsbHMgdG8gY3JlYXRlXG5jb25zdCBDTEFVREVfU0tJTExTID0gW1xuICAnYm9vdHN0cmFwLWRvY3MnLFxuICAnd2hpc2stdGhlbWUnLFxuICAnbWlncmF0ZS1kb2NzJyxcbiAgJ2ltcG9ydC1hcGktc3BlYycsXG4gICdjaGVjay1kb2NzJyxcbiAgJ2JsYW1lLWRvYycsXG4gICdjcmVhdGUtZG9jJyxcbiAgJ3VwZGF0ZS1kb2MnLFxuICAnZGVsZXRlLWRvYycsXG4gICdjb21taXQtZG9jJyxcbl07XG5cbi8vIEN1cnNvciBydWxlcyB0byBjcmVhdGVcbmNvbnN0IENVUlNPUl9SVUxFUyA9IFtcbiAgJ2RldmRvYy5tZGMnLFxuICAnZGV2ZG9jLWJvb3RzdHJhcC5tZGMnLFxuICAnZGV2ZG9jLXdoaXNrLXRoZW1lLm1kYycsXG4gICdkZXZkb2MtbWlncmF0ZS5tZGMnLFxuICAnZGV2ZG9jLWJsYW1lLm1kYycsXG4gICdkZXZkb2MtY3JlYXRlLm1kYycsXG4gICdkZXZkb2MtdXBkYXRlLm1kYycsXG4gICdkZXZkb2MtZGVsZXRlLm1kYycsXG4gICdkZXZkb2MtY29tbWl0Lm1kYycsXG5dO1xuXG4vKipcbiAqIEdldCB0aGUgQUkgYWdlbnRzIHRlbXBsYXRlIGRpcmVjdG9yeSBwYXRoXG4gKi9cbmZ1bmN0aW9uIGdldEFJQWdlbnRzRGlyKCk6IHN0cmluZyB8IG51bGwge1xuICAvLyBUcnkgcmVsYXRpdmUgdG8gY29tcGlsZWQgZGlzdCAocGFja2FnZXMvZGV2ZG9jL2Rpc3QvY2xpL2NvbW1hbmRzIC0+IHBhY2thZ2VzL2RldmRvYy9haS1hZ2VudHMpXG4gIGxldCBhZ2VudHNEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nLCAnYWktYWdlbnRzJyk7XG4gIFxuICBpZiAoZnMuZXhpc3RzU3luYyhhZ2VudHNEaXIpKSB7XG4gICAgcmV0dXJuIGFnZW50c0RpcjtcbiAgfVxuICBcbiAgLy8gVHJ5IGRldmRvYy90ZW1wbGF0ZXMgYXQgcmVwbyByb290IChkZXZlbG9wbWVudClcbiAgYWdlbnRzRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJy4uJywgJy4uJywgJy4uJywgJ2RldmRvYycsICd0ZW1wbGF0ZXMnLCAnc3RhcnRlcicpO1xuICBcbiAgaWYgKGZzLmV4aXN0c1N5bmMoYWdlbnRzRGlyKSkge1xuICAgIHJldHVybiBhZ2VudHNEaXI7XG4gIH1cbiAgXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEluc3RhbGwgQUkgYWdlbnQgY29uZmlndXJhdGlvbiBmaWxlc1xuICovXG5mdW5jdGlvbiBpbnN0YWxsQUlBZ2VudHMoXG4gIHByb2plY3RQYXRoOiBzdHJpbmcsIFxuICB0b29sOiAnY2xhdWRlJyB8ICdjdXJzb3InIHwgJ2JvdGgnXG4pOiB7IGNsYXVkZU1kOiBib29sZWFuOyBjbGF1ZGVTa2lsbHM6IHN0cmluZ1tdOyBjdXJzb3JSdWxlczogc3RyaW5nW10gfSB7XG4gIGNvbnN0IHJlc3VsdHMgPSB7XG4gICAgY2xhdWRlTWQ6IGZhbHNlLFxuICAgIGNsYXVkZVNraWxsczogW10gYXMgc3RyaW5nW10sXG4gICAgY3Vyc29yUnVsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICB9O1xuXG4gIGNvbnN0IGFnZW50c0RpciA9IGdldEFJQWdlbnRzRGlyKCk7XG4gIGlmICghYWdlbnRzRGlyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0FJIGFnZW50IHRlbXBsYXRlcyBub3QgZm91bmQnKTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8vIEluc3RhbGwgQ2xhdWRlIENvZGUgZmlsZXNcbiAgaWYgKHRvb2wgPT09ICdjbGF1ZGUnIHx8IHRvb2wgPT09ICdib3RoJykge1xuICAgIC8vIENvcHkgQ0xBVURFLm1kXG4gICAgY29uc3QgY2xhdWRlTWRTb3VyY2UgPSBwYXRoLmpvaW4oYWdlbnRzRGlyLCAnQ0xBVURFLm1kJyk7XG4gICAgY29uc3QgY2xhdWRlTWREZXN0ID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnQ0xBVURFLm1kJyk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoY2xhdWRlTWRTb3VyY2UpKSB7XG4gICAgICBmcy5jb3B5U3luYyhjbGF1ZGVNZFNvdXJjZSwgY2xhdWRlTWREZXN0KTtcbiAgICAgIHJlc3VsdHMuY2xhdWRlTWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIENvcHkgc2tpbGxzXG4gICAgY29uc3Qgc291cmNlU2tpbGxzRGlyID0gcGF0aC5qb2luKGFnZW50c0RpciwgJy5jbGF1ZGUnLCAnc2tpbGxzJyk7XG4gICAgY29uc3QgZGVzdFNraWxsc0RpciA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgJy5jbGF1ZGUnLCAnc2tpbGxzJyk7XG4gICAgXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoc291cmNlU2tpbGxzRGlyKSkge1xuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkZXN0U2tpbGxzRGlyKTtcbiAgICAgIFxuICAgICAgZm9yIChjb25zdCBza2lsbCBvZiBDTEFVREVfU0tJTExTKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZURpciA9IHBhdGguam9pbihzb3VyY2VTa2lsbHNEaXIsIHNraWxsKTtcbiAgICAgICAgY29uc3QgZGVzdERpciA9IHBhdGguam9pbihkZXN0U2tpbGxzRGlyLCBza2lsbCk7XG4gICAgICAgIFxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhzb3VyY2VEaXIpKSB7XG4gICAgICAgICAgZnMuY29weVN5bmMoc291cmNlRGlyLCBkZXN0RGlyKTtcbiAgICAgICAgICByZXN1bHRzLmNsYXVkZVNraWxscy5wdXNoKHNraWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEluc3RhbGwgQ3Vyc29yIGZpbGVzXG4gIGlmICh0b29sID09PSAnY3Vyc29yJyB8fCB0b29sID09PSAnYm90aCcpIHtcbiAgICBjb25zdCBzb3VyY2VSdWxlc0RpciA9IHBhdGguam9pbihhZ2VudHNEaXIsICcuY3Vyc29yJywgJ3J1bGVzJyk7XG4gICAgY29uc3QgZGVzdFJ1bGVzRGlyID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnLmN1cnNvcicsICdydWxlcycpO1xuICAgIFxuICAgIGlmIChmcy5leGlzdHNTeW5jKHNvdXJjZVJ1bGVzRGlyKSkge1xuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkZXN0UnVsZXNEaXIpO1xuICAgICAgXG4gICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgQ1VSU09SX1JVTEVTKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBwYXRoLmpvaW4oc291cmNlUnVsZXNEaXIsIHJ1bGUpO1xuICAgICAgICBjb25zdCBkZXN0UGF0aCA9IHBhdGguam9pbihkZXN0UnVsZXNEaXIsIHJ1bGUpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoc291cmNlUGF0aCkpIHtcbiAgICAgICAgICBmcy5jb3B5U3luYyhzb3VyY2VQYXRoLCBkZXN0UGF0aCk7XG4gICAgICAgICAgcmVzdWx0cy5jdXJzb3JSdWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogQ2xlYW4gdXAgdW51c2VkIEFQSSBmaWxlcyBiYXNlZCBvbiB0ZW1wbGF0ZSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNsZWFudXBVbnVzZWRGaWxlcyhyZXNvbHZlZFBhdGg6IHN0cmluZywgdGVtcGxhdGVUeXBlOiBUZW1wbGF0ZVR5cGUpOiB2b2lkIHtcbiAgY29uc3QgYXBpUmVmUGF0aCA9IHBhdGguam9pbihyZXNvbHZlZFBhdGgsICdhcGktcmVmZXJlbmNlJyk7XG4gIFxuICBpZiAodGVtcGxhdGVUeXBlID09PSAnYmFzaWMnKSB7XG4gICAgLy8gUmVtb3ZlIGVudGlyZSBhcGktcmVmZXJlbmNlIGZvbGRlciBmb3IgYmFzaWMgdGVtcGxhdGVcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhhcGlSZWZQYXRoKSkge1xuICAgICAgZnMucmVtb3ZlU3luYyhhcGlSZWZQYXRoKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnUmVtb3ZlZCBhcGktcmVmZXJlbmNlIGZvbGRlciAobm90IG5lZWRlZCBmb3IgYmFzaWMgdGVtcGxhdGUpJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRlbXBsYXRlVHlwZSA9PT0gJ29wZW5hcGknKSB7XG4gICAgLy8gUmVtb3ZlIEdyYXBoUUwgc2NoZW1hIGZvciBPcGVuQVBJIHRlbXBsYXRlXG4gICAgY29uc3QgZ3JhcGhxbFNjaGVtYSA9IHBhdGguam9pbihhcGlSZWZQYXRoLCAnc2NoZW1hLmdyYXBocWwnKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhncmFwaHFsU2NoZW1hKSkge1xuICAgICAgZnMucmVtb3ZlU3luYyhncmFwaHFsU2NoZW1hKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnUmVtb3ZlZCBzY2hlbWEuZ3JhcGhxbCAobm90IG5lZWRlZCBmb3IgT3BlbkFQSSB0ZW1wbGF0ZSknKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGVtcGxhdGVUeXBlID09PSAnZ3JhcGhxbCcpIHtcbiAgICAvLyBSZW1vdmUgT3BlbkFQSSBzcGVjIGFuZCBlcnJvcnMubWR4IGZvciBHcmFwaFFMIHRlbXBsYXRlXG4gICAgY29uc3Qgb3BlbmFwaVNwZWMgPSBwYXRoLmpvaW4oYXBpUmVmUGF0aCwgJ29wZW5hcGkuanNvbicpO1xuICAgIGNvbnN0IGVycm9yc0ZpbGUgPSBwYXRoLmpvaW4oYXBpUmVmUGF0aCwgJ2Vycm9ycy5tZHgnKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhvcGVuYXBpU3BlYykpIHtcbiAgICAgIGZzLnJlbW92ZVN5bmMob3BlbmFwaVNwZWMpO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdSZW1vdmVkIG9wZW5hcGkuanNvbiAobm90IG5lZWRlZCBmb3IgR3JhcGhRTCB0ZW1wbGF0ZSknKTtcbiAgICB9XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZXJyb3JzRmlsZSkpIHtcbiAgICAgIGZzLnJlbW92ZVN5bmMoZXJyb3JzRmlsZSk7XG4gICAgICBsb2dnZXIuZGVidWcoJ1JlbW92ZWQgZXJyb3JzLm1keCAobm90IG5lZWRlZCBmb3IgR3JhcGhRTCB0ZW1wbGF0ZSknKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZShwcm9qZWN0RGlyZWN0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQsIG9wdGlvbnM6IENyZWF0ZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc29sZS5sb2coKTtcbiAgbG9nZ2VyLmluZm8oJ/CfkJ8gQ3JlYXRlIERldkRvYyBEb2MnKTtcbiAgY29uc29sZS5sb2coKTtcblxuICBjb25zdCBhcGlVcmwgPSBvcHRpb25zLnVybCB8fCBwcm9jZXNzLmVudi5ERVZET0NfQVBJX1VSTCB8fCBERUZBVUxUX0FQSV9VUkw7XG5cbiAgLy8gR2V0IHByb2plY3QgbmFtZSBpZiBub3QgcHJvdmlkZWRcbiAgbGV0IHByb2plY3RQYXRoID0gcHJvamVjdERpcmVjdG9yeTtcblxuICBpZiAoIXByb2plY3RQYXRoKSB7XG4gICAgcHJvamVjdFBhdGggPSBhd2FpdCBwcm9tcHQoJ1doYXQgaXMgeW91ciBwcm9qZWN0IG5hbWVkPycsICdteS1kb2NzJyk7XG4gICAgXG4gICAgaWYgKCFwcm9qZWN0UGF0aCkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdQcm9qZWN0IG5hbWUgaXMgcmVxdWlyZWQnKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBwcm9qZWN0IG5hbWVcbiAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlUHJvamVjdE5hbWUocHJvamVjdFBhdGgpO1xuICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICBsb2dnZXIuZXJyb3IodmFsaWRhdGlvbi5lcnJvciB8fCAnSW52YWxpZCBwcm9qZWN0IG5hbWUnKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyBHZXQgZG9jIHR5cGUgc2VsZWN0aW9uIGlmIG5vdCBwcm92aWRlZFxuICBsZXQgZG9jVHlwZTogRG9jVHlwZSA9IG9wdGlvbnMuZG9jVHlwZSB8fCAncHVibGljJztcbiAgXG4gIGlmICghb3B0aW9ucy5kb2NUeXBlKSB7XG4gICAgY29uc3QgZG9jVHlwZUNob2ljZXMgPSBPYmplY3QuZW50cmllcyhET0NfVFlQRVMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgdmFsdWU6IGtleSxcbiAgICAgIGxhYmVsOiBgJHt2YWx1ZS5uYW1lfSAtICR7dmFsdWUuZGVzY3JpcHRpb259YCxcbiAgICB9KSk7XG5cbiAgICBkb2NUeXBlID0gYXdhaXQgcHJvbXB0U2VsZWN0KCdXaGF0IHR5cGUgb2YgZG9jdW1lbnRhdGlvbiBhcmUgeW91IGNyZWF0aW5nPycsIGRvY1R5cGVDaG9pY2VzKSBhcyBEb2NUeXBlO1xuICB9XG5cbiAgY29uc3QgaXNJbnRlcm5hbERvY3MgPSBkb2NUeXBlID09PSAnaW50ZXJuYWwnO1xuXG4gIC8vIEdldCB0ZW1wbGF0ZSBzZWxlY3Rpb24gaWYgbm90IHByb3ZpZGVkXG4gIGxldCB0ZW1wbGF0ZTogVGVtcGxhdGVUeXBlID0gb3B0aW9ucy50ZW1wbGF0ZSB8fCAnYmFzaWMnO1xuICBcbiAgaWYgKCFvcHRpb25zLnRlbXBsYXRlKSB7XG4gICAgY29uc3QgdGVtcGxhdGVDaG9pY2VzID0gT2JqZWN0LmVudHJpZXMoVEVNUExBVEVTKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgIHZhbHVlOiBrZXksXG4gICAgICBsYWJlbDogYCR7dmFsdWUubmFtZX0gLSAke3ZhbHVlLmRlc2NyaXB0aW9ufWAsXG4gICAgfSkpO1xuXG4gICAgdGVtcGxhdGUgPSBhd2FpdCBwcm9tcHRTZWxlY3QoJ1doaWNoIHRlbXBsYXRlIHdvdWxkIHlvdSBsaWtlIHRvIHVzZT8nLCB0ZW1wbGF0ZUNob2ljZXMpIGFzIFRlbXBsYXRlVHlwZTtcbiAgfVxuXG4gIC8vIFJlc29sdmUgZnVsbCBwYXRoXG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0UGF0aCk7XG4gIGNvbnN0IHByb2plY3ROYW1lID0gcGF0aC5iYXNlbmFtZShyZXNvbHZlZFBhdGgpO1xuICBjb25zdCBzbHVnID0gcHJvamVjdE5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJykucmVwbGFjZSgvXi18LSQvZywgJycpO1xuXG4gIC8vIEdldCBzdWJkb21haW4gLSBvbmx5IGZvciBwdWJsaWMgZG9jc1xuICBsZXQgc3ViZG9tYWluOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zLnN1YmRvbWFpbjtcbiAgXG4gIGlmICghaXNJbnRlcm5hbERvY3MpIHtcbiAgICBpZiAoIXN1YmRvbWFpbikge1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIHN1YmRvbWFpbiA9IGF3YWl0IHByb21wdChgRW50ZXIgc3ViZG9tYWluIGZvciB5b3VyIGRvY3MgKCR7c2x1Z30uZGV2ZG9jLnNoKWAsIHNsdWcpO1xuICAgICAgc3ViZG9tYWluID0gc3ViZG9tYWluLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTktXS9nLCAnLScpLnJlcGxhY2UoL14tfC0kL2csICcnKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBzdWJkb21haW4gZm9ybWF0IGxvY2FsbHlcbiAgICBjb25zdCBmb3JtYXRDaGVjayA9IGlzVmFsaWRTdWJkb21haW5Gb3JtYXQoc3ViZG9tYWluKTtcbiAgICBpZiAoIWZvcm1hdENoZWNrLnZhbGlkKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoZm9ybWF0Q2hlY2suZXJyb3IhKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBzdWJkb21haW4gYXZhaWxhYmlsaXR5IHZpYSBBUEkgKHNlcnZlciB2YWxpZGF0ZXMgYmxhY2tsaXN0KVxuICAgIC8vIExvb3AgdW50aWwgd2UgZmluZCBhbiBhdmFpbGFibGUgc3ViZG9tYWluXG4gICAgbGV0IHN1YmRvbWFpbkF2YWlsYWJsZSA9IGZhbHNlO1xuICAgIHdoaWxlICghc3ViZG9tYWluQXZhaWxhYmxlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgQ2hlY2tpbmcgaWYgJHtzdWJkb21haW59LmRldmRvYy5zaCBpcyBhdmFpbGFibGUuLi5gKTtcbiAgICAgIGNvbnN0IGF2YWlsYWJpbGl0eSA9IGF3YWl0IGNoZWNrU3ViZG9tYWluQXZhaWxhYmlsaXR5KHN1YmRvbWFpbiwgYXBpVXJsKTtcbiAgICAgIFxuICAgICAgaWYgKCFhdmFpbGFiaWxpdHkuYXZhaWxhYmxlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICAgIGxvZ2dlci53YXJuKGF2YWlsYWJpbGl0eS5lcnJvciB8fCBgU3ViZG9tYWluIFwiJHtzdWJkb21haW59XCIgaXMgbm90IGF2YWlsYWJsZWApO1xuICAgICAgICBcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGF2YWlsYWJpbGl0eS5zdWdnZXN0aW9uIHx8IGAke3N1YmRvbWFpbn0tZG9jc2A7XG4gICAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBTdWdnZXN0aW9uOiAke3N1Z2dlc3Rpb259LmRldmRvYy5zaGApO1xuICAgICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgICBcbiAgICAgICAgLy8gUHJvbXB0IGZvciBuZXcgc3ViZG9tYWluXG4gICAgICAgIHN1YmRvbWFpbiA9IGF3YWl0IHByb21wdCgnRW50ZXIgYSBkaWZmZXJlbnQgc3ViZG9tYWluJywgc3VnZ2VzdGlvbik7XG4gICAgICAgIHN1YmRvbWFpbiA9IHN1YmRvbWFpbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05LV0vZywgJy0nKS5yZXBsYWNlKC9eLXwtJC9nLCAnJyk7XG4gICAgICAgIFxuICAgICAgICAvLyBWYWxpZGF0ZSBmb3JtYXRcbiAgICAgICAgY29uc3QgZm9ybWF0Q2hlY2sgPSBpc1ZhbGlkU3ViZG9tYWluRm9ybWF0KHN1YmRvbWFpbik7XG4gICAgICAgIGlmICghZm9ybWF0Q2hlY2sudmFsaWQpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoZm9ybWF0Q2hlY2suZXJyb3IhKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1YmRvbWFpbkF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKGDinJMgJHtzdWJkb21haW59LmRldmRvYy5zaCBpcyBhdmFpbGFibGUhYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgZGlyZWN0b3J5IGV4aXN0c1xuICBpZiAoZnMuZXhpc3RzU3luYyhyZXNvbHZlZFBhdGgpKSB7XG4gICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhyZXNvbHZlZFBhdGgpO1xuICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBvdmVyd3JpdGUgPSBhd2FpdCBwcm9tcHRDb25maXJtKGBEaXJlY3RvcnkgJHtwcm9qZWN0TmFtZX0gaXMgbm90IGVtcHR5LiBDb250aW51ZSBhbnl3YXk/YCwgZmFsc2UpO1xuICAgICAgXG4gICAgICBpZiAoIW92ZXJ3cml0ZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ09wZXJhdGlvbiBjYW5jZWxsZWQnKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlbGVjdGVkVGVtcGxhdGUgPSBURU1QTEFURVNbdGVtcGxhdGVdO1xuICBjb25zb2xlLmxvZygpO1xuICBsb2dnZXIuaW5mbyhgQ3JlYXRpbmcgYSBuZXcgJHtzZWxlY3RlZFRlbXBsYXRlLm5hbWV9IERldkRvYyBkb2N1bWVudGF0aW9uIHNpdGUgaW4gJHtyZXNvbHZlZFBhdGh9YCk7XG4gIGNvbnNvbGUubG9nKCk7XG5cbiAgLy8gQ3JlYXRlIHByb2plY3QgZGlyZWN0b3J5XG4gIGZzLmVuc3VyZURpclN5bmMocmVzb2x2ZWRQYXRoKTtcblxuICAvLyBEb3dubG9hZCB0ZW1wbGF0ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IChhbHdheXMgdXNlIHN0YXJ0ZXIgdGVtcGxhdGUpXG4gIGxvZ2dlci5pbmZvKCdEb3dubG9hZGluZyB0ZW1wbGF0ZS4uLicpO1xuICBcbiAgdHJ5IHtcbiAgICAvLyBUcnkgdG8gZG93bmxvYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSBmaXJzdFxuICAgIGF3YWl0IGRvd25sb2FkVGVtcGxhdGUoVEVNUExBVEVfUkVQTywge1xuICAgICAgZGlyOiByZXNvbHZlZFBhdGgsXG4gICAgICBmb3JjZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBsb2dnZXIuc3VjY2VzcygnRG93bmxvYWRlZCBzdGFydGVyIHRlbXBsYXRlJyk7XG4gIH0gY2F0Y2ggKGRvd25sb2FkRXJyb3IpIHtcbiAgICAvLyBGYWxsIGJhY2sgdG8gbG9jYWwgdGVtcGxhdGVzIChmb3IgZGV2ZWxvcG1lbnQgb3Igb2ZmbGluZSB1c2FnZSlcbiAgICBsb2dnZXIuZGVidWcoYFJlbW90ZSBkb3dubG9hZCBmYWlsZWQ6ICR7ZG93bmxvYWRFcnJvcn1gKTtcbiAgICBsb2dnZXIuaW5mbygnRmFsbGluZyBiYWNrIHRvIGxvY2FsIHRlbXBsYXRlLi4uJyk7XG4gICAgXG4gICAgY29uc3QgdGVtcGxhdGVEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nLCAndGVtcGxhdGVzJywgJ3N0YXJ0ZXInKTtcbiAgICBcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGVtcGxhdGVEaXIpKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1RlbXBsYXRlIFwic3RhcnRlclwiIG5vdCBmb3VuZCcpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBMb29rZWQgZm9yIHRlbXBsYXRlIGF0OiAke3RlbXBsYXRlRGlyfWApO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdSZW1vdGUgc291cmNlOiAnICsgVEVNUExBVEVfUkVQTyk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgZnMuY29weVN5bmModGVtcGxhdGVEaXIsIHJlc29sdmVkUGF0aCwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoJ0NvcGllZCBsb2NhbCB0ZW1wbGF0ZScpO1xuICB9XG5cbiAgLy8gVXBkYXRlIHBhY2thZ2UuanNvbiB3aXRoIHByb2plY3QgbmFtZVxuICBjb25zdCBwa2dQYXRoID0gcGF0aC5qb2luKHJlc29sdmVkUGF0aCwgJ3BhY2thZ2UuanNvbicpO1xuICBpZiAoZnMuZXhpc3RzU3luYyhwa2dQYXRoKSkge1xuICAgIGNvbnN0IHBrZyA9IGZzLnJlYWRKc29uU3luYyhwa2dQYXRoKTtcbiAgICBwa2cubmFtZSA9IHByb2plY3ROYW1lO1xuICAgIGZzLndyaXRlSnNvblN5bmMocGtnUGF0aCwgcGtnLCB7IHNwYWNlczogMiB9KTtcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIGRvY3MuanNvbiBiYXNlZCBvbiB0ZW1wbGF0ZSB0eXBlXG4gIGNvbnN0IGRvY3NDb25maWcgPSBnZW5lcmF0ZURvY3NDb25maWcocHJvamVjdE5hbWUsIHRlbXBsYXRlKTtcbiAgY29uc3QgZG9jc1BhdGggPSBwYXRoLmpvaW4ocmVzb2x2ZWRQYXRoLCAnZG9jcy5qc29uJyk7XG4gIGZzLndyaXRlSnNvblN5bmMoZG9jc1BhdGgsIGRvY3NDb25maWcsIHsgc3BhY2VzOiAyIH0pO1xuICBsb2dnZXIuc3VjY2VzcyhgR2VuZXJhdGVkIGRvY3MuanNvbiBmb3IgJHtzZWxlY3RlZFRlbXBsYXRlLm5hbWV9IHRlbXBsYXRlYCk7XG5cbiAgLy8gVXBkYXRlIHRoZW1lLmpzb24gd2l0aCB0ZW1wbGF0ZSBjb2xvclxuICBjb25zdCB0aGVtZVBhdGggPSBwYXRoLmpvaW4ocmVzb2x2ZWRQYXRoLCAndGhlbWUuanNvbicpO1xuICBpZiAoZnMuZXhpc3RzU3luYyh0aGVtZVBhdGgpKSB7XG4gICAgY29uc3QgdGhlbWUgPSBmcy5yZWFkSnNvblN5bmModGhlbWVQYXRoKTtcbiAgICB0aGVtZS5jb2xvcnMgPSB7XG4gICAgICBwcmltYXJ5OiBzZWxlY3RlZFRlbXBsYXRlLmNvbG9yLFxuICAgICAgcHJpbWFyeUxpZ2h0OiBzZWxlY3RlZFRlbXBsYXRlLmNvbG9yLFxuICAgICAgcHJpbWFyeURhcms6IHNlbGVjdGVkVGVtcGxhdGUuY29sb3IsXG4gICAgfTtcbiAgICBmcy53cml0ZUpzb25TeW5jKHRoZW1lUGF0aCwgdGhlbWUsIHsgc3BhY2VzOiAyIH0pO1xuICB9XG5cbiAgLy8gQ2xlYW4gdXAgdW51c2VkIGZpbGVzIGJhc2VkIG9uIHRlbXBsYXRlIHR5cGVcbiAgY2xlYW51cFVudXNlZEZpbGVzKHJlc29sdmVkUGF0aCwgdGVtcGxhdGUpO1xuXG4gIC8vIENyZWF0ZSAuZGV2ZG9jLmpzb24gd2l0aCBwcm9qZWN0IGNvbmZpZ1xuICAvLyBGb3IgcHVibGljIGRvY3M6IHN1YmRvbWFpbiB3aWxsIG9ubHkgYmUgcmVzZXJ2ZWQgd2hlbiB0aGUgdXNlciBhY3R1YWxseSBkZXBsb3lzXG4gIC8vIEZvciBpbnRlcm5hbCBkb2NzOiBubyBzdWJkb21haW4gbmVlZGVkXG4gIGNvbnN0IGRldmRvY0NvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocmVzb2x2ZWRQYXRoLCAnLmRldmRvYy5qc29uJyk7XG4gIFxuICBjb25zdCBkZXZkb2NDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIHByb2plY3RJZDogYCR7c2x1Z30tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOCl9YCxcbiAgICBuYW1lOiBmb3JtYXRQcm9qZWN0TmFtZShwcm9qZWN0TmFtZSksXG4gICAgc2x1Zzogc2x1ZyxcbiAgICBkb2NUeXBlOiBkb2NUeXBlLFxuICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICB9O1xuXG4gIC8vIE9ubHkgYWRkIHN1YmRvbWFpbiBmb3IgcHVibGljIGRvY3NcbiAgaWYgKCFpc0ludGVybmFsRG9jcyAmJiBzdWJkb21haW4pIHtcbiAgICBkZXZkb2NDb25maWcuc3ViZG9tYWluID0gc3ViZG9tYWluO1xuICB9XG5cbiAgZnMud3JpdGVKc29uU3luYyhkZXZkb2NDb25maWdQYXRoLCBkZXZkb2NDb25maWcsIHsgc3BhY2VzOiAyIH0pO1xuICBsb2dnZXIuc3VjY2VzcygnQ3JlYXRlZCAuZGV2ZG9jLmpzb24nKTtcbiAgY29uc29sZS5sb2coKTtcbiAgY29uc29sZS5sb2coJyAgRG9jIFR5cGU6JywgRE9DX1RZUEVTW2RvY1R5cGVdLm5hbWUpO1xuICBpZiAoIWlzSW50ZXJuYWxEb2NzICYmIHN1YmRvbWFpbikge1xuICAgIGNvbnNvbGUubG9nKCcgIFN1YmRvbWFpbjonLCBgJHtzdWJkb21haW59LmRldmRvYy5zaGApO1xuICAgIGNvbnNvbGUubG9nKCcgIFN0YXR1czonLCAnTm90IHlldCBkZXBsb3llZCAoc3ViZG9tYWluIHdpbGwgYmUgcmVzZXJ2ZWQgb24gZmlyc3QgZGVwbG95KScpO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKCcgIFN0YXR1czonLCAnSW50ZXJuYWwgZG9jcyAobG9jYWwgZGV2ZWxvcG1lbnQgb25seSknKTtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemUgZ2l0XG4gIGlmIChvcHRpb25zLmdpdCAhPT0gZmFsc2UpIHtcbiAgICBsb2dnZXIuaW5mbygnSW5pdGlhbGl6aW5nIGdpdCByZXBvc2l0b3J5Li4uJyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKCdnaXQgaW5pdCcsIHsgY3dkOiByZXNvbHZlZFBhdGgsIHN0ZGlvOiAnaWdub3JlJyB9KTtcbiAgICAgIGV4ZWNTeW5jKCdnaXQgYWRkIC1BJywgeyBjd2Q6IHJlc29sdmVkUGF0aCwgc3RkaW86ICdpZ25vcmUnIH0pO1xuICAgICAgZXhlY1N5bmMoJ2dpdCBjb21taXQgLW0gXCJJbml0aWFsIGNvbW1pdCBmcm9tIGRldmRvYyBjcmVhdGVcIicsIHtcbiAgICAgICAgY3dkOiByZXNvbHZlZFBhdGgsXG4gICAgICAgIHN0ZGlvOiAnaWdub3JlJyxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJ0dpdCByZXBvc2l0b3J5IGluaXRpYWxpemVkJyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBsb2dnZXIud2FybignQ291bGQgbm90IGluaXRpYWxpemUgZ2l0IHJlcG9zaXRvcnknKTtcbiAgICB9XG4gIH1cblxuICAvLyBJbnN0YWxsIGRlcGVuZGVuY2llc1xuICBpZiAob3B0aW9ucy5pbnN0YWxsICE9PSBmYWxzZSkge1xuICAgIGxvZ2dlci5pbmZvKCdJbnN0YWxsaW5nIGRlcGVuZGVuY2llcy4uLicpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYWNrYWdlTWFuYWdlciA9IGdldFBhY2thZ2VNYW5hZ2VyKCk7XG4gICAgICBleGVjU3luYyhgJHtwYWNrYWdlTWFuYWdlcn0gaW5zdGFsbGAsIHtcbiAgICAgICAgY3dkOiByZXNvbHZlZFBhdGgsXG4gICAgICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gICAgICB9KTtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKCdEZXBlbmRlbmNpZXMgaW5zdGFsbGVkJyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBsb2dnZXIud2FybignQ291bGQgbm90IGluc3RhbGwgZGVwZW5kZW5jaWVzJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gSW5zdGFsbCBBSSBhZ2VudHMgLSBhbHdheXMgcHJvbXB0IGFzIHBhcnQgb2YgY3JlYXRlIGZsb3dcbiAgbGV0IGFpVG9vbDogJ2NsYXVkZScgfCAnY3Vyc29yJyB8ICdib3RoJyB8IG51bGwgPSBudWxsO1xuICBcbiAgY29uc3QgYWlDaG9pY2VzID0gW1xuICAgIHsgdmFsdWU6ICdib3RoJywgbGFiZWw6ICdCb3RoIC0gQ2xhdWRlIENvZGUgYW5kIEN1cnNvciAocmVjb21tZW5kZWQpJyB9LFxuICAgIHsgdmFsdWU6ICdjdXJzb3InLCBsYWJlbDogJ0N1cnNvciAtIFJ1bGVzIGZvciBDdXJzb3IgSURFJyB9LFxuICAgIHsgdmFsdWU6ICdjbGF1ZGUnLCBsYWJlbDogJ0NsYXVkZSBDb2RlIC0gU2tpbGxzIGFuZCBDTEFVREUubWQnIH0sXG4gIF07XG4gIGNvbnN0IGFpU2VsZWN0aW9uID0gYXdhaXQgcHJvbXB0U2VsZWN0KCdXaGljaCBBSSBjb2RpbmcgYXNzaXN0YW50IGRvIHlvdSB1c2U/JywgYWlDaG9pY2VzKTtcbiAgYWlUb29sID0gYWlTZWxlY3Rpb24gYXMgJ2NsYXVkZScgfCAnY3Vyc29yJyB8ICdib3RoJztcblxuICBpZiAoYWlUb29sKSB7XG4gICAgY29uc29sZS5sb2coKTtcbiAgICBsb2dnZXIuaW5mbygnU2V0dGluZyB1cCBBSSBhZ2VudCBjb25maWd1cmF0aW9uLi4uJyk7XG4gICAgY29uc3QgYWlSZXN1bHRzID0gaW5zdGFsbEFJQWdlbnRzKHJlc29sdmVkUGF0aCwgYWlUb29sKTtcbiAgICBcbiAgICBpZiAoYWlSZXN1bHRzLmNsYXVkZU1kKSB7XG4gICAgICBsb2dnZXIuc3VjY2VzcygnQ3JlYXRlZCBDTEFVREUubWQnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBza2lsbCBvZiBhaVJlc3VsdHMuY2xhdWRlU2tpbGxzKSB7XG4gICAgICBsb2dnZXIuc3VjY2VzcyhgQ3JlYXRlZCAuY2xhdWRlL3NraWxscy8ke3NraWxsfS9TS0lMTC5tZGApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgYWlSZXN1bHRzLmN1cnNvclJ1bGVzKSB7XG4gICAgICBsb2dnZXIuc3VjY2VzcyhgQ3JlYXRlZCAuY3Vyc29yL3J1bGVzLyR7cnVsZX1gKTtcbiAgICB9XG4gIH1cblxuICAvLyBTdWNjZXNzIG1lc3NhZ2VcbiAgY29uc29sZS5sb2coKTtcbiAgbG9nZ2VyLnN1Y2Nlc3MoYENyZWF0ZWQgJHtwcm9qZWN0TmFtZX0gYXQgJHtyZXNvbHZlZFBhdGh9YCk7XG4gIGNvbnNvbGUubG9nKCk7XG5cbiAgaWYgKCFpc0ludGVybmFsRG9jcyAmJiBzdWJkb21haW4pIHtcbiAgICBjb25zb2xlLmxvZygnWW91ciBkb2NzIHdpbGwgYmUgYXZhaWxhYmxlIGF0OicpO1xuICAgIGNvbnNvbGUubG9nKGAgIGh0dHBzOi8vJHtzdWJkb21haW59LmRldmRvYy5zaGApO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgbG9nZ2VyLmluZm8oJ05vdGU6IFRoZSBzdWJkb21haW4gd2lsbCBiZSByZXNlcnZlZCB3aGVuIHlvdSBydW4gXCJucG0gcnVuIGRlcGxveVwiJyk7XG4gICAgY29uc29sZS5sb2coKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZygnVGhpcyBpcyBhbiBpbnRlcm5hbCBkb2N1bWVudGF0aW9uIHByb2plY3QgZm9yIGxvY2FsIGRldmVsb3BtZW50LicpO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gIH1cblxuICBjb25zb2xlLmxvZygnQXZhaWxhYmxlIGNvbW1hbmRzOicpO1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZygnICBucG0gcnVuIGRldiAgICAgICBTdGFydCB0aGUgZGV2ZWxvcG1lbnQgc2VydmVyJyk7XG4gIGNvbnNvbGUubG9nKCcgIG5wbSBydW4gYnVpbGQgICAgIEJ1aWxkIGZvciBwcm9kdWN0aW9uJyk7XG4gIGNvbnNvbGUubG9nKCcgIG5wbSBydW4gc3RhcnQgICAgIFN0YXJ0IHByb2R1Y3Rpb24gc2VydmVyJyk7XG4gIGNvbnNvbGUubG9nKCcgIG5wbSBydW4gY2hlY2sgICAgIFZhbGlkYXRlIGRvY3MuanNvbiBhbmQgTURYIGZpbGVzJyk7XG4gIGNvbnNvbGUubG9nKCcgIG5wbSBydW4gZGVwbG95ICAgIERlcGxveSB0byBEZXZEb2MgcGxhdGZvcm0nKTtcbiAgY29uc29sZS5sb2coJyAgbnBtIHJ1biBhaSAgICAgICAgU2V0IHVwIEFJIGFnZW50IGNvbmZpZ3VyYXRpb24nKTtcbiAgY29uc29sZS5sb2coJyAgbnBtIHJ1biB3aG9hbWkgICAgU2hvdyBjdXJyZW50IHByb2plY3QgaW5mbycpO1xuICBjb25zb2xlLmxvZygnICBucG0gcnVuIHVwZ3JhZGUgICBVcGRhdGUgZGV2ZG9jIHRvIGxhdGVzdCB2ZXJzaW9uJyk7XG4gIGNvbnNvbGUubG9nKCk7XG5cbiAgY29uc29sZS5sb2coJ1dlIHN1Z2dlc3QgdGhhdCB5b3UgYmVnaW4gYnkgdHlwaW5nOicpO1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZyhgICBjZCAke3Byb2plY3ROYW1lfWApO1xuICBjb25zb2xlLmxvZygnICBucG0gcnVuIGRldicpO1xuICBjb25zb2xlLmxvZygpO1xuXG4gIC8vIFNob3cgQUkgYWdlbnQgcXVpY2sgc3RhcnQgdGlwc1xuICBjb25zb2xlLmxvZygnQUkgQWdlbnQgUXVpY2sgU3RhcnQ6Jyk7XG4gIGlmIChhaVRvb2wgPT09ICdjbGF1ZGUnIHx8IGFpVG9vbCA9PT0gJ2JvdGgnKSB7XG4gICAgY29uc29sZS5sb2coJyAgQ2xhdWRlIENvZGU6IC9ib290c3RyYXAtZG9jcycpO1xuICB9XG4gIGlmIChhaVRvb2wgPT09ICdjdXJzb3InIHx8IGFpVG9vbCA9PT0gJ2JvdGgnKSB7XG4gICAgY29uc29sZS5sb2coJyAgQ3Vyc29yOiBBc2sgXCJnZW5lcmF0ZSBpbml0aWFsIGRvY3VtZW50YXRpb24gZnJvbSB0aGlzIHJlcG9cIicpO1xuICB9XG4gIGNvbnNvbGUubG9nKCk7XG5cbiAgLy8gQVNDSUkgYXJ0IGJhbm5lclxuICBjb25zb2xlLmxvZyhgXG4gIF9fX18gICAgICAgICAgICAgIF9fX18gICAgICAgICAgICAgXG4gfCAgXyBcXFxcICBfX19fXyAgIF9ffCAgXyBcXFxcICBfX18gICBfX18gXG4gfCB8IHwgfC8gXyBcXFxcIFxcXFwgLyAvfCB8IHwgfC8gXyBcXFxcIC8gX198XG4gfCB8X3wgfCAgX18vXFxcXCBWIC8gfCB8X3wgfCAoXykgfCAoX18gXG4gfF9fX18vIFxcXFxfX198IFxcXFxfLyAgfF9fX18vIFxcXFxfX18vIFxcXFxfX198XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBgKTtcbiAgY29uc29sZS5sb2coJ0hhcHB5IGRvY3VtZW50aW5nIScpO1xuICBjb25zb2xlLmxvZygpO1xufVxuIl19
732
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy9jcmVhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpZEEsd0JBeVZDO0FBMXlCRCxpREFBeUM7QUFDekMsZ0RBQXdCO0FBQ3hCLHdEQUEwQjtBQUMxQixpQ0FBeUM7QUFDekMsK0NBQTRDO0FBQzVDLCtDQUFrRDtBQUVsRCx1REFBdUQ7QUFDdkQsTUFBTSxhQUFhLEdBQUcsOENBQThDLENBQUM7QUFFckUsdUZBQXVGO0FBQ3ZGLE1BQU0sU0FBUyxHQUFHO0lBQ2hCLEtBQUssRUFBRTtRQUNMLElBQUksRUFBRSxPQUFPO1FBQ2IsV0FBVyxFQUFFLGlEQUFpRDtRQUM5RCxLQUFLLEVBQUUsU0FBUztLQUNqQjtJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxTQUFTO1FBQ2YsV0FBVyxFQUFFLHlEQUF5RDtRQUN0RSxLQUFLLEVBQUUsU0FBUztLQUNqQjtJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxTQUFTO1FBQ2YsV0FBVyxFQUFFLDJDQUEyQztRQUN4RCxLQUFLLEVBQUUsU0FBUztLQUNqQjtDQUNPLENBQUM7QUFJWCxzQkFBc0I7QUFDdEIsTUFBTSxTQUFTLEdBQUc7SUFDaEIsTUFBTSxFQUFFO1FBQ04sSUFBSSxFQUFFLFFBQVE7UUFDZCxXQUFXLEVBQUUsdURBQXVEO0tBQ3JFO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFLFVBQVU7UUFDaEIsV0FBVyxFQUFFLDREQUE0RDtLQUMxRTtDQUNPLENBQUM7QUFtQlgsc0NBQXNDO0FBQ3RDLEtBQUssVUFBVSxNQUFNLENBQUMsUUFBZ0IsRUFBRSxZQUFxQjtJQUMzRCxNQUFNLFFBQVEsR0FBRyx3REFBYSxVQUFVLEdBQUMsQ0FBQztJQUMxQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxD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SyxNQUFNLEVBQUUsQ0FBQztRQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLCtEQUErRCxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUVkLG1CQUFtQjtJQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDOzs7Ozs7O0dBT1gsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGRvd25sb2FkVGVtcGxhdGUgfSBmcm9tICdnaWdldCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHsgREVGQVVMVF9BUElfVVJMIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcblxuLy8gUmVtb3RlIHRlbXBsYXRlIHJlcG9zaXRvcnkgLSBzaW5nbGUgc3RhcnRlciB0ZW1wbGF0ZVxuY29uc3QgVEVNUExBVEVfUkVQTyA9ICdnaXRodWI6YnJhaW5maXNoLWFpL2RldmRvYy90ZW1wbGF0ZXMvc3RhcnRlcic7XG5cbi8vIEF2YWlsYWJsZSB0ZW1wbGF0ZSB0eXBlcyAoYWxsIHVzZSB0aGUgc2FtZSBzdGFydGVyIHRlbXBsYXRlLCBqdXN0IGRpZmZlcmVudCBjb25maWdzKVxuY29uc3QgVEVNUExBVEVTID0ge1xuICBiYXNpYzoge1xuICAgIG5hbWU6ICdCYXNpYycsXG4gICAgZGVzY3JpcHRpb246ICdTaW1wbGUgZG9jdW1lbnRhdGlvbiBzaXRlIHdpdGggZ3VpZGVzIGFuZCBwYWdlcycsXG4gICAgY29sb3I6ICcjMTBiOTgxJyxcbiAgfSxcbiAgb3BlbmFwaToge1xuICAgIG5hbWU6ICdPcGVuQVBJJyxcbiAgICBkZXNjcmlwdGlvbjogJ0RvY3VtZW50YXRpb24gd2l0aCBSRVNUIEFQSSByZWZlcmVuY2UgKE9wZW5BUEkvU3dhZ2dlciknLFxuICAgIGNvbG9yOiAnIzEwYjk4MScsXG4gIH0sXG4gIGdyYXBocWw6IHtcbiAgICBuYW1lOiAnR3JhcGhRTCcsXG4gICAgZGVzY3JpcHRpb246ICdEb2N1bWVudGF0aW9uIHdpdGggR3JhcGhRTCBBUEkgcGxheWdyb3VuZCcsXG4gICAgY29sb3I6ICcjZTUzNWFiJyxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbnR5cGUgVGVtcGxhdGVUeXBlID0ga2V5b2YgdHlwZW9mIFRFTVBMQVRFUztcblxuLy8gRG9jdW1lbnRhdGlvbiB0eXBlc1xuY29uc3QgRE9DX1RZUEVTID0ge1xuICBwdWJsaWM6IHtcbiAgICBuYW1lOiAnUHVibGljJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VzZXItZmFjaW5nIGRvY3Mgd2l0aCBjdXN0b20gc3ViZG9tYWluIGFuZCBkZXBsb3ltZW50JyxcbiAgfSxcbiAgaW50ZXJuYWw6IHtcbiAgICBuYW1lOiAnSW50ZXJuYWwnLFxuICAgIGRlc2NyaXB0aW9uOiAnRGV2ZWxvcGVyIGRvY3MgZm9yIGxvY2FsL3ByaXZhdGUgdXNlIChubyBzdWJkb21haW4gbmVlZGVkKScsXG4gIH0sXG59IGFzIGNvbnN0O1xuXG50eXBlIERvY1R5cGUgPSBrZXlvZiB0eXBlb2YgRE9DX1RZUEVTO1xuXG5pbnRlcmZhY2UgQ3JlYXRlT3B0aW9ucyB7XG4gIHRlbXBsYXRlPzogVGVtcGxhdGVUeXBlO1xuICBkb2NUeXBlPzogRG9jVHlwZTtcbiAgZ2l0PzogYm9vbGVhbjtcbiAgaW5zdGFsbD86IGJvb2xlYW47XG4gIHVybD86IHN0cmluZztcbiAgc3ViZG9tYWluPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ2hlY2tTdWJkb21haW5SZXNwb25zZSB7XG4gIGF2YWlsYWJsZTogYm9vbGVhbjtcbiAgZXJyb3I/OiBzdHJpbmc7XG4gIHN1Z2dlc3Rpb24/OiBzdHJpbmc7XG59XG5cbi8vIFNpbXBsZSBwcm9tcHQgaGVscGVyIHVzaW5nIHJlYWRsaW5lXG5hc3luYyBmdW5jdGlvbiBwcm9tcHQocXVlc3Rpb246IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVhZGxpbmUgPSBhd2FpdCBpbXBvcnQoJ3JlYWRsaW5lJyk7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICB9KTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBkaXNwbGF5UXVlc3Rpb24gPSBkZWZhdWx0VmFsdWUgXG4gICAgICA/IGAke3F1ZXN0aW9ufSAoJHtkZWZhdWx0VmFsdWV9KTogYFxuICAgICAgOiBgJHtxdWVzdGlvbn06IGA7XG4gICAgXG4gICAgcmwucXVlc3Rpb24oZGlzcGxheVF1ZXN0aW9uLCAoYW5zd2VyKSA9PiB7XG4gICAgICBybC5jbG9zZSgpO1xuICAgICAgcmVzb2x2ZShhbnN3ZXIudHJpbSgpIHx8IGRlZmF1bHRWYWx1ZSB8fCAnJyk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9tcHRTZWxlY3QocXVlc3Rpb246IHN0cmluZywgY2hvaWNlczogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnNvbGUubG9nKGBcXG4ke3F1ZXN0aW9ufVxcbmApO1xuICBjaG9pY2VzLmZvckVhY2goKGNob2ljZSwgaSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAgICR7aSArIDF9LiAke2Nob2ljZS5sYWJlbH1gKTtcbiAgfSk7XG4gIGNvbnNvbGUubG9nKCk7XG4gIFxuICBjb25zdCByZWFkbGluZSA9IGF3YWl0IGltcG9ydCgncmVhZGxpbmUnKTtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHJsLnF1ZXN0aW9uKCdFbnRlciBudW1iZXI6ICcsIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KGFuc3dlci50cmltKCksIDEwKSAtIDE7XG4gICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IGNob2ljZXMubGVuZ3RoKSB7XG4gICAgICAgIHJlc29sdmUoY2hvaWNlc1tpbmRleF0udmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRGVmYXVsdCB0byBmaXJzdCBjaG9pY2VcbiAgICAgICAgcmVzb2x2ZShjaG9pY2VzWzBdLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb21wdENvbmZpcm0ocXVlc3Rpb246IHN0cmluZywgZGVmYXVsdFZhbHVlID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVhZGxpbmUgPSBhd2FpdCBpbXBvcnQoJ3JlYWRsaW5lJyk7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICB9KTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBoaW50ID0gZGVmYXVsdFZhbHVlID8gJ1tZL25dJyA6ICdbeS9OXSc7XG4gICAgcmwucXVlc3Rpb24oYCR7cXVlc3Rpb259ICR7aGludH06IGAsIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gYW5zd2VyLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWQgPT09ICcnKSB7XG4gICAgICAgIHJlc29sdmUoZGVmYXVsdFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobm9ybWFsaXplZCA9PT0gJ3knIHx8IG5vcm1hbGl6ZWQgPT09ICd5ZXMnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvamVjdE5hbWUobmFtZTogc3RyaW5nKTogeyB2YWxpZDogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfSB7XG4gIGlmICghbmFtZSkge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdQcm9qZWN0IG5hbWUgaXMgcmVxdWlyZWQnIH07XG4gIH1cbiAgXG4gIC8vIENoZWNrIGZvciB2YWxpZCBucG0gcGFja2FnZSBuYW1lXG4gIGlmICghL15bYS16MC05XVthLXowLTktLl9dKiQvaS50ZXN0KG5hbWUpKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ0ludmFsaWQgcHJvamVjdCBuYW1lLiBVc2UgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIGFuZCBkYXNoZXMuJyB9O1xuICB9XG4gIFxuICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xufVxuXG4vKipcbiAqIEJhc2ljIHN1YmRvbWFpbiBmb3JtYXQgdmFsaWRhdGlvbiAoc2VydmVyIGRvZXMgZnVsbCB2YWxpZGF0aW9uIGluY2x1ZGluZyBibGFja2xpc3QpXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdWJkb21haW5Gb3JtYXQoc3ViZG9tYWluOiBzdHJpbmcpOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9IHtcbiAgaWYgKCFzdWJkb21haW4pIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIGlzIHJlcXVpcmVkJyB9O1xuICB9XG4gIFxuICBpZiAoc3ViZG9tYWluLmxlbmd0aCA8IDMpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIG11c3QgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzJyB9O1xuICB9XG4gIFxuICBpZiAoc3ViZG9tYWluLmxlbmd0aCA+IDYzKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBtdXN0IGJlIDYzIGNoYXJhY3RlcnMgb3IgbGVzcycgfTtcbiAgfVxuICBcbiAgaWYgKCEvXlthLXowLTldKFthLXowLTktXSpbYS16MC05XSk/JC8udGVzdChzdWJkb21haW4pKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aCBhbHBoYW51bWVyaWMsIGNhbiBjb250YWluIGh5cGhlbnMnIH07XG4gIH1cbiAgXG4gIGlmICgvLS0vLnRlc3Qoc3ViZG9tYWluKSkge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gY2Fubm90IGNvbnRhaW4gY29uc2VjdXRpdmUgaHlwaGVucycgfTtcbiAgfVxuICBcbiAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBzdWJkb21haW4gYXZhaWxhYmlsaXR5IHZpYSBBUEkgKGFsc28gdmFsaWRhdGVzIGFnYWluc3Qgc2VydmVyIGJsYWNrbGlzdClcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tTdWJkb21haW5BdmFpbGFiaWxpdHkoXG4gIHN1YmRvbWFpbjogc3RyaW5nLFxuICBhcGlVcmw6IHN0cmluZ1xuKTogUHJvbWlzZTxDaGVja1N1YmRvbWFpblJlc3BvbnNlPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9zdWJkb21haW5zL2NoZWNrYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzdWJkb21haW4gfSksXG4gICAgfSk7XG4gICAgXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIENoZWNrU3ViZG9tYWluUmVzcG9uc2U7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWYgQVBJIGlzIHVuYXZhaWxhYmxlLCBhbGxvdyBwcm9jZWVkaW5nICh3aWxsIGZhaWwgYXQgcmVnaXN0cmF0aW9uIGlmIGludmFsaWQpXG4gICAgcmV0dXJuIHsgYXZhaWxhYmxlOiB0cnVlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0UHJvamVjdE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVcbiAgICAucmVwbGFjZSgvLS9nLCAnICcpXG4gICAgLnJlcGxhY2UoL1xcYlxcdy9nLCAoY2hhcikgPT4gY2hhci50b1VwcGVyQ2FzZSgpKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFja2FnZU1hbmFnZXIoKTogc3RyaW5nIHtcbiAgY29uc3QgdXNlckFnZW50ID0gcHJvY2Vzcy5lbnYubnBtX2NvbmZpZ191c2VyX2FnZW50IHx8ICcnO1xuICBcbiAgaWYgKHVzZXJBZ2VudC5zdGFydHNXaXRoKCd5YXJuJykpIHtcbiAgICByZXR1cm4gJ3lhcm4nO1xuICB9XG4gIFxuICBpZiAodXNlckFnZW50LnN0YXJ0c1dpdGgoJ3BucG0nKSkge1xuICAgIHJldHVybiAncG5wbSc7XG4gIH1cbiAgXG4gIHJldHVybiAnbnBtJztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBkb2NzLmpzb24gY29uZmlndXJhdGlvbiBiYXNlZCBvbiB0ZW1wbGF0ZSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlRG9jc0NvbmZpZyhwcm9qZWN0TmFtZTogc3RyaW5nLCB0ZW1wbGF0ZVR5cGU6IFRlbXBsYXRlVHlwZSk6IG9iamVjdCB7XG4gIGNvbnN0IGZvcm1hdHRlZE5hbWUgPSBmb3JtYXRQcm9qZWN0TmFtZShwcm9qZWN0TmFtZSk7XG4gIGNvbnN0IHRlbXBsYXRlID0gVEVNUExBVEVTW3RlbXBsYXRlVHlwZV07XG4gIFxuICAvLyBCYXNlIGNvbmZpZ3VyYXRpb24gKHNoYXJlZCBhY3Jvc3MgYWxsIHRlbXBsYXRlcylcbiAgLy8gTm90ZTogQXNzZXRzIGFyZSBzdG9yZWQgaW4gdGhlIC9hc3NldHMgZm9sZGVyIGFuZCBzZXJ2ZWQgdmlhIC9hcGkvbG9jYWwtYXNzZXRzIGluIGRldiBtb2RlXG4gIC8vIFRoZW1lIHNldHRpbmdzIChjb2xvcnMsIGxvZ28pIGFyZSBpbiB0aGVtZS5qc29uXG4gIGNvbnN0IGJhc2VDb25maWcgPSB7XG4gICAgJHNjaGVtYTogJ2h0dHBzOi8vZGV2ZG9jLnNoL2RvY3MuanNvbicsXG4gICAgbmFtZTogZm9ybWF0dGVkTmFtZSxcbiAgICBmYXZpY29uOiAnL2Fzc2V0cy9mYXZpY29uLnN2ZycsXG4gICAgbmF2aWdhdGlvbjoge1xuICAgICAgdGFiczogW10gYXMgb2JqZWN0W10sXG4gICAgICBnbG9iYWw6IHtcbiAgICAgICAgYW5jaG9yczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFuY2hvcjogJ0dpdEh1YicsXG4gICAgICAgICAgICBocmVmOiAnaHR0cHM6Ly9naXRodWIuY29tL3lvdXItb3JnL3lvdXItcmVwbycsXG4gICAgICAgICAgICBpY29uOiAnZ2l0aHViLWxvZ28nLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgLy8gRG9jdW1lbnRhdGlvbiB0YWIgKGFsd2F5cyBwcmVzZW50KVxuICBjb25zdCBkb2NzVGFiID0ge1xuICAgIHRhYjogJ0RvY3VtZW50YXRpb24nLFxuICAgIHR5cGU6ICdkb2NzJyxcbiAgICBncm91cHM6IFtcbiAgICAgIHtcbiAgICAgICAgZ3JvdXA6ICdHZXR0aW5nIFN0YXJ0ZWQnLFxuICAgICAgICBpY29uOiAncm9ja2V0LWxhdW5jaCcsXG4gICAgICAgIHBhZ2VzOiBbJ2luZGV4JywgJ3F1aWNrc3RhcnQnXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGdyb3VwOiAnR3VpZGVzJyxcbiAgICAgICAgaWNvbjogJ2Jvb2stb3BlbicsXG4gICAgICAgIHBhZ2VzOiBbJ2d1aWRlcy9vdmVydmlldycsICdndWlkZXMvY29uZmlndXJhdGlvbiddLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGJhc2VDb25maWcubmF2aWdhdGlvbi50YWJzLnB1c2goZG9jc1RhYik7XG5cbiAgLy8gQWRkIEFQSSByZWZlcmVuY2UgdGFiIGJhc2VkIG9uIHRlbXBsYXRlIHR5cGVcbiAgaWYgKHRlbXBsYXRlVHlwZSA9PT0gJ29wZW5hcGknKSB7XG4gICAgYmFzZUNvbmZpZy5uYXZpZ2F0aW9uLnRhYnMucHVzaCh7XG4gICAgICB0YWI6ICdBUEkgUmVmZXJlbmNlJyxcbiAgICAgIHR5cGU6ICdvcGVuYXBpJyxcbiAgICAgIHBhdGg6ICcvYXBpLXJlZmVyZW5jZScsXG4gICAgICB2ZXJzaW9uczogW1xuICAgICAgICB7IHZlcnNpb246ICd2MScsIHNwZWM6ICdhcGktcmVmZXJlbmNlL29wZW5hcGkuanNvbicsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICAgIF0sXG4gICAgICBncm91cHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGdyb3VwOiAnT3ZlcnZpZXcnLFxuICAgICAgICAgIGljb246ICdib29rLW9wZW4nLFxuICAgICAgICAgIHBhZ2VzOiBbXG4gICAgICAgICAgICAnYXBpLXJlZmVyZW5jZS9pbnRyb2R1Y3Rpb24nLFxuICAgICAgICAgICAgJ2FwaS1yZWZlcmVuY2UvYXV0aGVudGljYXRpb24nLFxuICAgICAgICAgICAgJ2FwaS1yZWZlcmVuY2UvZXJyb3JzJyxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIEFkZCBBUEkgcGxheWdyb3VuZCBjb25maWdcbiAgICAoYmFzZUNvbmZpZyBhcyBhbnkpLmFwaSA9IHtcbiAgICAgIGJhc2VVcmw6ICdodHRwczovL2FwaS5leGFtcGxlLmNvbScsXG4gICAgICBwbGF5Z3JvdW5kOiB7XG4gICAgICAgIG1vZGU6ICdzaG93JyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSBlbHNlIGlmICh0ZW1wbGF0ZVR5cGUgPT09ICdncmFwaHFsJykge1xuICAgIGJhc2VDb25maWcubmF2aWdhdGlvbi50YWJzLnB1c2goe1xuICAgICAgdGFiOiAnR3JhcGhRTCBBUEknLFxuICAgICAgdHlwZTogJ2dyYXBocWwnLFxuICAgICAgcGF0aDogJy9ncmFwaHFsLWFwaScsXG4gICAgICBzY2hlbWE6ICdhcGktcmVmZXJlbmNlL3NjaGVtYS5ncmFwaHFsJyxcbiAgICAgIGVuZHBvaW50OiAnaHR0cHM6Ly9jb3VudHJpZXMudHJldm9yYmxhZGVzLmNvbS9ncmFwaHFsJyxcbiAgICAgIGdyb3VwczogW1xuICAgICAgICB7XG4gICAgICAgICAgZ3JvdXA6ICdPdmVydmlldycsXG4gICAgICAgICAgaWNvbjogJ2Jvb2stb3BlbicsXG4gICAgICAgICAgcGFnZXM6IFtcbiAgICAgICAgICAgICdhcGktcmVmZXJlbmNlL2ludHJvZHVjdGlvbicsXG4gICAgICAgICAgICAnYXBpLXJlZmVyZW5jZS9hdXRoZW50aWNhdGlvbicsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYmFzZUNvbmZpZztcbn1cblxuLy8gQ2xhdWRlIENvZGUgc2tpbGxzIHRvIGNyZWF0ZVxuY29uc3QgQ0xBVURFX1NLSUxMUyA9IFtcbiAgJ2Jvb3RzdHJhcC1kb2NzJyxcbiAgJ3doaXNrLXRoZW1lJyxcbiAgJ21pZ3JhdGUtZG9jcycsXG4gICdpbXBvcnQtYXBpLXNwZWMnLFxuICAnY2hlY2stZG9jcycsXG4gICdibGFtZS1kb2MnLFxuICAnY3JlYXRlLWRvYycsXG4gICd1cGRhdGUtZG9jJyxcbiAgJ2RlbGV0ZS1kb2MnLFxuICAnY29tbWl0LWRvYycsXG5dO1xuXG4vLyBDdXJzb3IgcnVsZXMgdG8gY3JlYXRlXG5jb25zdCBDVVJTT1JfUlVMRVMgPSBbXG4gICdkZXZkb2MubWRjJyxcbiAgJ2RldmRvYy1ib290c3RyYXAubWRjJyxcbiAgJ2RldmRvYy13aGlzay10aGVtZS5tZGMnLFxuICAnZGV2ZG9jLW1pZ3JhdGUubWRjJyxcbiAgJ2RldmRvYy1ibGFtZS5tZGMnLFxuICAnZGV2ZG9jLWNyZWF0ZS5tZGMnLFxuICAnZGV2ZG9jLXVwZGF0ZS5tZGMnLFxuICAnZGV2ZG9jLWRlbGV0ZS5tZGMnLFxuICAnZGV2ZG9jLWNvbW1pdC5tZGMnLFxuXTtcblxuLyoqXG4gKiBHZXQgdGhlIEFJIGFnZW50cyB0ZW1wbGF0ZSBkaXJlY3RvcnkgcGF0aFxuICovXG5mdW5jdGlvbiBnZXRBSUFnZW50c0RpcigpOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gVHJ5IHJlbGF0aXZlIHRvIGNvbXBpbGVkIGRpc3QgKHBhY2thZ2VzL2RldmRvYy9kaXN0L2NsaS9jb21tYW5kcyAtPiBwYWNrYWdlcy9kZXZkb2MvYWktYWdlbnRzKVxuICBsZXQgYWdlbnRzRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJy4uJywgJ2FpLWFnZW50cycpO1xuICBcbiAgaWYgKGZzLmV4aXN0c1N5bmMoYWdlbnRzRGlyKSkge1xuICAgIHJldHVybiBhZ2VudHNEaXI7XG4gIH1cbiAgXG4gIC8vIFRyeSBkZXZkb2MvdGVtcGxhdGVzIGF0IHJlcG8gcm9vdCAoZGV2ZWxvcG1lbnQpXG4gIGFnZW50c0RpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICcuLicsICcuLicsICcuLicsICdkZXZkb2MnLCAndGVtcGxhdGVzJywgJ3N0YXJ0ZXInKTtcbiAgXG4gIGlmIChmcy5leGlzdHNTeW5jKGFnZW50c0RpcikpIHtcbiAgICByZXR1cm4gYWdlbnRzRGlyO1xuICB9XG4gIFxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBJbnN0YWxsIEFJIGFnZW50IGNvbmZpZ3VyYXRpb24gZmlsZXNcbiAqL1xuZnVuY3Rpb24gaW5zdGFsbEFJQWdlbnRzKFxuICBwcm9qZWN0UGF0aDogc3RyaW5nLCBcbiAgdG9vbDogJ2NsYXVkZScgfCAnY3Vyc29yJyB8ICdib3RoJ1xuKTogeyBjbGF1ZGVNZDogYm9vbGVhbjsgY2xhdWRlU2tpbGxzOiBzdHJpbmdbXTsgY3Vyc29yUnVsZXM6IHN0cmluZ1tdIH0ge1xuICBjb25zdCByZXN1bHRzID0ge1xuICAgIGNsYXVkZU1kOiBmYWxzZSxcbiAgICBjbGF1ZGVTa2lsbHM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGN1cnNvclJ1bGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgfTtcblxuICBjb25zdCBhZ2VudHNEaXIgPSBnZXRBSUFnZW50c0RpcigpO1xuICBpZiAoIWFnZW50c0Rpcikge1xuICAgIGxvZ2dlci53YXJuKCdBSSBhZ2VudCB0ZW1wbGF0ZXMgbm90IGZvdW5kJyk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvLyBJbnN0YWxsIENsYXVkZSBDb2RlIGZpbGVzXG4gIGlmICh0b29sID09PSAnY2xhdWRlJyB8fCB0b29sID09PSAnYm90aCcpIHtcbiAgICAvLyBDb3B5IENMQVVERS5tZFxuICAgIGNvbnN0IGNsYXVkZU1kU291cmNlID0gcGF0aC5qb2luKGFnZW50c0RpciwgJ0NMQVVERS5tZCcpO1xuICAgIGNvbnN0IGNsYXVkZU1kRGVzdCA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgJ0NMQVVERS5tZCcpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGNsYXVkZU1kU291cmNlKSkge1xuICAgICAgZnMuY29weVN5bmMoY2xhdWRlTWRTb3VyY2UsIGNsYXVkZU1kRGVzdCk7XG4gICAgICByZXN1bHRzLmNsYXVkZU1kID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBDb3B5IHNraWxsc1xuICAgIGNvbnN0IHNvdXJjZVNraWxsc0RpciA9IHBhdGguam9pbihhZ2VudHNEaXIsICcuY2xhdWRlJywgJ3NraWxscycpO1xuICAgIGNvbnN0IGRlc3RTa2lsbHNEaXIgPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsICcuY2xhdWRlJywgJ3NraWxscycpO1xuICAgIFxuICAgIGlmIChmcy5leGlzdHNTeW5jKHNvdXJjZVNraWxsc0RpcikpIHtcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGVzdFNraWxsc0Rpcik7XG4gICAgICBcbiAgICAgIGZvciAoY29uc3Qgc2tpbGwgb2YgQ0xBVURFX1NLSUxMUykge1xuICAgICAgICBjb25zdCBzb3VyY2VEaXIgPSBwYXRoLmpvaW4oc291cmNlU2tpbGxzRGlyLCBza2lsbCk7XG4gICAgICAgIGNvbnN0IGRlc3REaXIgPSBwYXRoLmpvaW4oZGVzdFNraWxsc0Rpciwgc2tpbGwpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoc291cmNlRGlyKSkge1xuICAgICAgICAgIGZzLmNvcHlTeW5jKHNvdXJjZURpciwgZGVzdERpcik7XG4gICAgICAgICAgcmVzdWx0cy5jbGF1ZGVTa2lsbHMucHVzaChza2lsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJbnN0YWxsIEN1cnNvciBmaWxlc1xuICBpZiAodG9vbCA9PT0gJ2N1cnNvcicgfHwgdG9vbCA9PT0gJ2JvdGgnKSB7XG4gICAgY29uc3Qgc291cmNlUnVsZXNEaXIgPSBwYXRoLmpvaW4oYWdlbnRzRGlyLCAnLmN1cnNvcicsICdydWxlcycpO1xuICAgIGNvbnN0IGRlc3RSdWxlc0RpciA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgJy5jdXJzb3InLCAncnVsZXMnKTtcbiAgICBcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhzb3VyY2VSdWxlc0RpcikpIHtcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGVzdFJ1bGVzRGlyKTtcbiAgICAgIFxuICAgICAgZm9yIChjb25zdCBydWxlIG9mIENVUlNPUl9SVUxFUykge1xuICAgICAgICBjb25zdCBzb3VyY2VQYXRoID0gcGF0aC5qb2luKHNvdXJjZVJ1bGVzRGlyLCBydWxlKTtcbiAgICAgICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4oZGVzdFJ1bGVzRGlyLCBydWxlKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHNvdXJjZVBhdGgpKSB7XG4gICAgICAgICAgZnMuY29weVN5bmMoc291cmNlUGF0aCwgZGVzdFBhdGgpO1xuICAgICAgICAgIHJlc3VsdHMuY3Vyc29yUnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG4vKipcbiAqIENsZWFuIHVwIHVudXNlZCBBUEkgZmlsZXMgYmFzZWQgb24gdGVtcGxhdGUgdHlwZVxuICovXG5mdW5jdGlvbiBjbGVhbnVwVW51c2VkRmlsZXMocmVzb2x2ZWRQYXRoOiBzdHJpbmcsIHRlbXBsYXRlVHlwZTogVGVtcGxhdGVUeXBlKTogdm9pZCB7XG4gIGNvbnN0IGFwaVJlZlBhdGggPSBwYXRoLmpvaW4ocmVzb2x2ZWRQYXRoLCAnYXBpLXJlZmVyZW5jZScpO1xuICBcbiAgaWYgKHRlbXBsYXRlVHlwZSA9PT0gJ2Jhc2ljJykge1xuICAgIC8vIFJlbW92ZSBlbnRpcmUgYXBpLXJlZmVyZW5jZSBmb2xkZXIgZm9yIGJhc2ljIHRlbXBsYXRlXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoYXBpUmVmUGF0aCkpIHtcbiAgICAgIGZzLnJlbW92ZVN5bmMoYXBpUmVmUGF0aCk7XG4gICAgICBsb2dnZXIuZGVidWcoJ1JlbW92ZWQgYXBpLXJlZmVyZW5jZSBmb2xkZXIgKG5vdCBuZWVkZWQgZm9yIGJhc2ljIHRlbXBsYXRlKScpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0ZW1wbGF0ZVR5cGUgPT09ICdvcGVuYXBpJykge1xuICAgIC8vIFJlbW92ZSBHcmFwaFFMIHNjaGVtYSBmb3IgT3BlbkFQSSB0ZW1wbGF0ZVxuICAgIGNvbnN0IGdyYXBocWxTY2hlbWEgPSBwYXRoLmpvaW4oYXBpUmVmUGF0aCwgJ3NjaGVtYS5ncmFwaHFsJyk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZ3JhcGhxbFNjaGVtYSkpIHtcbiAgICAgIGZzLnJlbW92ZVN5bmMoZ3JhcGhxbFNjaGVtYSk7XG4gICAgICBsb2dnZXIuZGVidWcoJ1JlbW92ZWQgc2NoZW1hLmdyYXBocWwgKG5vdCBuZWVkZWQgZm9yIE9wZW5BUEkgdGVtcGxhdGUpJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRlbXBsYXRlVHlwZSA9PT0gJ2dyYXBocWwnKSB7XG4gICAgLy8gUmVtb3ZlIE9wZW5BUEkgc3BlYyBhbmQgZXJyb3JzLm1keCBmb3IgR3JhcGhRTCB0ZW1wbGF0ZVxuICAgIGNvbnN0IG9wZW5hcGlTcGVjID0gcGF0aC5qb2luKGFwaVJlZlBhdGgsICdvcGVuYXBpLmpzb24nKTtcbiAgICBjb25zdCBlcnJvcnNGaWxlID0gcGF0aC5qb2luKGFwaVJlZlBhdGgsICdlcnJvcnMubWR4Jyk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMob3BlbmFwaVNwZWMpKSB7XG4gICAgICBmcy5yZW1vdmVTeW5jKG9wZW5hcGlTcGVjKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnUmVtb3ZlZCBvcGVuYXBpLmpzb24gKG5vdCBuZWVkZWQgZm9yIEdyYXBoUUwgdGVtcGxhdGUpJyk7XG4gICAgfVxuICAgIGlmIChmcy5leGlzdHNTeW5jKGVycm9yc0ZpbGUpKSB7XG4gICAgICBmcy5yZW1vdmVTeW5jKGVycm9yc0ZpbGUpO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdSZW1vdmVkIGVycm9ycy5tZHggKG5vdCBuZWVkZWQgZm9yIEdyYXBoUUwgdGVtcGxhdGUpJyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGUocHJvamVjdERpcmVjdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkLCBvcHRpb25zOiBDcmVhdGVPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGxvZ2dlci5pbmZvKCfwn5CfIENyZWF0ZSBEZXZEb2MgRG9jJyk7XG4gIGNvbnNvbGUubG9nKCk7XG5cbiAgY29uc3QgYXBpVXJsID0gb3B0aW9ucy51cmwgfHwgcHJvY2Vzcy5lbnYuREVWRE9DX0FQSV9VUkwgfHwgREVGQVVMVF9BUElfVVJMO1xuXG4gIC8vIEdldCBwcm9qZWN0IG5hbWUgaWYgbm90IHByb3ZpZGVkXG4gIGxldCBwcm9qZWN0UGF0aCA9IHByb2plY3REaXJlY3Rvcnk7XG5cbiAgaWYgKCFwcm9qZWN0UGF0aCkge1xuICAgIHByb2plY3RQYXRoID0gYXdhaXQgcHJvbXB0KCdXaGF0IGlzIHlvdXIgcHJvamVjdCBuYW1lZD8nLCAnbXktZG9jcycpO1xuICAgIFxuICAgIGlmICghcHJvamVjdFBhdGgpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignUHJvamVjdCBuYW1lIGlzIHJlcXVpcmVkJyk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgcHJvamVjdCBuYW1lXG4gIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZVByb2plY3ROYW1lKHByb2plY3RQYXRoKTtcbiAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgbG9nZ2VyLmVycm9yKHZhbGlkYXRpb24uZXJyb3IgfHwgJ0ludmFsaWQgcHJvamVjdCBuYW1lJyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8gR2V0IGRvYyB0eXBlIHNlbGVjdGlvbiBpZiBub3QgcHJvdmlkZWRcbiAgbGV0IGRvY1R5cGU6IERvY1R5cGUgPSBvcHRpb25zLmRvY1R5cGUgfHwgJ3B1YmxpYyc7XG4gIFxuICBpZiAoIW9wdGlvbnMuZG9jVHlwZSkge1xuICAgIGNvbnN0IGRvY1R5cGVDaG9pY2VzID0gT2JqZWN0LmVudHJpZXMoRE9DX1RZUEVTKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgIHZhbHVlOiBrZXksXG4gICAgICBsYWJlbDogYCR7dmFsdWUubmFtZX0gLSAke3ZhbHVlLmRlc2NyaXB0aW9ufWAsXG4gICAgfSkpO1xuXG4gICAgZG9jVHlwZSA9IGF3YWl0IHByb21wdFNlbGVjdCgnV2hhdCB0eXBlIG9mIGRvY3VtZW50YXRpb24gYXJlIHlvdSBjcmVhdGluZz8nLCBkb2NUeXBlQ2hvaWNlcykgYXMgRG9jVHlwZTtcbiAgfVxuXG4gIGNvbnN0IGlzSW50ZXJuYWxEb2NzID0gZG9jVHlwZSA9PT0gJ2ludGVybmFsJztcblxuICAvLyBHZXQgdGVtcGxhdGUgc2VsZWN0aW9uIGlmIG5vdCBwcm92aWRlZFxuICBsZXQgdGVtcGxhdGU6IFRlbXBsYXRlVHlwZSA9IG9wdGlvbnMudGVtcGxhdGUgfHwgJ2Jhc2ljJztcbiAgXG4gIGlmICghb3B0aW9ucy50ZW1wbGF0ZSkge1xuICAgIGNvbnN0IHRlbXBsYXRlQ2hvaWNlcyA9IE9iamVjdC5lbnRyaWVzKFRFTVBMQVRFUykubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICB2YWx1ZToga2V5LFxuICAgICAgbGFiZWw6IGAke3ZhbHVlLm5hbWV9IC0gJHt2YWx1ZS5kZXNjcmlwdGlvbn1gLFxuICAgIH0pKTtcblxuICAgIHRlbXBsYXRlID0gYXdhaXQgcHJvbXB0U2VsZWN0KCdXaGljaCB0ZW1wbGF0ZSB3b3VsZCB5b3UgbGlrZSB0byB1c2U/JywgdGVtcGxhdGVDaG9pY2VzKSBhcyBUZW1wbGF0ZVR5cGU7XG4gIH1cblxuICAvLyBSZXNvbHZlIGZ1bGwgcGF0aFxuICBjb25zdCByZXNvbHZlZFBhdGggPSBwYXRoLnJlc29sdmUocHJvamVjdFBhdGgpO1xuICBjb25zdCBwcm9qZWN0TmFtZSA9IHBhdGguYmFzZW5hbWUocmVzb2x2ZWRQYXRoKTtcbiAgY29uc3Qgc2x1ZyA9IHByb2plY3ROYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldKy9nLCAnLScpLnJlcGxhY2UoL14tfC0kL2csICcnKTtcblxuICAvLyBHZXQgc3ViZG9tYWluIC0gb25seSBmb3IgcHVibGljIGRvY3NcbiAgbGV0IHN1YmRvbWFpbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucy5zdWJkb21haW47XG4gIFxuICBpZiAoIWlzSW50ZXJuYWxEb2NzKSB7XG4gICAgaWYgKCFzdWJkb21haW4pIHtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBzdWJkb21haW4gPSBhd2FpdCBwcm9tcHQoYEVudGVyIHN1YmRvbWFpbiBmb3IgeW91ciBkb2NzICgke3NsdWd9LmRldmRvYy5zaClgLCBzbHVnKTtcbiAgICAgIHN1YmRvbWFpbiA9IHN1YmRvbWFpbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05LV0vZywgJy0nKS5yZXBsYWNlKC9eLXwtJC9nLCAnJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgc3ViZG9tYWluIGZvcm1hdCBsb2NhbGx5XG4gICAgY29uc3QgZm9ybWF0Q2hlY2sgPSBpc1ZhbGlkU3ViZG9tYWluRm9ybWF0KHN1YmRvbWFpbik7XG4gICAgaWYgKCFmb3JtYXRDaGVjay52YWxpZCkge1xuICAgICAgbG9nZ2VyLmVycm9yKGZvcm1hdENoZWNrLmVycm9yISk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgc3ViZG9tYWluIGF2YWlsYWJpbGl0eSB2aWEgQVBJIChzZXJ2ZXIgdmFsaWRhdGVzIGJsYWNrbGlzdClcbiAgICAvLyBMb29wIHVudGlsIHdlIGZpbmQgYW4gYXZhaWxhYmxlIHN1YmRvbWFpblxuICAgIGxldCBzdWJkb21haW5BdmFpbGFibGUgPSBmYWxzZTtcbiAgICB3aGlsZSAoIXN1YmRvbWFpbkF2YWlsYWJsZSkge1xuICAgICAgbG9nZ2VyLmluZm8oYENoZWNraW5nIGlmICR7c3ViZG9tYWlufS5kZXZkb2Muc2ggaXMgYXZhaWxhYmxlLi4uYCk7XG4gICAgICBjb25zdCBhdmFpbGFiaWxpdHkgPSBhd2FpdCBjaGVja1N1YmRvbWFpbkF2YWlsYWJpbGl0eShzdWJkb21haW4sIGFwaVVybCk7XG4gICAgICBcbiAgICAgIGlmICghYXZhaWxhYmlsaXR5LmF2YWlsYWJsZSkge1xuICAgICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgICBsb2dnZXIud2FybihhdmFpbGFiaWxpdHkuZXJyb3IgfHwgYFN1YmRvbWFpbiBcIiR7c3ViZG9tYWlufVwiIGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBhdmFpbGFiaWxpdHkuc3VnZ2VzdGlvbiB8fCBgJHtzdWJkb21haW59LWRvY3NgO1xuICAgICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgICBsb2dnZXIuaW5mbyhgU3VnZ2VzdGlvbjogJHtzdWdnZXN0aW9ufS5kZXZkb2Muc2hgKTtcbiAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFByb21wdCBmb3IgbmV3IHN1YmRvbWFpblxuICAgICAgICBzdWJkb21haW4gPSBhd2FpdCBwcm9tcHQoJ0VudGVyIGEgZGlmZmVyZW50IHN1YmRvbWFpbicsIHN1Z2dlc3Rpb24pO1xuICAgICAgICBzdWJkb21haW4gPSBzdWJkb21haW4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOS1dL2csICctJykucmVwbGFjZSgvXi18LSQvZywgJycpO1xuICAgICAgICBcbiAgICAgICAgLy8gVmFsaWRhdGUgZm9ybWF0XG4gICAgICAgIGNvbnN0IGZvcm1hdENoZWNrID0gaXNWYWxpZFN1YmRvbWFpbkZvcm1hdChzdWJkb21haW4pO1xuICAgICAgICBpZiAoIWZvcm1hdENoZWNrLnZhbGlkKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGZvcm1hdENoZWNrLmVycm9yISk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWJkb21haW5BdmFpbGFibGUgPSB0cnVlO1xuICAgICAgICBsb2dnZXIuc3VjY2Vzcyhg4pyTICR7c3ViZG9tYWlufS5kZXZkb2Muc2ggaXMgYXZhaWxhYmxlIWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIGRpcmVjdG9yeSBleGlzdHNcbiAgaWYgKGZzLmV4aXN0c1N5bmMocmVzb2x2ZWRQYXRoKSkge1xuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMocmVzb2x2ZWRQYXRoKTtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgb3ZlcndyaXRlID0gYXdhaXQgcHJvbXB0Q29uZmlybShgRGlyZWN0b3J5ICR7cHJvamVjdE5hbWV9IGlzIG5vdCBlbXB0eS4gQ29udGludWUgYW55d2F5P2AsIGZhbHNlKTtcbiAgICAgIFxuICAgICAgaWYgKCFvdmVyd3JpdGUpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdPcGVyYXRpb24gY2FuY2VsbGVkJyk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzZWxlY3RlZFRlbXBsYXRlID0gVEVNUExBVEVTW3RlbXBsYXRlXTtcbiAgY29uc29sZS5sb2coKTtcbiAgbG9nZ2VyLmluZm8oYENyZWF0aW5nIGEgbmV3ICR7c2VsZWN0ZWRUZW1wbGF0ZS5uYW1lfSBEZXZEb2MgZG9jdW1lbnRhdGlvbiBzaXRlIGluICR7cmVzb2x2ZWRQYXRofWApO1xuICBjb25zb2xlLmxvZygpO1xuXG4gIC8vIENyZWF0ZSBwcm9qZWN0IGRpcmVjdG9yeVxuICBmcy5lbnN1cmVEaXJTeW5jKHJlc29sdmVkUGF0aCk7XG5cbiAgLy8gRG93bmxvYWQgdGVtcGxhdGUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSAoYWx3YXlzIHVzZSBzdGFydGVyIHRlbXBsYXRlKVxuICBsb2dnZXIuaW5mbygnRG93bmxvYWRpbmcgdGVtcGxhdGUuLi4nKTtcbiAgXG4gIHRyeSB7XG4gICAgLy8gVHJ5IHRvIGRvd25sb2FkIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgZmlyc3RcbiAgICBhd2FpdCBkb3dubG9hZFRlbXBsYXRlKFRFTVBMQVRFX1JFUE8sIHtcbiAgICAgIGRpcjogcmVzb2x2ZWRQYXRoLFxuICAgICAgZm9yY2U6IHRydWUsXG4gICAgfSk7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoJ0Rvd25sb2FkZWQgc3RhcnRlciB0ZW1wbGF0ZScpO1xuICB9IGNhdGNoIChkb3dubG9hZEVycm9yKSB7XG4gICAgLy8gRmFsbCBiYWNrIHRvIGxvY2FsIHRlbXBsYXRlcyAoZm9yIGRldmVsb3BtZW50IG9yIG9mZmxpbmUgdXNhZ2UpXG4gICAgbG9nZ2VyLmRlYnVnKGBSZW1vdGUgZG93bmxvYWQgZmFpbGVkOiAke2Rvd25sb2FkRXJyb3J9YCk7XG4gICAgbG9nZ2VyLmluZm8oJ0ZhbGxpbmcgYmFjayB0byBsb2NhbCB0ZW1wbGF0ZS4uLicpO1xuICAgIFxuICAgIGNvbnN0IHRlbXBsYXRlRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJy4uJywgJ3RlbXBsYXRlcycsICdzdGFydGVyJyk7XG4gICAgXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRlbXBsYXRlRGlyKSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdUZW1wbGF0ZSBcInN0YXJ0ZXJcIiBub3QgZm91bmQnKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgTG9va2VkIGZvciB0ZW1wbGF0ZSBhdDogJHt0ZW1wbGF0ZURpcn1gKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnUmVtb3RlIHNvdXJjZTogJyArIFRFTVBMQVRFX1JFUE8pO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGZzLmNvcHlTeW5jKHRlbXBsYXRlRGlyLCByZXNvbHZlZFBhdGgsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgIGxvZ2dlci5zdWNjZXNzKCdDb3BpZWQgbG9jYWwgdGVtcGxhdGUnKTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBwYWNrYWdlLmpzb24gd2l0aCBwcm9qZWN0IG5hbWVcbiAgY29uc3QgcGtnUGF0aCA9IHBhdGguam9pbihyZXNvbHZlZFBhdGgsICdwYWNrYWdlLmpzb24nKTtcbiAgaWYgKGZzLmV4aXN0c1N5bmMocGtnUGF0aCkpIHtcbiAgICBjb25zdCBwa2cgPSBmcy5yZWFkSnNvblN5bmMocGtnUGF0aCk7XG4gICAgcGtnLm5hbWUgPSBwcm9qZWN0TmFtZTtcbiAgICBmcy53cml0ZUpzb25TeW5jKHBrZ1BhdGgsIHBrZywgeyBzcGFjZXM6IDIgfSk7XG4gIH1cblxuICAvLyBHZW5lcmF0ZSBkb2NzLmpzb24gYmFzZWQgb24gdGVtcGxhdGUgdHlwZVxuICBjb25zdCBkb2NzQ29uZmlnID0gZ2VuZXJhdGVEb2NzQ29uZmlnKHByb2plY3ROYW1lLCB0ZW1wbGF0ZSk7XG4gIGNvbnN0IGRvY3NQYXRoID0gcGF0aC5qb2luKHJlc29sdmVkUGF0aCwgJ2RvY3MuanNvbicpO1xuICBmcy53cml0ZUpzb25TeW5jKGRvY3NQYXRoLCBkb2NzQ29uZmlnLCB7IHNwYWNlczogMiB9KTtcbiAgbG9nZ2VyLnN1Y2Nlc3MoYEdlbmVyYXRlZCBkb2NzLmpzb24gZm9yICR7c2VsZWN0ZWRUZW1wbGF0ZS5uYW1lfSB0ZW1wbGF0ZWApO1xuXG4gIC8vIFVwZGF0ZSB0aGVtZS5qc29uIHdpdGggdGVtcGxhdGUgY29sb3JcbiAgY29uc3QgdGhlbWVQYXRoID0gcGF0aC5qb2luKHJlc29sdmVkUGF0aCwgJ3RoZW1lLmpzb24nKTtcbiAgaWYgKGZzLmV4aXN0c1N5bmModGhlbWVQYXRoKSkge1xuICAgIGNvbnN0IHRoZW1lID0gZnMucmVhZEpzb25TeW5jKHRoZW1lUGF0aCk7XG4gICAgdGhlbWUuY29sb3JzID0ge1xuICAgICAgcHJpbWFyeTogc2VsZWN0ZWRUZW1wbGF0ZS5jb2xvcixcbiAgICAgIHByaW1hcnlMaWdodDogc2VsZWN0ZWRUZW1wbGF0ZS5jb2xvcixcbiAgICAgIHByaW1hcnlEYXJrOiBzZWxlY3RlZFRlbXBsYXRlLmNvbG9yLFxuICAgIH07XG4gICAgZnMud3JpdGVKc29uU3luYyh0aGVtZVBhdGgsIHRoZW1lLCB7IHNwYWNlczogMiB9KTtcbiAgfVxuXG4gIC8vIENsZWFuIHVwIHVudXNlZCBmaWxlcyBiYXNlZCBvbiB0ZW1wbGF0ZSB0eXBlXG4gIGNsZWFudXBVbnVzZWRGaWxlcyhyZXNvbHZlZFBhdGgsIHRlbXBsYXRlKTtcblxuICAvLyBDcmVhdGUgLmRldmRvYy5qc29uIHdpdGggcHJvamVjdCBjb25maWdcbiAgLy8gRm9yIHB1YmxpYyBkb2NzOiBzdWJkb21haW4gd2lsbCBvbmx5IGJlIHJlc2VydmVkIHdoZW4gdGhlIHVzZXIgYWN0dWFsbHkgZGVwbG95c1xuICAvLyBGb3IgaW50ZXJuYWwgZG9jczogbm8gc3ViZG9tYWluIG5lZWRlZFxuICBjb25zdCBkZXZkb2NDb25maWdQYXRoID0gcGF0aC5qb2luKHJlc29sdmVkUGF0aCwgJy5kZXZkb2MuanNvbicpO1xuICBcbiAgY29uc3QgZGV2ZG9jQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBwcm9qZWN0SWQ6IGAke3NsdWd9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDgpfWAsXG4gICAgbmFtZTogZm9ybWF0UHJvamVjdE5hbWUocHJvamVjdE5hbWUpLFxuICAgIHNsdWc6IHNsdWcsXG4gICAgZG9jVHlwZTogZG9jVHlwZSxcbiAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgfTtcblxuICAvLyBPbmx5IGFkZCBzdWJkb21haW4gZm9yIHB1YmxpYyBkb2NzXG4gIGlmICghaXNJbnRlcm5hbERvY3MgJiYgc3ViZG9tYWluKSB7XG4gICAgZGV2ZG9jQ29uZmlnLnN1YmRvbWFpbiA9IHN1YmRvbWFpbjtcbiAgfVxuXG4gIGZzLndyaXRlSnNvblN5bmMoZGV2ZG9jQ29uZmlnUGF0aCwgZGV2ZG9jQ29uZmlnLCB7IHNwYWNlczogMiB9KTtcbiAgbG9nZ2VyLnN1Y2Nlc3MoJ0NyZWF0ZWQgLmRldmRvYy5qc29uJyk7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGUubG9nKCcgIERvYyBUeXBlOicsIERPQ19UWVBFU1tkb2NUeXBlXS5uYW1lKTtcbiAgaWYgKCFpc0ludGVybmFsRG9jcyAmJiBzdWJkb21haW4pIHtcbiAgICBjb25zb2xlLmxvZygnICBTdWJkb21haW46JywgYCR7c3ViZG9tYWlufS5kZXZkb2Muc2hgKTtcbiAgICBjb25zb2xlLmxvZygnICBTdGF0dXM6JywgJ05vdCB5ZXQgZGVwbG95ZWQgKHN1YmRvbWFpbiB3aWxsIGJlIHJlc2VydmVkIG9uIGZpcnN0IGRlcGxveSknKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZygnICBTdGF0dXM6JywgJ0ludGVybmFsIGRvY3MgKGxvY2FsIGRldmVsb3BtZW50IG9ubHkpJyk7XG4gIH1cblxuICAvLyBJbml0aWFsaXplIGdpdCAoc2tpcCBpZiBhbHJlYWR5IGluc2lkZSBhIGdpdCByZXBvc2l0b3J5KVxuICBpZiAob3B0aW9ucy5naXQgIT09IGZhbHNlKSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgaW5zaWRlIGFuIGV4aXN0aW5nIGdpdCByZXBvc2l0b3J5XG4gICAgbGV0IGlzSW5zaWRlR2l0UmVwbyA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBleGVjU3luYygnZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS13b3JrLXRyZWUnLCB7XG4gICAgICAgIGN3ZDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICBzdGRpbzogJ2lnbm9yZScsXG4gICAgICB9KTtcbiAgICAgIGlzSW5zaWRlR2l0UmVwbyA9IHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBOb3QgaW5zaWRlIGEgZ2l0IHJlcG9cbiAgICB9XG5cbiAgICBpZiAoaXNJbnNpZGVHaXRSZXBvKSB7XG4gICAgICBsb2dnZXIuaW5mbygnU2tpcHBpbmcgZ2l0IGluaXQgKGFscmVhZHkgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdJbml0aWFsaXppbmcgZ2l0IHJlcG9zaXRvcnkuLi4nKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV4ZWNTeW5jKCdnaXQgaW5pdCcsIHsgY3dkOiByZXNvbHZlZFBhdGgsIHN0ZGlvOiAnaWdub3JlJyB9KTtcbiAgICAgICAgZXhlY1N5bmMoJ2dpdCBhZGQgLUEnLCB7IGN3ZDogcmVzb2x2ZWRQYXRoLCBzdGRpbzogJ2lnbm9yZScgfSk7XG4gICAgICAgIGV4ZWNTeW5jKCdnaXQgY29tbWl0IC1tIFwiSW5pdGlhbCBjb21taXQgZnJvbSBkZXZkb2MgY3JlYXRlXCInLCB7XG4gICAgICAgICAgY3dkOiByZXNvbHZlZFBhdGgsXG4gICAgICAgICAgc3RkaW86ICdpZ25vcmUnLFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJ0dpdCByZXBvc2l0b3J5IGluaXRpYWxpemVkJyk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0NvdWxkIG5vdCBpbml0aWFsaXplIGdpdCByZXBvc2l0b3J5Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gSW5zdGFsbCBkZXBlbmRlbmNpZXNcbiAgaWYgKG9wdGlvbnMuaW5zdGFsbCAhPT0gZmFsc2UpIHtcbiAgICBsb2dnZXIuaW5mbygnSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuLi4nKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFja2FnZU1hbmFnZXIgPSBnZXRQYWNrYWdlTWFuYWdlcigpO1xuICAgICAgZXhlY1N5bmMoYCR7cGFja2FnZU1hbmFnZXJ9IGluc3RhbGxgLCB7XG4gICAgICAgIGN3ZDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICBzdGRpbzogJ2luaGVyaXQnLFxuICAgICAgfSk7XG4gICAgICBsb2dnZXIuc3VjY2VzcygnRGVwZW5kZW5jaWVzIGluc3RhbGxlZCcpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgbG9nZ2VyLndhcm4oJ0NvdWxkIG5vdCBpbnN0YWxsIGRlcGVuZGVuY2llcycpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEluc3RhbGwgQUkgYWdlbnRzIC0gYWx3YXlzIHByb21wdCBhcyBwYXJ0IG9mIGNyZWF0ZSBmbG93XG4gIGxldCBhaVRvb2w6ICdjbGF1ZGUnIHwgJ2N1cnNvcicgfCAnYm90aCcgfCBudWxsID0gbnVsbDtcbiAgXG4gIGNvbnN0IGFpQ2hvaWNlcyA9IFtcbiAgICB7IHZhbHVlOiAnYm90aCcsIGxhYmVsOiAnQm90aCAtIENsYXVkZSBDb2RlIGFuZCBDdXJzb3IgKHJlY29tbWVuZGVkKScgfSxcbiAgICB7IHZhbHVlOiAnY3Vyc29yJywgbGFiZWw6ICdDdXJzb3IgLSBSdWxlcyBmb3IgQ3Vyc29yIElERScgfSxcbiAgICB7IHZhbHVlOiAnY2xhdWRlJywgbGFiZWw6ICdDbGF1ZGUgQ29kZSAtIFNraWxscyBhbmQgQ0xBVURFLm1kJyB9LFxuICBdO1xuICBjb25zdCBhaVNlbGVjdGlvbiA9IGF3YWl0IHByb21wdFNlbGVjdCgnV2hpY2ggQUkgY29kaW5nIGFzc2lzdGFudCBkbyB5b3UgdXNlPycsIGFpQ2hvaWNlcyk7XG4gIGFpVG9vbCA9IGFpU2VsZWN0aW9uIGFzICdjbGF1ZGUnIHwgJ2N1cnNvcicgfCAnYm90aCc7XG5cbiAgaWYgKGFpVG9vbCkge1xuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgbG9nZ2VyLmluZm8oJ1NldHRpbmcgdXAgQUkgYWdlbnQgY29uZmlndXJhdGlvbi4uLicpO1xuICAgIGNvbnN0IGFpUmVzdWx0cyA9IGluc3RhbGxBSUFnZW50cyhyZXNvbHZlZFBhdGgsIGFpVG9vbCk7XG4gICAgXG4gICAgaWYgKGFpUmVzdWx0cy5jbGF1ZGVNZCkge1xuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJ0NyZWF0ZWQgQ0xBVURFLm1kJyk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc2tpbGwgb2YgYWlSZXN1bHRzLmNsYXVkZVNraWxscykge1xuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYENyZWF0ZWQgLmNsYXVkZS9za2lsbHMvJHtza2lsbH0vU0tJTEwubWRgKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBydWxlIG9mIGFpUmVzdWx0cy5jdXJzb3JSdWxlcykge1xuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYENyZWF0ZWQgLmN1cnNvci9ydWxlcy8ke3J1bGV9YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3VjY2VzcyBtZXNzYWdlXG4gIGNvbnNvbGUubG9nKCk7XG4gIGxvZ2dlci5zdWNjZXNzKGBDcmVhdGVkICR7cHJvamVjdE5hbWV9IGF0ICR7cmVzb2x2ZWRQYXRofWApO1xuICBjb25zb2xlLmxvZygpO1xuXG4gIGlmICghaXNJbnRlcm5hbERvY3MgJiYgc3ViZG9tYWluKSB7XG4gICAgY29uc29sZS5sb2coJ1lvdXIgZG9jcyB3aWxsIGJlIGF2YWlsYWJsZSBhdDonKTtcbiAgICBjb25zb2xlLmxvZyhgICBodHRwczovLyR7c3ViZG9tYWlufS5kZXZkb2Muc2hgKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICAgIGxvZ2dlci5pbmZvKCdOb3RlOiBUaGUgc3ViZG9tYWluIHdpbGwgYmUgcmVzZXJ2ZWQgd2hlbiB5b3UgcnVuIFwibnBtIHJ1biBkZXBsb3lcIicpO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coJ1RoaXMgaXMgYW4gaW50ZXJuYWwgZG9jdW1lbnRhdGlvbiBwcm9qZWN0IGZvciBsb2NhbCBkZXZlbG9wbWVudC4nKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICB9XG5cbiAgY29uc29sZS5sb2coJ0F2YWlsYWJsZSBjb21tYW5kczonKTtcbiAgY29uc29sZS5sb2coKTtcbiAgY29uc29sZS5sb2coJyAgbnBtIHJ1biBkZXYgICAgICAgU3RhcnQgdGhlIGRldmVsb3BtZW50IHNlcnZlcicpO1xuICBjb25zb2xlLmxvZygnICBucG0gcnVuIGJ1aWxkICAgICBCdWlsZCBmb3IgcHJvZHVjdGlvbicpO1xuICBjb25zb2xlLmxvZygnICBucG0gcnVuIHN0YXJ0ICAgICBTdGFydCBwcm9kdWN0aW9uIHNlcnZlcicpO1xuICBjb25zb2xlLmxvZygnICBucG0gcnVuIGNoZWNrICAgICBWYWxpZGF0ZSBkb2NzLmpzb24gYW5kIE1EWCBmaWxlcycpO1xuICBjb25zb2xlLmxvZygnICBucG0gcnVuIGRlcGxveSAgICBEZXBsb3kgdG8gRGV2RG9jIHBsYXRmb3JtJyk7XG4gIGNvbnNvbGUubG9nKCcgIG5wbSBydW4gYWkgICAgICAgIFNldCB1cCBBSSBhZ2VudCBjb25maWd1cmF0aW9uJyk7XG4gIGNvbnNvbGUubG9nKCcgIG5wbSBydW4gd2hvYW1pICAgIFNob3cgY3VycmVudCBwcm9qZWN0IGluZm8nKTtcbiAgY29uc29sZS5sb2coJyAgbnBtIHJ1biB1cGdyYWRlICAgVXBkYXRlIGRldmRvYyB0byBsYXRlc3QgdmVyc2lvbicpO1xuICBjb25zb2xlLmxvZygpO1xuXG4gIGNvbnNvbGUubG9nKCdXZSBzdWdnZXN0IHRoYXQgeW91IGJlZ2luIGJ5IHR5cGluZzonKTtcbiAgY29uc29sZS5sb2coKTtcbiAgY29uc29sZS5sb2coYCAgY2QgJHtwcm9qZWN0TmFtZX1gKTtcbiAgY29uc29sZS5sb2coJyAgbnBtIHJ1biBkZXYnKTtcbiAgY29uc29sZS5sb2coKTtcblxuICAvLyBTaG93IEFJIGFnZW50IHF1aWNrIHN0YXJ0IHRpcHNcbiAgY29uc29sZS5sb2coJ0FJIEFnZW50IFF1aWNrIFN0YXJ0OicpO1xuICBpZiAoYWlUb29sID09PSAnY2xhdWRlJyB8fCBhaVRvb2wgPT09ICdib3RoJykge1xuICAgIGNvbnNvbGUubG9nKCcgIENsYXVkZSBDb2RlOiAvYm9vdHN0cmFwLWRvY3MnKTtcbiAgfVxuICBpZiAoYWlUb29sID09PSAnY3Vyc29yJyB8fCBhaVRvb2wgPT09ICdib3RoJykge1xuICAgIGNvbnNvbGUubG9nKCcgIEN1cnNvcjogQXNrIFwiZ2VuZXJhdGUgaW5pdGlhbCBkb2N1bWVudGF0aW9uIGZyb20gdGhpcyByZXBvXCInKTtcbiAgfVxuICBjb25zb2xlLmxvZygpO1xuXG4gIC8vIEFTQ0lJIGFydCBiYW5uZXJcbiAgY29uc29sZS5sb2coYFxuICBfX19fICAgICAgICAgICAgICBfX19fICAgICAgICAgICAgIFxuIHwgIF8gXFxcXCAgX19fX18gICBfX3wgIF8gXFxcXCAgX19fICAgX19fIFxuIHwgfCB8IHwvIF8gXFxcXCBcXFxcIC8gL3wgfCB8IHwvIF8gXFxcXCAvIF9ffFxuIHwgfF98IHwgIF9fL1xcXFwgViAvIHwgfF98IHwgKF8pIHwgKF9fIFxuIHxfX19fLyBcXFxcX19ffCBcXFxcXy8gIHxfX19fLyBcXFxcX19fLyBcXFxcX19ffFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgYCk7XG4gIGNvbnNvbGUubG9nKCdIYXBweSBkb2N1bWVudGluZyEnKTtcbiAgY29uc29sZS5sb2coKTtcbn1cbiJdfQ==
@@ -0,0 +1,30 @@
1
+ /**
2
+ * SDK Generation CLI Commands
3
+ */
4
+ interface SDKInitOptions {
5
+ openapi?: string;
6
+ packageName?: string;
7
+ force?: boolean;
8
+ }
9
+ /**
10
+ * Initialize SDK configuration
11
+ */
12
+ export declare function sdkInit(options: SDKInitOptions): Promise<void>;
13
+ interface SDKGenerateOptions {
14
+ lang?: string;
15
+ preview?: boolean;
16
+ output?: string;
17
+ }
18
+ /**
19
+ * Generate SDKs
20
+ */
21
+ export declare function sdkGenerate(options: SDKGenerateOptions): Promise<void>;
22
+ /**
23
+ * Validate OpenAPI specification
24
+ */
25
+ export declare function sdkValidate(specPath?: string): Promise<void>;
26
+ /**
27
+ * List available generators and their status
28
+ */
29
+ export declare function sdkList(): Promise<void>;
30
+ export {};