claude-code-sync 0.1.4 → 0.1.6
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 +24 -5
- package/dist/cli.js +55 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,12 +3,20 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/claude-code-sync)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
|
|
6
|
-
Sync your Claude Code sessions to [OpenSync](https://
|
|
6
|
+
Sync your Claude Code sessions to [OpenSync](https://opensync.dev/) dashboard. Track coding sessions, analyze tool usage, and monitor token consumption across projects.
|
|
7
7
|
|
|
8
8
|
**GitHub:** [github.com/waynesutton/claude-code-sync](https://github.com/waynesutton/claude-code-sync)
|
|
9
9
|
|
|
10
10
|
**npm:** [npmjs.com/package/claude-code-sync](https://www.npmjs.com/package/claude-code-sync)
|
|
11
11
|
|
|
12
|
+
## OpenSync Ecosystem
|
|
13
|
+
|
|
14
|
+
| Package | Description | Install |
|
|
15
|
+
|---------|-------------|---------|
|
|
16
|
+
| [OpenSync](https://opensync.dev/) | Beautiful dashboards for OpenCode and Claude Code sessions synced to the cloud | [GitHub](https://github.com/waynesutton/opensync) |
|
|
17
|
+
| [opencode-sync-plugin](https://www.npmjs.com/package/opencode-sync-plugin) | Sync your OpenCode sessions to OpenSync dashboard | `npm install -g opencode-sync-plugin` |
|
|
18
|
+
| [claude-code-sync](https://www.npmjs.com/package/claude-code-sync) | Sync your Claude Code sessions to OpenSync dashboard | `npm install -g claude-code-sync` |
|
|
19
|
+
|
|
12
20
|
## Installation
|
|
13
21
|
|
|
14
22
|
```bash
|
|
@@ -91,6 +99,7 @@ Sessions will now sync automatically when you use Claude Code.
|
|
|
91
99
|
| `claude-code-sync login` | Configure Convex URL and API Key |
|
|
92
100
|
| `claude-code-sync setup` | Add hooks to Claude Code settings |
|
|
93
101
|
| `claude-code-sync verify` | Verify credentials and Claude Code config |
|
|
102
|
+
| `claude-code-sync synctest` | Test connectivity and create a test session |
|
|
94
103
|
| `claude-code-sync logout` | Clear stored credentials |
|
|
95
104
|
| `claude-code-sync status` | Show connection status |
|
|
96
105
|
| `claude-code-sync config` | Show current configuration |
|
|
@@ -193,11 +202,21 @@ If you run into issues or have questions:
|
|
|
193
202
|
|
|
194
203
|
## Links
|
|
195
204
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
- [OpenSync
|
|
199
|
-
- [OpenSync
|
|
205
|
+
### OpenSync
|
|
206
|
+
|
|
207
|
+
- [OpenSync](https://opensync.dev/) - Beautiful dashboards for OpenCode and Claude Code sessions
|
|
208
|
+
- [OpenSync Repository](https://github.com/waynesutton/opensync)
|
|
209
|
+
|
|
210
|
+
### claude-code-sync (this package)
|
|
211
|
+
|
|
212
|
+
- [GitHub Repository](https://github.com/waynesutton/claude-code-sync)
|
|
200
213
|
- [npm Package](https://www.npmjs.com/package/claude-code-sync)
|
|
214
|
+
- [Issues and Support](https://github.com/waynesutton/claude-code-sync/issues)
|
|
215
|
+
|
|
216
|
+
### opencode-sync-plugin
|
|
217
|
+
|
|
218
|
+
- [GitHub Repository](https://github.com/waynesutton/opencode-sync-plugin)
|
|
219
|
+
- [npm Package](https://www.npmjs.com/package/opencode-sync-plugin)
|
|
201
220
|
|
|
202
221
|
## License
|
|
203
222
|
|
package/dist/cli.js
CHANGED
|
@@ -92,7 +92,7 @@ program
|
|
|
92
92
|
.description("Configure Convex URL and API Key")
|
|
93
93
|
.action(async () => {
|
|
94
94
|
console.log("\n Claude Code Sync - Login\n");
|
|
95
|
-
console.log("Get your API key from your OpenSync
|
|
95
|
+
console.log("Get your API key from your OpenSync.dev Settings page, starts with osk_. Enter it here:");
|
|
96
96
|
console.log(" 1. Go to Settings");
|
|
97
97
|
console.log(" 2. Click 'Generate API Key'");
|
|
98
98
|
console.log(" 3. Copy the key (starts with osk_)\n");
|
|
@@ -414,6 +414,55 @@ program
|
|
|
414
414
|
}
|
|
415
415
|
});
|
|
416
416
|
// ============================================================================
|
|
417
|
+
// Sync Test Command (test connectivity)
|
|
418
|
+
// ============================================================================
|
|
419
|
+
program
|
|
420
|
+
.command("synctest")
|
|
421
|
+
.description("Test connectivity and create a test session")
|
|
422
|
+
.action(async () => {
|
|
423
|
+
const config = (0, index_1.loadConfig)();
|
|
424
|
+
console.log("\n Claude Code Sync - Connection Test\n");
|
|
425
|
+
if (!config) {
|
|
426
|
+
console.log("Not configured");
|
|
427
|
+
console.log(" Run 'claude-code-sync login' to set up\n");
|
|
428
|
+
process.exit(1);
|
|
429
|
+
}
|
|
430
|
+
console.log("Configuration:");
|
|
431
|
+
console.log(` Convex URL: ${config.convexUrl}`);
|
|
432
|
+
console.log(` API Key: ${maskApiKey(config.apiKey)}`);
|
|
433
|
+
console.log("\nTesting connection...");
|
|
434
|
+
const client = new index_1.SyncClient(config);
|
|
435
|
+
const connected = await client.testConnection();
|
|
436
|
+
if (connected) {
|
|
437
|
+
console.log("Connection: OK");
|
|
438
|
+
// Create a test session to verify full sync works
|
|
439
|
+
console.log("\nCreating test session...");
|
|
440
|
+
try {
|
|
441
|
+
const testSession = {
|
|
442
|
+
sessionId: `test-${Date.now()}`,
|
|
443
|
+
source: "claude-code",
|
|
444
|
+
title: "Connection Test",
|
|
445
|
+
projectName: "synctest",
|
|
446
|
+
startedAt: new Date().toISOString(),
|
|
447
|
+
endedAt: new Date().toISOString(),
|
|
448
|
+
};
|
|
449
|
+
await client.syncSession(testSession);
|
|
450
|
+
console.log("Test session created successfully");
|
|
451
|
+
console.log("\nSync test passed. Ready to sync Claude Code sessions.\n");
|
|
452
|
+
}
|
|
453
|
+
catch (error) {
|
|
454
|
+
console.log(`Test session failed: ${error}`);
|
|
455
|
+
console.log("\nConnection works but sync may have issues.\n");
|
|
456
|
+
process.exit(1);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
console.log("Connection: FAILED");
|
|
461
|
+
console.log("\nCheck your Convex URL and API key.\n");
|
|
462
|
+
process.exit(1);
|
|
463
|
+
}
|
|
464
|
+
});
|
|
465
|
+
// ============================================================================
|
|
417
466
|
// Hook Command (for Claude Code integration)
|
|
418
467
|
// ============================================================================
|
|
419
468
|
program
|
|
@@ -437,10 +486,10 @@ program
|
|
|
437
486
|
process.exit(0);
|
|
438
487
|
}
|
|
439
488
|
try {
|
|
440
|
-
const data = JSON.parse(input);
|
|
441
489
|
const client = new index_1.SyncClient(config);
|
|
442
490
|
switch (event) {
|
|
443
491
|
case "SessionStart": {
|
|
492
|
+
const data = JSON.parse(input);
|
|
444
493
|
const session = {
|
|
445
494
|
sessionId: data.session_id,
|
|
446
495
|
source: "claude-code",
|
|
@@ -455,6 +504,7 @@ program
|
|
|
455
504
|
break;
|
|
456
505
|
}
|
|
457
506
|
case "SessionEnd": {
|
|
507
|
+
const data = JSON.parse(input);
|
|
458
508
|
const session = {
|
|
459
509
|
sessionId: data.session_id,
|
|
460
510
|
source: "claude-code",
|
|
@@ -465,6 +515,7 @@ program
|
|
|
465
515
|
break;
|
|
466
516
|
}
|
|
467
517
|
case "UserPromptSubmit": {
|
|
518
|
+
const data = JSON.parse(input);
|
|
468
519
|
const message = {
|
|
469
520
|
sessionId: data.session_id,
|
|
470
521
|
messageId: `${data.session_id}-${Date.now()}`,
|
|
@@ -479,6 +530,7 @@ program
|
|
|
479
530
|
case "PostToolUse": {
|
|
480
531
|
if (!config.syncToolCalls)
|
|
481
532
|
break;
|
|
533
|
+
const data = JSON.parse(input);
|
|
482
534
|
const message = {
|
|
483
535
|
sessionId: data.session_id,
|
|
484
536
|
messageId: `${data.session_id}-tool-${Date.now()}`,
|
|
@@ -511,4 +563,4 @@ program
|
|
|
511
563
|
});
|
|
512
564
|
// Parse and run
|
|
513
565
|
program.parse();
|
|
514
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHlDQUFvQztBQUNwQyxtREFBcUM7QUFDckMsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixtQ0FNaUI7QUFFakIsaUNBQWlDO0FBQ2pDLFNBQVMsVUFBVTtJQUNqQixJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDM0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzFELE9BQU8sR0FBRyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUM7SUFDaEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsT0FBTztLQUNKLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztLQUN4QixXQUFXLENBQUMsaURBQWlELENBQUM7S0FDOUQsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFFekIsK0VBQStFO0FBQy9FLG1CQUFtQjtBQUNuQiwrRUFBK0U7QUFFL0UsU0FBUyxNQUFNLENBQUMsUUFBZ0I7SUFDOUIsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUNsQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0tBQ3ZCLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUs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QUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSztvQkFDL0QsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2lCQUNwQyxDQUFDO2dCQUNGLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEMsTUFBTTtZQUNSLENBQUM7WUFFRCxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1osa0RBQWtEO2dCQUNsRCxtREFBbUQ7Z0JBQ25ELE1BQU07WUFDUixDQUFDO1lBRUQ7Z0JBQ0Usd0JBQXdCO2dCQUN4QixNQUFNO1FBQ1YsQ0FBQztRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZiw0Q0FBNEM7UUFDNUMsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVMLGdCQUFnQjtBQUNoQixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbi8qKlxuICogQ2xhdWRlIENvZGUgU3luYyBDTElcbiAqXG4gKiBDb21tYW5kczpcbiAqICAgbG9naW4gICAtIENvbmZpZ3VyZSBDb252ZXggVVJMIGFuZCBBUEkgS2V5XG4gKiAgIGxvZ291dCAgLSBDbGVhciBzdG9yZWQgY3JlZGVudGlhbHNcbiAqICAgc3RhdHVzICAtIFNob3cgY29ubmVjdGlvbiBzdGF0dXNcbiAqICAgY29uZmlnICAtIFNob3cgY3VycmVudCBjb25maWd1cmF0aW9uXG4gKi9cblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gXCJyZWFkbGluZVwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQge1xuICBsb2FkQ29uZmlnLFxuICBzYXZlQ29uZmlnLFxuICBjbGVhckNvbmZpZyxcbiAgU3luY0NsaWVudCxcbiAgQ29uZmlnLFxufSBmcm9tIFwiLi9pbmRleFwiO1xuXG4vLyBSZWFkIHZlcnNpb24gZnJvbSBwYWNrYWdlLmpzb25cbmZ1bmN0aW9uIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwa2dQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcInBhY2thZ2UuanNvblwiKTtcbiAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwa2dQYXRoLCBcInV0Zi04XCIpKTtcbiAgICByZXR1cm4gcGtnLnZlcnNpb24gfHwgXCIwLjAuMFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gXCIwLjAuMFwiO1xuICB9XG59XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG4gIC5uYW1lKFwiY2xhdWRlLWNvZGUtc3luY1wiKVxuICAuZGVzY3JpcHRpb24oXCJTeW5jIENsYXVkZSBDb2RlIHNlc3Npb25zIHRvIE9wZW5TeW5jIGRhc2hib2FyZFwiKVxuICAudmVyc2lvbihnZXRWZXJzaW9uKCkpO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIZWxwZXIgRnVuY3Rpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIHByb21wdChxdWVzdGlvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHJsLnF1ZXN0aW9uKHF1ZXN0aW9uLCAoYW5zd2VyKSA9PiB7XG4gICAgICBybC5jbG9zZSgpO1xuICAgICAgcmVzb2x2ZShhbnN3ZXIudHJpbSgpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1hc2tBcGlLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoa2V5Lmxlbmd0aCA8PSA4KSByZXR1cm4gXCIqKioqXCI7XG4gIHJldHVybiBrZXkuc3Vic3RyaW5nKDAsIDQpICsgXCIqKioqXCIgKyBrZXkuc3Vic3RyaW5nKGtleS5sZW5ndGggLSA0KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29tbWFuZHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxucHJvZ3JhbVxuICAuY29tbWFuZChcImxvZ2luXCIpXG4gIC5kZXNjcmlwdGlvbihcIkNvbmZpZ3VyZSBDb252ZXggVVJMIGFuZCBBUEkgS2V5XCIpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKFwiXFxuICBDbGF1ZGUgQ29kZSBTeW5jIC0gTG9naW5cXG5cIik7XG4gICAgY29uc29sZS5sb2coXCJHZXQgeW91ciBBUEkga2V5IGZyb20geW91ciBPcGVuU3luYyBkYXNoYm9hcmQ6XCIpO1xuICAgIGNvbnNvbGUubG9nKFwiICAxLiBHbyB0byBTZXR0aW5nc1wiKTtcbiAgICBjb25zb2xlLmxvZyhcIiAgMi4gQ2xpY2sgJ0dlbmVyYXRlIEFQSSBLZXknXCIpO1xuICAgIGNvbnNvbGUubG9nKFwiICAzLiBDb3B5IHRoZSBrZXkgKHN0YXJ0cyB3aXRoIG9za18pXFxuXCIpO1xuXG4gICAgY29uc3QgY29udmV4VXJsID0gYXdhaXQgcHJvbXB0KFwiQ29udmV4IFVSTCAoZS5nLiwgaHR0cHM6Ly95b3VyLXByb2plY3QuY29udmV4LmNsb3VkKTogXCIpO1xuXG4gICAgaWYgKCFjb252ZXhVcmwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcjogQ29udmV4IFVSTCBpcyByZXF1aXJlZFwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbnZleFVybC5pbmNsdWRlcyhcImNvbnZleC5jbG91ZFwiKSAmJiAhY29udmV4VXJsLmluY2x1ZGVzKFwiY29udmV4LnNpdGVcIikpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcjogSW52YWxpZCBDb252ZXggVVJMLiBNdXN0IGNvbnRhaW4gY29udmV4LmNsb3VkIG9yIGNvbnZleC5zaXRlXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGFwaUtleSA9IGF3YWl0IHByb21wdChcIkFQSSBLZXkgKG9za18uLi4pOiBcIik7XG5cbiAgICBpZiAoIWFwaUtleSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yOiBBUEkgS2V5IGlzIHJlcXVpcmVkXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGlmICghYXBpS2V5LnN0YXJ0c1dpdGgoXCJvc2tfXCIpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IEludmFsaWQgQVBJIEtleS4gTXVzdCBzdGFydCB3aXRoIG9za19cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnOiBDb25maWcgPSB7XG4gICAgICBjb252ZXhVcmwsXG4gICAgICBhcGlLZXksXG4gICAgICBhdXRvU3luYzogdHJ1ZSxcbiAgICAgIHN5bmNUb29sQ2FsbHM6IHRydWUsXG4gICAgICBzeW5jVGhpbmtpbmc6IGZhbHNlLFxuICAgIH07XG5cbiAgICAvLyBUZXN0IGNvbm5lY3Rpb25cbiAgICBjb25zb2xlLmxvZyhcIlxcblRlc3RpbmcgY29ubmVjdGlvbi4uLlwiKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuXG4gICAgaWYgKCFjb25uZWN0ZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcjogQ291bGQgbm90IGNvbm5lY3QgdG8gQ29udmV4IGJhY2tlbmRcIik7XG4gICAgICBjb25zb2xlLmVycm9yKFwiICAgQ2hlY2sgeW91ciBVUkwgYW5kIHRyeSBhZ2FpblwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBTYXZlIGNvbmZpZ1xuICAgIHNhdmVDb25maWcoY29uZmlnKTtcbiAgICBjb25zb2xlLmxvZyhcIlxcbkNvbmZpZ3VyYXRpb24gc2F2ZWQhXCIpO1xuICAgIGNvbnNvbGUubG9nKGAgICBVUkw6ICR7Y29udmV4VXJsfWApO1xuICAgIGNvbnNvbGUubG9nKGAgICBLZXk6ICR7bWFza0FwaUtleShhcGlLZXkpfWApO1xuICAgIGNvbnNvbGUubG9nKFwiXFxuQWRkIHRoZSBwbHVnaW4gdG8geW91ciBDbGF1ZGUgQ29kZSBjb25maWcgdG8gc3RhcnQgc3luY2luZy5cXG5cIik7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwibG9nb3V0XCIpXG4gIC5kZXNjcmlwdGlvbihcIkNsZWFyIHN0b3JlZCBjcmVkZW50aWFsc1wiKVxuICAuYWN0aW9uKCgpID0+IHtcbiAgICBjbGVhckNvbmZpZygpO1xuICAgIGNvbnNvbGUubG9nKFwiQ3JlZGVudGlhbHMgY2xlYXJlZFwiKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJzdGF0dXNcIilcbiAgLmRlc2NyaXB0aW9uKFwiU2hvdyBjb25uZWN0aW9uIHN0YXR1c1wiKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBsb2FkQ29uZmlnKCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ2xhdWRlIENvZGUgU3luYyAtIFN0YXR1c1xcblwiKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIk5vdCBjb25maWd1cmVkXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIHRvIHNldCB1cFxcblwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIkNvbmZpZ3VyYXRpb246XCIpO1xuICAgIGNvbnNvbGUubG9nKGAgIENvbnZleCBVUkw6ICR7Y29uZmlnLmNvbnZleFVybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICBBUEkgS2V5OiAgICAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG4gICAgY29uc29sZS5sb2coYCAgQXV0byBTeW5jOiAgJHtjb25maWcuYXV0b1N5bmMgIT09IGZhbHNlID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCk7XG4gICAgY29uc29sZS5sb2coYCAgVG9vbCBDYWxsczogJHtjb25maWcuc3luY1Rvb2xDYWxscyAhPT0gZmFsc2UgPyBcImVuYWJsZWRcIiA6IFwiZGlzYWJsZWRcIn1gKTtcbiAgICBjb25zb2xlLmxvZyhgICBUaGlua2luZzogICAke2NvbmZpZy5zeW5jVGhpbmtpbmcgPyBcImVuYWJsZWRcIiA6IFwiZGlzYWJsZWRcIn1gKTtcblxuICAgIGNvbnNvbGUubG9nKFwiXFxuVGVzdGluZyBjb25uZWN0aW9uLi4uXCIpO1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTeW5jQ2xpZW50KGNvbmZpZyk7XG4gICAgY29uc3QgY29ubmVjdGVkID0gYXdhaXQgY2xpZW50LnRlc3RDb25uZWN0aW9uKCk7XG5cbiAgICBpZiAoY29ubmVjdGVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNvbm5lY3RlZCB0byBDb252ZXggYmFja2VuZFxcblwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJFcnJvcjogQ291bGQgbm90IGNvbm5lY3QgdG8gQ29udmV4IGJhY2tlbmRcXG5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcImNvbmZpZ1wiKVxuICAuZGVzY3JpcHRpb24oXCJTaG93IGN1cnJlbnQgY29uZmlndXJhdGlvblwiKVxuICAub3B0aW9uKFwiLS1qc29uXCIsIFwiT3V0cHV0IGFzIEpTT05cIilcbiAgLmFjdGlvbigob3B0aW9uczogeyBqc29uPzogYm9vbGVhbiB9KSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBjb25maWd1cmVkOiBmYWxzZSB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIk5vdCBjb25maWd1cmVkLiBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIHRvIHNldCB1cC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyZWQ6IHRydWUsXG4gICAgICAgICAgICBjb252ZXhVcmw6IGNvbmZpZy5jb252ZXhVcmwsXG4gICAgICAgICAgICBhcGlLZXk6IG1hc2tBcGlLZXkoY29uZmlnLmFwaUtleSksXG4gICAgICAgICAgICBhdXRvU3luYzogY29uZmlnLmF1dG9TeW5jICE9PSBmYWxzZSxcbiAgICAgICAgICAgIHN5bmNUb29sQ2FsbHM6IGNvbmZpZy5zeW5jVG9vbENhbGxzICE9PSBmYWxzZSxcbiAgICAgICAgICAgIHN5bmNUaGlua2luZzogY29uZmlnLnN5bmNUaGlua2luZyA9PT0gdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgMlxuICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ3VycmVudCBDb25maWd1cmF0aW9uXFxuXCIpO1xuICAgICAgY29uc29sZS5sb2coYENvbnZleCBVUkw6ICAke2NvbmZpZy5jb252ZXhVcmx9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgQVBJIEtleTogICAgICR7bWFza0FwaUtleShjb25maWcuYXBpS2V5KX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBBdXRvIFN5bmM6ICAgJHtjb25maWcuYXV0b1N5bmMgIT09IGZhbHNlfWApO1xuICAgICAgY29uc29sZS5sb2coYFRvb2wgQ2FsbHM6ICAke2NvbmZpZy5zeW5jVG9vbENhbGxzICE9PSBmYWxzZX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBUaGlua2luZzogICAgJHtjb25maWcuc3luY1RoaW5raW5nID09PSB0cnVlfWApO1xuICAgICAgY29uc29sZS5sb2coYFxcbkNvbmZpZyBmaWxlOiB+Ly5jb25maWcvY2xhdWRlLWNvZGUtc3luYy9jb25maWcuanNvblxcbmApO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJzZXQgPGtleT4gPHZhbHVlPlwiKVxuICAuZGVzY3JpcHRpb24oXCJTZXQgYSBjb25maWd1cmF0aW9uIHZhbHVlXCIpXG4gIC5hY3Rpb24oKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb3QgY29uZmlndXJlZC4gUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyBmaXJzdC5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRLZXlzID0gW1wiYXV0b1N5bmNcIiwgXCJzeW5jVG9vbENhbGxzXCIsIFwic3luY1RoaW5raW5nXCJdO1xuICAgIGlmICghdmFsaWRLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQga2V5LiBWYWxpZCBrZXlzOiAke3ZhbGlkS2V5cy5qb2luKFwiLCBcIil9YCk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc3QgYm9vbFZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiIHx8IHZhbHVlID09PSBcIjFcIiB8fCB2YWx1ZSA9PT0gXCJ5ZXNcIjtcbiAgICBcbiAgICAvLyBUeXBlLXNhZmUgY29uZmlnIHVwZGF0ZVxuICAgIGlmIChrZXkgPT09IFwiYXV0b1N5bmNcIikge1xuICAgICAgY29uZmlnLmF1dG9TeW5jID0gYm9vbFZhbHVlO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN5bmNUb29sQ2FsbHNcIikge1xuICAgICAgY29uZmlnLnN5bmNUb29sQ2FsbHMgPSBib29sVmFsdWU7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09IFwic3luY1RoaW5raW5nXCIpIHtcbiAgICAgIGNvbmZpZy5zeW5jVGhpbmtpbmcgPSBib29sVmFsdWU7XG4gICAgfVxuXG4gICAgc2F2ZUNvbmZpZyhjb25maWcpO1xuICAgIGNvbnNvbGUubG9nKGBTZXQgJHtrZXl9ID0gJHtib29sVmFsdWV9YCk7XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXR1cCBDb21tYW5kIChjb25maWd1cmVzIENsYXVkZSBDb2RlIGhvb2tzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBDbGF1ZGUgQ29kZSBob29rcyBjb25maWd1cmF0aW9uXG5jb25zdCBDTEFVREVfSE9PS1NfQ09ORklHID0ge1xuICBob29rczoge1xuICAgIFNlc3Npb25TdGFydDogW1xuICAgICAge1xuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgU2Vzc2lvblN0YXJ0XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBTZXNzaW9uRW5kOiBbXG4gICAgICB7XG4gICAgICAgIGhvb2tzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJjb21tYW5kXCIsXG4gICAgICAgICAgICBjb21tYW5kOiBcImNsYXVkZS1jb2RlLXN5bmMgaG9vayBTZXNzaW9uRW5kXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBVc2VyUHJvbXB0U3VibWl0OiBbXG4gICAgICB7XG4gICAgICAgIGhvb2tzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJjb21tYW5kXCIsXG4gICAgICAgICAgICBjb21tYW5kOiBcImNsYXVkZS1jb2RlLXN5bmMgaG9vayBVc2VyUHJvbXB0U3VibWl0XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBQb3N0VG9vbFVzZTogW1xuICAgICAge1xuICAgICAgICBtYXRjaGVyOiBcIipcIixcbiAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1hbmRcIixcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiY2xhdWRlLWNvZGUtc3luYyBob29rIFBvc3RUb29sVXNlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBTdG9wOiBbXG4gICAgICB7XG4gICAgICAgIG1hdGNoZXI6IFwiKlwiLFxuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgU3RvcFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG59O1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic2V0dXBcIilcbiAgLmRlc2NyaXB0aW9uKFwiQWRkIGhvb2tzIHRvIENsYXVkZSBDb2RlIHNldHRpbmdzIChjb25maWd1cmVzIH4vLmNsYXVkZS9zZXR0aW5ncy5qc29uKVwiKVxuICAub3B0aW9uKFwiLS1mb3JjZVwiLCBcIk92ZXJ3cml0ZSBleGlzdGluZyBob29rcyBjb25maWd1cmF0aW9uXCIpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IHsgZm9yY2U/OiBib29sZWFuIH0pID0+IHtcbiAgICBjb25zdCBjbGF1ZGVEaXIgPSBwYXRoLmpvaW4ocHJvY2Vzcy5lbnYuSE9NRSB8fCBcIn5cIiwgXCIuY2xhdWRlXCIpO1xuICAgIGNvbnN0IHNldHRpbmdzUGF0aCA9IHBhdGguam9pbihjbGF1ZGVEaXIsIFwic2V0dGluZ3MuanNvblwiKTtcblxuICAgIGNvbnNvbGUubG9nKFwiXFxuICBDbGF1ZGUgQ29kZSBTeW5jIC0gU2V0dXBcXG5cIik7XG5cbiAgICAvLyBDaGVjayBpZiBwbHVnaW4gY3JlZGVudGlhbHMgYXJlIGNvbmZpZ3VyZWRcbiAgICBjb25zdCBjb25maWcgPSBsb2FkQ29uZmlnKCk7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiV2FybmluZzogUGx1Z2luIG5vdCBjb25maWd1cmVkIHlldC5cIik7XG4gICAgICBjb25zb2xlLmxvZyhcIiAgIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBsb2dpbicgZmlyc3QgdG8gc2V0IHVwIGNyZWRlbnRpYWxzLlxcblwiKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgLmNsYXVkZSBkaXJlY3RvcnkgaWYgbmVlZGVkXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGNsYXVkZURpcikpIHtcbiAgICAgIGZzLm1rZGlyU3luYyhjbGF1ZGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgY29uc29sZS5sb2coXCJDcmVhdGVkIH4vLmNsYXVkZSBkaXJlY3RvcnlcIik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGV4aXN0aW5nIHNldHRpbmdzXG4gICAgbGV0IGV4aXN0aW5nU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgbGV0IGhhc0V4aXN0aW5nSG9va3MgPSBmYWxzZTtcblxuICAgIGlmIChmcy5leGlzdHNTeW5jKHNldHRpbmdzUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoc2V0dGluZ3NQYXRoLCBcInV0Zi04XCIpO1xuICAgICAgICBleGlzdGluZ1NldHRpbmdzID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICAgICAgaGFzRXhpc3RpbmdIb29rcyA9ICEhZXhpc3RpbmdTZXR0aW5ncy5ob29rcztcbiAgICAgICAgY29uc29sZS5sb2coXCJGb3VuZCBleGlzdGluZyBzZXR0aW5ncy5qc29uXCIpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiV2FybmluZzogQ291bGQgbm90IHBhcnNlIGV4aXN0aW5nIHNldHRpbmdzLmpzb24sIHdpbGwgY3JlYXRlIG5ldyBvbmVcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGV4aXN0aW5nIGhvb2tzXG4gICAgaWYgKGhhc0V4aXN0aW5nSG9va3MgJiYgIW9wdGlvbnMuZm9yY2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuRXhpc3RpbmcgaG9va3MgY29uZmlndXJhdGlvbiBmb3VuZC5cIik7XG4gICAgICBjb25zb2xlLmxvZyhcIiAgIFVzZSAtLWZvcmNlIHRvIG92ZXJ3cml0ZSwgb3IgbWFudWFsbHkgbWVyZ2UgdGhlIGhvb2tzLlxcblwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiVG8gbWFudWFsbHkgYWRkLCBpbmNsdWRlIHRoZXNlIGhvb2tzIGluIHlvdXIgc2V0dGluZ3MuanNvbjpcIik7XG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShDTEFVREVfSE9PS1NfQ09ORklHLCBudWxsLCAyKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgLy8gTWVyZ2Ugc2V0dGluZ3NcbiAgICBjb25zdCBuZXdTZXR0aW5ncyA9IHtcbiAgICAgIC4uLmV4aXN0aW5nU2V0dGluZ3MsXG4gICAgICAuLi5DTEFVREVfSE9PS1NfQ09ORklHLFxuICAgIH07XG5cbiAgICAvLyBXcml0ZSBzZXR0aW5nc1xuICAgIHRyeSB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHNldHRpbmdzUGF0aCwgSlNPTi5zdHJpbmdpZnkobmV3U2V0dGluZ3MsIG51bGwsIDIpKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuQ2xhdWRlIENvZGUgaG9va3MgY29uZmlndXJlZCFcIik7XG4gICAgICBjb25zb2xlLmxvZyhgICAgU2V0dGluZ3MgZmlsZTogJHtzZXR0aW5nc1BhdGh9YCk7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcblNldHVwIGNvbXBsZXRlLiBTZXNzaW9ucyB3aWxsIHN5bmMgYXV0b21hdGljYWxseS5cXG5cIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB3cml0aW5nIHNldHRpbmdzOlwiLCBlcnJvcik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcInZlcmlmeVwiKVxuICAuZGVzY3JpcHRpb24oXCJWZXJpZnkgY3JlZGVudGlhbHMgYW5kIENsYXVkZSBDb2RlIGNvbmZpZ3VyYXRpb25cIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coXCJcXG4gIE9wZW5TeW5jIFNldHVwIFZlcmlmaWNhdGlvblxcblwiKTtcblxuICAgIC8vIENoZWNrIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ3JlZGVudGlhbHM6IE9LXCIpO1xuICAgICAgY29uc29sZS5sb2coYCAgIENvbnZleCBVUkw6ICR7Y29uZmlnLmNvbnZleFVybH1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICBBUEkgS2V5OiAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ3JlZGVudGlhbHM6IE5PVCBDT05GSUdVUkVEXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIHRvIHNldCB1cFwiKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBDbGF1ZGUgQ29kZSBjb25maWdcbiAgICBjb25zdCBzZXR0aW5nc1BhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5lbnYuSE9NRSB8fCBcIn5cIiwgXCIuY2xhdWRlXCIsIFwic2V0dGluZ3MuanNvblwiKTtcbiAgICBsZXQgaG9va3NDb25maWd1cmVkID0gZmFsc2U7XG5cbiAgICBpZiAoZnMuZXhpc3RzU3luYyhzZXR0aW5nc1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHNldHRpbmdzUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICAgICAgICBob29rc0NvbmZpZ3VyZWQgPSAhIXNldHRpbmdzLmhvb2tzPy5TZXNzaW9uU3RhcnQ7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIHBhcnNlIGVycm9yc1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFwiXCIpO1xuICAgIGlmIChob29rc0NvbmZpZ3VyZWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ2xhdWRlIENvZGUgQ29uZmlnOiBPS1wiKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICBDb25maWcgZmlsZTogJHtzZXR0aW5nc1BhdGh9YCk7XG4gICAgICBjb25zb2xlLmxvZyhcIiAgIEhvb2tzIHJlZ2lzdGVyZWQ6IGNsYXVkZS1jb2RlLXN5bmNcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ2xhdWRlIENvZGUgQ29uZmlnOiBOT1QgQ09ORklHVVJFRFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiICAgUnVuICdjbGF1ZGUtY29kZS1zeW5jIHNldHVwJyB0byBjb25maWd1cmUgaG9va3NcIik7XG4gICAgfVxuXG4gICAgLy8gVGVzdCBjb25uZWN0aW9uIGlmIGNyZWRlbnRpYWxzIGV4aXN0XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgY29uc29sZS5sb2coXCJcXG5UZXN0aW5nIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgICAgY29uc3QgY29ubmVjdGVkID0gYXdhaXQgY2xpZW50LnRlc3RDb25uZWN0aW9uKCk7XG4gICAgICBpZiAoY29ubmVjdGVkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ29ubmVjdGlvbjogT0tcXG5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNvbm5lY3Rpb246IEZBSUxFRFxcblwiKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb25maWcgJiYgaG9va3NDb25maWd1cmVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlJlYWR5ISBTdGFydCBDbGF1ZGUgQ29kZSBhbmQgc2Vzc2lvbnMgd2lsbCBzeW5jIGF1dG9tYXRpY2FsbHkuXFxuXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIb29rIENvbW1hbmQgKGZvciBDbGF1ZGUgQ29kZSBpbnRlZ3JhdGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxucHJvZ3JhbVxuICAuY29tbWFuZChcImhvb2sgPGV2ZW50PlwiKVxuICAuZGVzY3JpcHRpb24oXCJIYW5kbGUgQ2xhdWRlIENvZGUgaG9vayBldmVudHMgKHJlYWRzIHN0ZGluKVwiKVxuICAuYWN0aW9uKGFzeW5jIChldmVudDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIC8vIEV4aXQgc2lsZW50bHkgaWYgbm90IGNvbmZpZ3VyZWQgKGRvbid0IGJsb2NrIENsYXVkZSBDb2RlKVxuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuYXV0b1N5bmMgPT09IGZhbHNlKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuXG4gICAgLy8gUmVhZCBKU09OIGlucHV0IGZyb20gc3RkaW5cbiAgICBsZXQgaW5wdXQgPSBcIlwiO1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcHJvY2Vzcy5zdGRpbikge1xuICAgICAgaW5wdXQgKz0gY2h1bms7XG4gICAgfVxuXG4gICAgaWYgKCFpbnB1dC50cmltKCkpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpO1xuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcblxuICAgICAgc3dpdGNoIChldmVudCkge1xuICAgICAgICBjYXNlIFwiU2Vzc2lvblN0YXJ0XCI6IHtcbiAgICAgICAgICBjb25zdCBzZXNzaW9uID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIiBhcyBjb25zdCxcbiAgICAgICAgICAgIGN3ZDogZGF0YS5jd2QsXG4gICAgICAgICAgICBwZXJtaXNzaW9uTW9kZTogZGF0YS5wZXJtaXNzaW9uX21vZGUsXG4gICAgICAgICAgICBzdGFydFR5cGU6IGRhdGEuc291cmNlID09PSBcInN0YXJ0dXBcIiA/IFwibmV3XCIgOiBkYXRhLnNvdXJjZSxcbiAgICAgICAgICAgIHN0YXJ0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgcHJvamVjdFBhdGg6IGRhdGEuY3dkLFxuICAgICAgICAgICAgcHJvamVjdE5hbWU6IGRhdGEuY3dkID8gZGF0YS5jd2Quc3BsaXQoXCIvXCIpLnBvcCgpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBcIlNlc3Npb25FbmRcIjoge1xuICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbl9pZCxcbiAgICAgICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiIGFzIGNvbnN0LFxuICAgICAgICAgICAgZW5kUmVhc29uOiBkYXRhLnJlYXNvbixcbiAgICAgICAgICAgIGVuZGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jU2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJVc2VyUHJvbXB0U3VibWl0XCI6IHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IGAke2RhdGEuc2Vzc2lvbl9pZH0tJHtEYXRlLm5vdygpfWAsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIiBhcyBjb25zdCxcbiAgICAgICAgICAgIHJvbGU6IFwidXNlclwiIGFzIGNvbnN0LFxuICAgICAgICAgICAgY29udGVudDogZGF0YS5wcm9tcHQsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJQb3N0VG9vbFVzZVwiOiB7XG4gICAgICAgICAgaWYgKCFjb25maWcuc3luY1Rvb2xDYWxscykgYnJlYWs7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBgJHtkYXRhLnNlc3Npb25faWR9LXRvb2wtJHtEYXRlLm5vdygpfWAsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIiBhcyBjb25zdCxcbiAgICAgICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIgYXMgY29uc3QsXG4gICAgICAgICAgICB0b29sTmFtZTogZGF0YS50b29sX25hbWUsXG4gICAgICAgICAgICB0b29sQXJnczogZGF0YS50b29sX2lucHV0LFxuICAgICAgICAgICAgdG9vbFJlc3VsdDogZGF0YS50b29sX3Jlc3VsdD8ub3V0cHV0IHx8IGRhdGEudG9vbF9yZXN1bHQ/LmVycm9yLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCBjbGllbnQuc3luY01lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFwiU3RvcFwiOiB7XG4gICAgICAgICAgLy8gU3RvcCBldmVudCBpbmRpY2F0ZXMgQ2xhdWRlIGZpbmlzaGVkIHJlc3BvbmRpbmdcbiAgICAgICAgICAvLyBXZSBjb3VsZCB0cmFjayB0aGlzIGJ1dCBmb3Igbm93IGp1c3QgYWNrbm93bGVkZ2VcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gVW5rbm93biBldmVudCwgaWdub3JlXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gTG9nIHRvIHN0ZGVyciBidXQgZG9uJ3QgYmxvY2sgQ2xhdWRlIENvZGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtjbGF1ZGUtY29kZS1zeW5jXSBFcnJvcjogJHtlcnJvcn1gKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG4gIH0pO1xuXG4vLyBQYXJzZSBhbmQgcnVuXG5wcm9ncmFtLnBhcnNlKCk7XG4iXX0=
|
|
566
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHlDQUFvQztBQUNwQyxtREFBcUM7QUFDckMsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixtQ0FRaUI7QUF5Q2pCLGlDQUFpQztBQUNqQyxTQUFTLFVBQVU7SUFDakIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQWdCLENBQUM7UUFDekUsT0FBTyxHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQztJQUNoQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLG1CQUFPLEVBQUUsQ0FBQztBQUU5QixPQUFPO0tBQ0osSUFBSSxDQUFDLGtCQUFrQixDQUFDO0tBQ3hCLFdBQVcsQ0FBQyxpREFBaUQsQ0FBQztLQUM5RCxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUV6QiwrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRSxTQUFTLE1BQU0sQ0FBQyxRQUFnQjtJQUM5QixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFB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QUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSztvQkFDL0QsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2lCQUNwQyxDQUFDO2dCQUNGLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEMsTUFBTTtZQUNSLENBQUM7WUFFRCxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1osa0RBQWtEO2dCQUNsRCxtREFBbUQ7Z0JBQ25ELE1BQU07WUFDUixDQUFDO1lBRUQ7Z0JBQ0Usd0JBQXdCO2dCQUN4QixNQUFNO1FBQ1YsQ0FBQztRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZiw0Q0FBNEM7UUFDNUMsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVMLGdCQUFnQjtBQUNoQixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbi8qKlxuICogQ2xhdWRlIENvZGUgU3luYyBDTElcbiAqXG4gKiBDb21tYW5kczpcbiAqICAgbG9naW4gICAtIENvbmZpZ3VyZSBDb252ZXggVVJMIGFuZCBBUEkgS2V5XG4gKiAgIGxvZ291dCAgLSBDbGVhciBzdG9yZWQgY3JlZGVudGlhbHNcbiAqICAgc3RhdHVzICAtIFNob3cgY29ubmVjdGlvbiBzdGF0dXNcbiAqICAgY29uZmlnICAtIFNob3cgY3VycmVudCBjb25maWd1cmF0aW9uXG4gKi9cblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gXCJyZWFkbGluZVwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQge1xuICBsb2FkQ29uZmlnLFxuICBzYXZlQ29uZmlnLFxuICBjbGVhckNvbmZpZyxcbiAgU3luY0NsaWVudCxcbiAgQ29uZmlnLFxuICBTZXNzaW9uRGF0YSxcbiAgTWVzc2FnZURhdGEsXG59IGZyb20gXCIuL2luZGV4XCI7XG5cbi8vIFR5cGVzIGZvciBDbGF1ZGUgQ29kZSBob29rIGV2ZW50IGRhdGEgZnJvbSBzdGRpblxuaW50ZXJmYWNlIEhvb2tTZXNzaW9uU3RhcnREYXRhIHtcbiAgc2Vzc2lvbl9pZDogc3RyaW5nO1xuICBjd2Q/OiBzdHJpbmc7XG4gIHBlcm1pc3Npb25fbW9kZT86IHN0cmluZztcbiAgc291cmNlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSG9va1Nlc3Npb25FbmREYXRhIHtcbiAgc2Vzc2lvbl9pZDogc3RyaW5nO1xuICByZWFzb24/OiBcInVzZXJfc3RvcFwiIHwgXCJtYXhfdHVybnNcIiB8IFwiZXJyb3JcIiB8IFwiY29tcGxldGVkXCI7XG59XG5cbmludGVyZmFjZSBIb29rVXNlclByb21wdERhdGEge1xuICBzZXNzaW9uX2lkOiBzdHJpbmc7XG4gIHByb21wdDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSG9va1Rvb2xVc2VEYXRhIHtcbiAgc2Vzc2lvbl9pZDogc3RyaW5nO1xuICB0b29sX25hbWU6IHN0cmluZztcbiAgdG9vbF9pbnB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB0b29sX3Jlc3VsdD86IHtcbiAgICBvdXRwdXQ/OiBzdHJpbmc7XG4gICAgZXJyb3I/OiBzdHJpbmc7XG4gIH07XG59XG5cbi8vIFR5cGVzIGZvciBDbGF1ZGUgQ29kZSBzZXR0aW5ncy5qc29uXG5pbnRlcmZhY2UgQ2xhdWRlU2V0dGluZ3Mge1xuICBob29rcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG4vLyBUeXBlIGZvciBwYWNrYWdlLmpzb24gdmVyc2lvbiBmaWVsZFxuaW50ZXJmYWNlIFBhY2thZ2VKc29uIHtcbiAgdmVyc2lvbj86IHN0cmluZztcbn1cblxuLy8gUmVhZCB2ZXJzaW9uIGZyb20gcGFja2FnZS5qc29uXG5mdW5jdGlvbiBnZXRWZXJzaW9uKCk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGtnUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi5cIiwgXCJwYWNrYWdlLmpzb25cIik7XG4gICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGtnUGF0aCwgXCJ1dGYtOFwiKSkgYXMgUGFja2FnZUpzb247XG4gICAgcmV0dXJuIHBrZy52ZXJzaW9uIHx8IFwiMC4wLjBcIjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFwiMC4wLjBcIjtcbiAgfVxufVxuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbVxuICAubmFtZShcImNsYXVkZS1jb2RlLXN5bmNcIilcbiAgLmRlc2NyaXB0aW9uKFwiU3luYyBDbGF1ZGUgQ29kZSBzZXNzaW9ucyB0byBPcGVuU3luYyBkYXNoYm9hcmRcIilcbiAgLnZlcnNpb24oZ2V0VmVyc2lvbigpKTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSGVscGVyIEZ1bmN0aW9uc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBwcm9tcHQocXVlc3Rpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICB9KTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBybC5xdWVzdGlvbihxdWVzdGlvbiwgKGFuc3dlcikgPT4ge1xuICAgICAgcmwuY2xvc2UoKTtcbiAgICAgIHJlc29sdmUoYW5zd2VyLnRyaW0oKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYXNrQXBpS2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGtleS5sZW5ndGggPD0gOCkgcmV0dXJuIFwiKioqKlwiO1xuICByZXR1cm4ga2V5LnN1YnN0cmluZygwLCA0KSArIFwiKioqKlwiICsga2V5LnN1YnN0cmluZyhrZXkubGVuZ3RoIC0gNCk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbW1hbmRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJsb2dpblwiKVxuICAuZGVzY3JpcHRpb24oXCJDb25maWd1cmUgQ29udmV4IFVSTCBhbmQgQVBJIEtleVwiKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ2xhdWRlIENvZGUgU3luYyAtIExvZ2luXFxuXCIpO1xuICAgIGNvbnNvbGUubG9nKFwiR2V0IHlvdXIgQVBJIGtleSBmcm9tIHlvdXIgT3BlblN5bmMuZGV2IFNldHRpbmdzIHBhZ2UsIHN0YXJ0cyB3aXRoIG9za18uIEVudGVyIGl0IGhlcmU6XCIpO1xuICAgIGNvbnNvbGUubG9nKFwiICAxLiBHbyB0byBTZXR0aW5nc1wiKTtcbiAgICBjb25zb2xlLmxvZyhcIiAgMi4gQ2xpY2sgJ0dlbmVyYXRlIEFQSSBLZXknXCIpO1xuICAgIGNvbnNvbGUubG9nKFwiICAzLiBDb3B5IHRoZSBrZXkgKHN0YXJ0cyB3aXRoIG9za18pXFxuXCIpO1xuXG4gICAgY29uc3QgY29udmV4VXJsID0gYXdhaXQgcHJvbXB0KFwiQ29udmV4IFVSTCAoZS5nLiwgaHR0cHM6Ly95b3VyLXByb2plY3QuY29udmV4LmNsb3VkKTogXCIpO1xuXG4gICAgaWYgKCFjb252ZXhVcmwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcjogQ29udmV4IFVSTCBpcyByZXF1aXJlZFwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbnZleFVybC5pbmNsdWRlcyhcImNvbnZleC5jbG91ZFwiKSAmJiAhY29udmV4VXJsLmluY2x1ZGVzKFwiY29udmV4LnNpdGVcIikpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcjogSW52YWxpZCBDb252ZXggVVJMLiBNdXN0IGNvbnRhaW4gY29udmV4LmNsb3VkIG9yIGNvbnZleC5zaXRlXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGFwaUtleSA9IGF3YWl0IHByb21wdChcIkFQSSBLZXkgKG9za18uLi4pOiBcIik7XG5cbiAgICBpZiAoIWFwaUtleSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yOiBBUEkgS2V5IGlzIHJlcXVpcmVkXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGlmICghYXBpS2V5LnN0YXJ0c1dpdGgoXCJvc2tfXCIpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IEludmFsaWQgQVBJIEtleS4gTXVzdCBzdGFydCB3aXRoIG9za19cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnOiBDb25maWcgPSB7XG4gICAgICBjb252ZXhVcmwsXG4gICAgICBhcGlLZXksXG4gICAgICBhdXRvU3luYzogdHJ1ZSxcbiAgICAgIHN5bmNUb29sQ2FsbHM6IHRydWUsXG4gICAgICBzeW5jVGhpbmtpbmc6IGZhbHNlLFxuICAgIH07XG5cbiAgICAvLyBUZXN0IGNvbm5lY3Rpb25cbiAgICBjb25zb2xlLmxvZyhcIlxcblRlc3RpbmcgY29ubmVjdGlvbi4uLlwiKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuXG4gICAgaWYgKCFjb25uZWN0ZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcjogQ291bGQgbm90IGNvbm5lY3QgdG8gQ29udmV4IGJhY2tlbmRcIik7XG4gICAgICBjb25zb2xlLmVycm9yKFwiICAgQ2hlY2sgeW91ciBVUkwgYW5kIHRyeSBhZ2FpblwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBTYXZlIGNvbmZpZ1xuICAgIHNhdmVDb25maWcoY29uZmlnKTtcbiAgICBjb25zb2xlLmxvZyhcIlxcbkNvbmZpZ3VyYXRpb24gc2F2ZWQhXCIpO1xuICAgIGNvbnNvbGUubG9nKGAgICBVUkw6ICR7Y29udmV4VXJsfWApO1xuICAgIGNvbnNvbGUubG9nKGAgICBLZXk6ICR7bWFza0FwaUtleShhcGlLZXkpfWApO1xuICAgIGNvbnNvbGUubG9nKFwiXFxuQWRkIHRoZSBwbHVnaW4gdG8geW91ciBDbGF1ZGUgQ29kZSBjb25maWcgdG8gc3RhcnQgc3luY2luZy5cXG5cIik7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwibG9nb3V0XCIpXG4gIC5kZXNjcmlwdGlvbihcIkNsZWFyIHN0b3JlZCBjcmVkZW50aWFsc1wiKVxuICAuYWN0aW9uKCgpID0+IHtcbiAgICBjbGVhckNvbmZpZygpO1xuICAgIGNvbnNvbGUubG9nKFwiQ3JlZGVudGlhbHMgY2xlYXJlZFwiKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJzdGF0dXNcIilcbiAgLmRlc2NyaXB0aW9uKFwiU2hvdyBjb25uZWN0aW9uIHN0YXR1c1wiKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBsb2FkQ29uZmlnKCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ2xhdWRlIENvZGUgU3luYyAtIFN0YXR1c1xcblwiKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIk5vdCBjb25maWd1cmVkXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIHRvIHNldCB1cFxcblwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIkNvbmZpZ3VyYXRpb246XCIpO1xuICAgIGNvbnNvbGUubG9nKGAgIENvbnZleCBVUkw6ICR7Y29uZmlnLmNvbnZleFVybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICBBUEkgS2V5OiAgICAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG4gICAgY29uc29sZS5sb2coYCAgQXV0byBTeW5jOiAgJHtjb25maWcuYXV0b1N5bmMgIT09IGZhbHNlID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCk7XG4gICAgY29uc29sZS5sb2coYCAgVG9vbCBDYWxsczogJHtjb25maWcuc3luY1Rvb2xDYWxscyAhPT0gZmFsc2UgPyBcImVuYWJsZWRcIiA6IFwiZGlzYWJsZWRcIn1gKTtcbiAgICBjb25zb2xlLmxvZyhgICBUaGlua2luZzogICAke2NvbmZpZy5zeW5jVGhpbmtpbmcgPyBcImVuYWJsZWRcIiA6IFwiZGlzYWJsZWRcIn1gKTtcblxuICAgIGNvbnNvbGUubG9nKFwiXFxuVGVzdGluZyBjb25uZWN0aW9uLi4uXCIpO1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTeW5jQ2xpZW50KGNvbmZpZyk7XG4gICAgY29uc3QgY29ubmVjdGVkID0gYXdhaXQgY2xpZW50LnRlc3RDb25uZWN0aW9uKCk7XG5cbiAgICBpZiAoY29ubmVjdGVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNvbm5lY3RlZCB0byBDb252ZXggYmFja2VuZFxcblwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJFcnJvcjogQ291bGQgbm90IGNvbm5lY3QgdG8gQ29udmV4IGJhY2tlbmRcXG5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcImNvbmZpZ1wiKVxuICAuZGVzY3JpcHRpb24oXCJTaG93IGN1cnJlbnQgY29uZmlndXJhdGlvblwiKVxuICAub3B0aW9uKFwiLS1qc29uXCIsIFwiT3V0cHV0IGFzIEpTT05cIilcbiAgLmFjdGlvbigob3B0aW9uczogeyBqc29uPzogYm9vbGVhbiB9KSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBjb25maWd1cmVkOiBmYWxzZSB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIk5vdCBjb25maWd1cmVkLiBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIHRvIHNldCB1cC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyZWQ6IHRydWUsXG4gICAgICAgICAgICBjb252ZXhVcmw6IGNvbmZpZy5jb252ZXhVcmwsXG4gICAgICAgICAgICBhcGlLZXk6IG1hc2tBcGlLZXkoY29uZmlnLmFwaUtleSksXG4gICAgICAgICAgICBhdXRvU3luYzogY29uZmlnLmF1dG9TeW5jICE9PSBmYWxzZSxcbiAgICAgICAgICAgIHN5bmNUb29sQ2FsbHM6IGNvbmZpZy5zeW5jVG9vbENhbGxzICE9PSBmYWxzZSxcbiAgICAgICAgICAgIHN5bmNUaGlua2luZzogY29uZmlnLnN5bmNUaGlua2luZyA9PT0gdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgMlxuICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ3VycmVudCBDb25maWd1cmF0aW9uXFxuXCIpO1xuICAgICAgY29uc29sZS5sb2coYENvbnZleCBVUkw6ICAke2NvbmZpZy5jb252ZXhVcmx9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgQVBJIEtleTogICAgICR7bWFza0FwaUtleShjb25maWcuYXBpS2V5KX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBBdXRvIFN5bmM6ICAgJHtjb25maWcuYXV0b1N5bmMgIT09IGZhbHNlfWApO1xuICAgICAgY29uc29sZS5sb2coYFRvb2wgQ2FsbHM6ICAke2NvbmZpZy5zeW5jVG9vbENhbGxzICE9PSBmYWxzZX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBUaGlua2luZzogICAgJHtjb25maWcuc3luY1RoaW5raW5nID09PSB0cnVlfWApO1xuICAgICAgY29uc29sZS5sb2coYFxcbkNvbmZpZyBmaWxlOiB+Ly5jb25maWcvY2xhdWRlLWNvZGUtc3luYy9jb25maWcuanNvblxcbmApO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJzZXQgPGtleT4gPHZhbHVlPlwiKVxuICAuZGVzY3JpcHRpb24oXCJTZXQgYSBjb25maWd1cmF0aW9uIHZhbHVlXCIpXG4gIC5hY3Rpb24oKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb3QgY29uZmlndXJlZC4gUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyBmaXJzdC5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRLZXlzID0gW1wiYXV0b1N5bmNcIiwgXCJzeW5jVG9vbENhbGxzXCIsIFwic3luY1RoaW5raW5nXCJdO1xuICAgIGlmICghdmFsaWRLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQga2V5LiBWYWxpZCBrZXlzOiAke3ZhbGlkS2V5cy5qb2luKFwiLCBcIil9YCk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc3QgYm9vbFZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiIHx8IHZhbHVlID09PSBcIjFcIiB8fCB2YWx1ZSA9PT0gXCJ5ZXNcIjtcbiAgICBcbiAgICAvLyBUeXBlLXNhZmUgY29uZmlnIHVwZGF0ZVxuICAgIGlmIChrZXkgPT09IFwiYXV0b1N5bmNcIikge1xuICAgICAgY29uZmlnLmF1dG9TeW5jID0gYm9vbFZhbHVlO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN5bmNUb29sQ2FsbHNcIikge1xuICAgICAgY29uZmlnLnN5bmNUb29sQ2FsbHMgPSBib29sVmFsdWU7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09IFwic3luY1RoaW5raW5nXCIpIHtcbiAgICAgIGNvbmZpZy5zeW5jVGhpbmtpbmcgPSBib29sVmFsdWU7XG4gICAgfVxuXG4gICAgc2F2ZUNvbmZpZyhjb25maWcpO1xuICAgIGNvbnNvbGUubG9nKGBTZXQgJHtrZXl9ID0gJHtib29sVmFsdWV9YCk7XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXR1cCBDb21tYW5kIChjb25maWd1cmVzIENsYXVkZSBDb2RlIGhvb2tzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBDbGF1ZGUgQ29kZSBob29rcyBjb25maWd1cmF0aW9uXG5jb25zdCBDTEFVREVfSE9PS1NfQ09ORklHID0ge1xuICBob29rczoge1xuICAgIFNlc3Npb25TdGFydDogW1xuICAgICAge1xuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgU2Vzc2lvblN0YXJ0XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBTZXNzaW9uRW5kOiBbXG4gICAgICB7XG4gICAgICAgIGhvb2tzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJjb21tYW5kXCIsXG4gICAgICAgICAgICBjb21tYW5kOiBcImNsYXVkZS1jb2RlLXN5bmMgaG9vayBTZXNzaW9uRW5kXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBVc2VyUHJvbXB0U3VibWl0OiBbXG4gICAgICB7XG4gICAgICAgIGhvb2tzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJjb21tYW5kXCIsXG4gICAgICAgICAgICBjb21tYW5kOiBcImNsYXVkZS1jb2RlLXN5bmMgaG9vayBVc2VyUHJvbXB0U3VibWl0XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBQb3N0VG9vbFVzZTogW1xuICAgICAge1xuICAgICAgICBtYXRjaGVyOiBcIipcIixcbiAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1hbmRcIixcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiY2xhdWRlLWNvZGUtc3luYyBob29rIFBvc3RUb29sVXNlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBTdG9wOiBbXG4gICAgICB7XG4gICAgICAgIG1hdGNoZXI6IFwiKlwiLFxuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgU3RvcFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG59O1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic2V0dXBcIilcbiAgLmRlc2NyaXB0aW9uKFwiQWRkIGhvb2tzIHRvIENsYXVkZSBDb2RlIHNldHRpbmdzIChjb25maWd1cmVzIH4vLmNsYXVkZS9zZXR0aW5ncy5qc29uKVwiKVxuICAub3B0aW9uKFwiLS1mb3JjZVwiLCBcIk92ZXJ3cml0ZSBleGlzdGluZyBob29rcyBjb25maWd1cmF0aW9uXCIpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IHsgZm9yY2U/OiBib29sZWFuIH0pID0+IHtcbiAgICBjb25zdCBjbGF1ZGVEaXIgPSBwYXRoLmpvaW4ocHJvY2Vzcy5lbnYuSE9NRSB8fCBcIn5cIiwgXCIuY2xhdWRlXCIpO1xuICAgIGNvbnN0IHNldHRpbmdzUGF0aCA9IHBhdGguam9pbihjbGF1ZGVEaXIsIFwic2V0dGluZ3MuanNvblwiKTtcblxuICAgIGNvbnNvbGUubG9nKFwiXFxuICBDbGF1ZGUgQ29kZSBTeW5jIC0gU2V0dXBcXG5cIik7XG5cbiAgICAvLyBDaGVjayBpZiBwbHVnaW4gY3JlZGVudGlhbHMgYXJlIGNvbmZpZ3VyZWRcbiAgICBjb25zdCBjb25maWcgPSBsb2FkQ29uZmlnKCk7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiV2FybmluZzogUGx1Z2luIG5vdCBjb25maWd1cmVkIHlldC5cIik7XG4gICAgICBjb25zb2xlLmxvZyhcIiAgIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBsb2dpbicgZmlyc3QgdG8gc2V0IHVwIGNyZWRlbnRpYWxzLlxcblwiKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgLmNsYXVkZSBkaXJlY3RvcnkgaWYgbmVlZGVkXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGNsYXVkZURpcikpIHtcbiAgICAgIGZzLm1rZGlyU3luYyhjbGF1ZGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgY29uc29sZS5sb2coXCJDcmVhdGVkIH4vLmNsYXVkZSBkaXJlY3RvcnlcIik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGV4aXN0aW5nIHNldHRpbmdzXG4gICAgbGV0IGV4aXN0aW5nU2V0dGluZ3M6IENsYXVkZVNldHRpbmdzID0ge307XG4gICAgbGV0IGhhc0V4aXN0aW5nSG9va3MgPSBmYWxzZTtcblxuICAgIGlmIChmcy5leGlzdHNTeW5jKHNldHRpbmdzUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoc2V0dGluZ3NQYXRoLCBcInV0Zi04XCIpO1xuICAgICAgICBleGlzdGluZ1NldHRpbmdzID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBDbGF1ZGVTZXR0aW5ncztcbiAgICAgICAgaGFzRXhpc3RpbmdIb29rcyA9ICEhZXhpc3RpbmdTZXR0aW5ncy5ob29rcztcbiAgICAgICAgY29uc29sZS5sb2coXCJGb3VuZCBleGlzdGluZyBzZXR0aW5ncy5qc29uXCIpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiV2FybmluZzogQ291bGQgbm90IHBhcnNlIGV4aXN0aW5nIHNldHRpbmdzLmpzb24sIHdpbGwgY3JlYXRlIG5ldyBvbmVcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGV4aXN0aW5nIGhvb2tzXG4gICAgaWYgKGhhc0V4aXN0aW5nSG9va3MgJiYgIW9wdGlvbnMuZm9yY2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuRXhpc3RpbmcgaG9va3MgY29uZmlndXJhdGlvbiBmb3VuZC5cIik7XG4gICAgICBjb25zb2xlLmxvZyhcIiAgIFVzZSAtLWZvcmNlIHRvIG92ZXJ3cml0ZSwgb3IgbWFudWFsbHkgbWVyZ2UgdGhlIGhvb2tzLlxcblwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiVG8gbWFudWFsbHkgYWRkLCBpbmNsdWRlIHRoZXNlIGhvb2tzIGluIHlvdXIgc2V0dGluZ3MuanNvbjpcIik7XG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShDTEFVREVfSE9PS1NfQ09ORklHLCBudWxsLCAyKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgLy8gTWVyZ2Ugc2V0dGluZ3NcbiAgICBjb25zdCBuZXdTZXR0aW5ncyA9IHtcbiAgICAgIC4uLmV4aXN0aW5nU2V0dGluZ3MsXG4gICAgICAuLi5DTEFVREVfSE9PS1NfQ09ORklHLFxuICAgIH07XG5cbiAgICAvLyBXcml0ZSBzZXR0aW5nc1xuICAgIHRyeSB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHNldHRpbmdzUGF0aCwgSlNPTi5zdHJpbmdpZnkobmV3U2V0dGluZ3MsIG51bGwsIDIpKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuQ2xhdWRlIENvZGUgaG9va3MgY29uZmlndXJlZCFcIik7XG4gICAgICBjb25zb2xlLmxvZyhgICAgU2V0dGluZ3MgZmlsZTogJHtzZXR0aW5nc1BhdGh9YCk7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcblNldHVwIGNvbXBsZXRlLiBTZXNzaW9ucyB3aWxsIHN5bmMgYXV0b21hdGljYWxseS5cXG5cIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB3cml0aW5nIHNldHRpbmdzOlwiLCBlcnJvcik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcInZlcmlmeVwiKVxuICAuZGVzY3JpcHRpb24oXCJWZXJpZnkgY3JlZGVudGlhbHMgYW5kIENsYXVkZSBDb2RlIGNvbmZpZ3VyYXRpb25cIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coXCJcXG4gIE9wZW5TeW5jIFNldHVwIFZlcmlmaWNhdGlvblxcblwiKTtcblxuICAgIC8vIENoZWNrIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ3JlZGVudGlhbHM6IE9LXCIpO1xuICAgICAgY29uc29sZS5sb2coYCAgIENvbnZleCBVUkw6ICR7Y29uZmlnLmNvbnZleFVybH1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICBBUEkgS2V5OiAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ3JlZGVudGlhbHM6IE5PVCBDT05GSUdVUkVEXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIHRvIHNldCB1cFwiKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBDbGF1ZGUgQ29kZSBjb25maWdcbiAgICBjb25zdCBzZXR0aW5nc1BhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5lbnYuSE9NRSB8fCBcIn5cIiwgXCIuY2xhdWRlXCIsIFwic2V0dGluZ3MuanNvblwiKTtcbiAgICBsZXQgaG9va3NDb25maWd1cmVkID0gZmFsc2U7XG5cbiAgICBpZiAoZnMuZXhpc3RzU3luYyhzZXR0aW5nc1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHNldHRpbmdzUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIENsYXVkZVNldHRpbmdzO1xuICAgICAgICBob29rc0NvbmZpZ3VyZWQgPSAhIXNldHRpbmdzLmhvb2tzPy5TZXNzaW9uU3RhcnQ7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIHBhcnNlIGVycm9yc1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFwiXCIpO1xuICAgIGlmIChob29rc0NvbmZpZ3VyZWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ2xhdWRlIENvZGUgQ29uZmlnOiBPS1wiKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICBDb25maWcgZmlsZTogJHtzZXR0aW5nc1BhdGh9YCk7XG4gICAgICBjb25zb2xlLmxvZyhcIiAgIEhvb2tzIHJlZ2lzdGVyZWQ6IGNsYXVkZS1jb2RlLXN5bmNcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ2xhdWRlIENvZGUgQ29uZmlnOiBOT1QgQ09ORklHVVJFRFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiICAgUnVuICdjbGF1ZGUtY29kZS1zeW5jIHNldHVwJyB0byBjb25maWd1cmUgaG9va3NcIik7XG4gICAgfVxuXG4gICAgLy8gVGVzdCBjb25uZWN0aW9uIGlmIGNyZWRlbnRpYWxzIGV4aXN0XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgY29uc29sZS5sb2coXCJcXG5UZXN0aW5nIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgICAgY29uc3QgY29ubmVjdGVkID0gYXdhaXQgY2xpZW50LnRlc3RDb25uZWN0aW9uKCk7XG4gICAgICBpZiAoY29ubmVjdGVkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ29ubmVjdGlvbjogT0tcXG5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNvbm5lY3Rpb246IEZBSUxFRFxcblwiKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb25maWcgJiYgaG9va3NDb25maWd1cmVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlJlYWR5ISBTdGFydCBDbGF1ZGUgQ29kZSBhbmQgc2Vzc2lvbnMgd2lsbCBzeW5jIGF1dG9tYXRpY2FsbHkuXFxuXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTeW5jIFRlc3QgQ29tbWFuZCAodGVzdCBjb25uZWN0aXZpdHkpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJzeW5jdGVzdFwiKVxuICAuZGVzY3JpcHRpb24oXCJUZXN0IGNvbm5lY3Rpdml0eSBhbmQgY3JlYXRlIGEgdGVzdCBzZXNzaW9uXCIpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGNvbnNvbGUubG9nKFwiXFxuICBDbGF1ZGUgQ29kZSBTeW5jIC0gQ29ubmVjdGlvbiBUZXN0XFxuXCIpO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiTm90IGNvbmZpZ3VyZWRcIik7XG4gICAgICBjb25zb2xlLmxvZyhcIiAgIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBsb2dpbicgdG8gc2V0IHVwXFxuXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFwiQ29uZmlndXJhdGlvbjpcIik7XG4gICAgY29uc29sZS5sb2coYCAgQ29udmV4IFVSTDogJHtjb25maWcuY29udmV4VXJsfWApO1xuICAgIGNvbnNvbGUubG9nKGAgIEFQSSBLZXk6ICAgICR7bWFza0FwaUtleShjb25maWcuYXBpS2V5KX1gKTtcblxuICAgIGNvbnNvbGUubG9nKFwiXFxuVGVzdGluZyBjb25uZWN0aW9uLi4uXCIpO1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTeW5jQ2xpZW50KGNvbmZpZyk7XG4gICAgY29uc3QgY29ubmVjdGVkID0gYXdhaXQgY2xpZW50LnRlc3RDb25uZWN0aW9uKCk7XG5cbiAgICBpZiAoY29ubmVjdGVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNvbm5lY3Rpb246IE9LXCIpO1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgYSB0ZXN0IHNlc3Npb24gdG8gdmVyaWZ5IGZ1bGwgc3luYyB3b3Jrc1xuICAgICAgY29uc29sZS5sb2coXCJcXG5DcmVhdGluZyB0ZXN0IHNlc3Npb24uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0ZXN0U2Vzc2lvbiA9IHtcbiAgICAgICAgICBzZXNzaW9uSWQ6IGB0ZXN0LSR7RGF0ZS5ub3coKX1gLFxuICAgICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiIGFzIGNvbnN0LFxuICAgICAgICAgIHRpdGxlOiBcIkNvbm5lY3Rpb24gVGVzdFwiLFxuICAgICAgICAgIHByb2plY3ROYW1lOiBcInN5bmN0ZXN0XCIsXG4gICAgICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgZW5kZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBjbGllbnQuc3luY1Nlc3Npb24odGVzdFNlc3Npb24pO1xuICAgICAgICBjb25zb2xlLmxvZyhcIlRlc3Qgc2Vzc2lvbiBjcmVhdGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJcXG5TeW5jIHRlc3QgcGFzc2VkLiBSZWFkeSB0byBzeW5jIENsYXVkZSBDb2RlIHNlc3Npb25zLlxcblwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBUZXN0IHNlc3Npb24gZmFpbGVkOiAke2Vycm9yfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhcIlxcbkNvbm5lY3Rpb24gd29ya3MgYnV0IHN5bmMgbWF5IGhhdmUgaXNzdWVzLlxcblwiKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNvbm5lY3Rpb246IEZBSUxFRFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuQ2hlY2sgeW91ciBDb252ZXggVVJMIGFuZCBBUEkga2V5LlxcblwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIb29rIENvbW1hbmQgKGZvciBDbGF1ZGUgQ29kZSBpbnRlZ3JhdGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxucHJvZ3JhbVxuICAuY29tbWFuZChcImhvb2sgPGV2ZW50PlwiKVxuICAuZGVzY3JpcHRpb24oXCJIYW5kbGUgQ2xhdWRlIENvZGUgaG9vayBldmVudHMgKHJlYWRzIHN0ZGluKVwiKVxuICAuYWN0aW9uKGFzeW5jIChldmVudDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIC8vIEV4aXQgc2lsZW50bHkgaWYgbm90IGNvbmZpZ3VyZWQgKGRvbid0IGJsb2NrIENsYXVkZSBDb2RlKVxuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuYXV0b1N5bmMgPT09IGZhbHNlKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuXG4gICAgLy8gUmVhZCBKU09OIGlucHV0IGZyb20gc3RkaW5cbiAgICBsZXQgaW5wdXQgPSBcIlwiO1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcHJvY2Vzcy5zdGRpbikge1xuICAgICAgaW5wdXQgKz0gY2h1bms7XG4gICAgfVxuXG4gICAgaWYgKCFpbnB1dC50cmltKCkpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcblxuICAgICAgc3dpdGNoIChldmVudCkge1xuICAgICAgICBjYXNlIFwiU2Vzc2lvblN0YXJ0XCI6IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgSG9va1Nlc3Npb25TdGFydERhdGE7XG4gICAgICAgICAgY29uc3Qgc2Vzc2lvbjogU2Vzc2lvbkRhdGEgPSB7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbl9pZCxcbiAgICAgICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICAgICAgY3dkOiBkYXRhLmN3ZCxcbiAgICAgICAgICAgIHBlcm1pc3Npb25Nb2RlOiBkYXRhLnBlcm1pc3Npb25fbW9kZSxcbiAgICAgICAgICAgIHN0YXJ0VHlwZTogZGF0YS5zb3VyY2UgPT09IFwic3RhcnR1cFwiID8gXCJuZXdcIiA6IChkYXRhLnNvdXJjZSBhcyBTZXNzaW9uRGF0YVtcInN0YXJ0VHlwZVwiXSksXG4gICAgICAgICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIHByb2plY3RQYXRoOiBkYXRhLmN3ZCxcbiAgICAgICAgICAgIHByb2plY3ROYW1lOiBkYXRhLmN3ZCA/IGRhdGEuY3dkLnNwbGl0KFwiL1wiKS5wb3AoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jU2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJTZXNzaW9uRW5kXCI6IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgSG9va1Nlc3Npb25FbmREYXRhO1xuICAgICAgICAgIGNvbnN0IHNlc3Npb246IFNlc3Npb25EYXRhID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgIGVuZFJlYXNvbjogZGF0YS5yZWFzb24sXG4gICAgICAgICAgICBlbmRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCBjbGllbnQuc3luY1Nlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFwiVXNlclByb21wdFN1Ym1pdFwiOiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIEhvb2tVc2VyUHJvbXB0RGF0YTtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlOiBNZXNzYWdlRGF0YSA9IHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBgJHtkYXRhLnNlc3Npb25faWR9LSR7RGF0ZS5ub3coKX1gLFxuICAgICAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgICAgICByb2xlOiBcInVzZXJcIixcbiAgICAgICAgICAgIGNvbnRlbnQ6IGRhdGEucHJvbXB0LFxuICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCBjbGllbnQuc3luY01lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFwiUG9zdFRvb2xVc2VcIjoge1xuICAgICAgICAgIGlmICghY29uZmlnLnN5bmNUb29sQ2FsbHMpIGJyZWFrO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGlucHV0KSBhcyBIb29rVG9vbFVzZURhdGE7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZTogTWVzc2FnZURhdGEgPSB7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbl9pZCxcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogYCR7ZGF0YS5zZXNzaW9uX2lkfS10b29sLSR7RGF0ZS5ub3coKX1gLFxuICAgICAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICAgICAgdG9vbE5hbWU6IGRhdGEudG9vbF9uYW1lLFxuICAgICAgICAgICAgdG9vbEFyZ3M6IGRhdGEudG9vbF9pbnB1dCxcbiAgICAgICAgICAgIHRvb2xSZXN1bHQ6IGRhdGEudG9vbF9yZXN1bHQ/Lm91dHB1dCB8fCBkYXRhLnRvb2xfcmVzdWx0Py5lcnJvcixcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBcIlN0b3BcIjoge1xuICAgICAgICAgIC8vIFN0b3AgZXZlbnQgaW5kaWNhdGVzIENsYXVkZSBmaW5pc2hlZCByZXNwb25kaW5nXG4gICAgICAgICAgLy8gV2UgY291bGQgdHJhY2sgdGhpcyBidXQgZm9yIG5vdyBqdXN0IGFja25vd2xlZGdlXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIFVua25vd24gZXZlbnQsIGlnbm9yZVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIExvZyB0byBzdGRlcnIgYnV0IGRvbid0IGJsb2NrIENsYXVkZSBDb2RlXG4gICAgICBjb25zb2xlLmVycm9yKGBbY2xhdWRlLWNvZGUtc3luY10gRXJyb3I6ICR7ZXJyb3J9YCk7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuICB9KTtcblxuLy8gUGFyc2UgYW5kIHJ1blxucHJvZ3JhbS5wYXJzZSgpO1xuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-code-sync",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Sync your Claude Code sessions to OpenSync dashboard. Track coding sessions, analyze tool usage, and monitor token consumption across projects.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|