claude-code-sync 0.1.10 → 0.1.12

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
@@ -92,6 +92,32 @@ Ready! Start Claude Code and sessions will sync automatically.
92
92
 
93
93
  Sessions will now sync automatically when you use Claude Code.
94
94
 
95
+ ## Upgrading
96
+
97
+ To upgrade to the latest version:
98
+
99
+ ```bash
100
+ # Close Claude Code first (important for hooks to reload)
101
+ # Then upgrade the package
102
+ npm update -g claude-code-sync
103
+
104
+ # Verify the new version
105
+ claude-code-sync --version
106
+
107
+ # Check your configuration is still valid
108
+ claude-code-sync verify
109
+ ```
110
+
111
+ If you encounter issues after upgrading:
112
+
113
+ ```bash
114
+ # Re-run setup to ensure hooks are configured
115
+ claude-code-sync setup
116
+
117
+ # Test connectivity
118
+ claude-code-sync synctest
119
+ ```
120
+
95
121
  ## CLI Commands
96
122
 
97
123
  | Command | Description |
package/dist/cli.js CHANGED
@@ -471,7 +471,15 @@ const SESSION_STATE_FILE = path.join(process.env.HOME || "~", ".config", "claude
471
471
  function loadSessionState() {
472
472
  try {
473
473
  if (fs.existsSync(SESSION_STATE_FILE)) {
474
- return JSON.parse(fs.readFileSync(SESSION_STATE_FILE, "utf-8"));
474
+ const data = JSON.parse(fs.readFileSync(SESSION_STATE_FILE, "utf-8"));
475
+ // Convert arrays back to Sets for syncedMessageUuids
476
+ for (const sessionId of Object.keys(data)) {
477
+ const session = data[sessionId];
478
+ if (session.syncedMessageUuids && Array.isArray(session.syncedMessageUuids)) {
479
+ session.syncedMessageUuids = new Set(session.syncedMessageUuids);
480
+ }
481
+ }
482
+ return data;
475
483
  }
476
484
  }
477
485
  catch {
@@ -485,7 +493,18 @@ function saveSessionState(state) {
485
493
  if (!fs.existsSync(dir)) {
486
494
  fs.mkdirSync(dir, { recursive: true });
487
495
  }
488
- fs.writeFileSync(SESSION_STATE_FILE, JSON.stringify(state, null, 2));
496
+ // Convert Sets to arrays for JSON serialization
497
+ const serializable = {};
498
+ for (const sessionId of Object.keys(state)) {
499
+ const session = state[sessionId];
500
+ serializable[sessionId] = {
501
+ ...session,
502
+ syncedMessageUuids: session.syncedMessageUuids instanceof Set
503
+ ? Array.from(session.syncedMessageUuids)
504
+ : session.syncedMessageUuids,
505
+ };
506
+ }
507
+ fs.writeFileSync(SESSION_STATE_FILE, JSON.stringify(serializable, null, 2));
489
508
  }
490
509
  catch {
491
510
  // Ignore errors
@@ -503,6 +522,65 @@ function generateTitle(prompt) {
503
522
  }
504
523
  return trimmed;
505
524
  }
525
+ function parseTranscriptFile(transcriptPath) {
526
+ const result = {
527
+ assistantMessages: [],
528
+ tokenUsage: { input: 0, output: 0 },
529
+ };
530
+ try {
531
+ if (!fs.existsSync(transcriptPath)) {
532
+ return result;
533
+ }
534
+ const content = fs.readFileSync(transcriptPath, "utf-8");
535
+ const lines = content.trim().split("\n");
536
+ const seenUuids = new Set();
537
+ for (const line of lines) {
538
+ if (!line.trim())
539
+ continue;
540
+ try {
541
+ const entry = JSON.parse(line);
542
+ // Only process assistant messages
543
+ if (entry.type === "assistant" && entry.message) {
544
+ const msg = entry.message;
545
+ const uuid = entry.uuid || "";
546
+ // Skip if we've already seen this UUID (dedup)
547
+ if (uuid && seenUuids.has(uuid))
548
+ continue;
549
+ if (uuid)
550
+ seenUuids.add(uuid);
551
+ // Extract text content from message
552
+ if (msg.content && Array.isArray(msg.content)) {
553
+ for (const part of msg.content) {
554
+ if (part.type === "text" && part.text) {
555
+ result.assistantMessages.push({
556
+ uuid,
557
+ text: part.text,
558
+ timestamp: entry.timestamp || new Date().toISOString(),
559
+ model: msg.model,
560
+ });
561
+ }
562
+ }
563
+ }
564
+ // Accumulate token usage from all assistant messages
565
+ if (msg.usage) {
566
+ result.tokenUsage.input +=
567
+ (msg.usage.input_tokens || 0) +
568
+ (msg.usage.cache_read_input_tokens || 0) +
569
+ (msg.usage.cache_creation_input_tokens || 0);
570
+ result.tokenUsage.output += msg.usage.output_tokens || 0;
571
+ }
572
+ }
573
+ }
574
+ catch {
575
+ // Skip malformed lines
576
+ }
577
+ }
578
+ }
579
+ catch {
580
+ // Return empty result on error
581
+ }
582
+ return result;
583
+ }
506
584
  program
507
585
  .command("hook <event>")
508
586
  .description("Handle Claude Code hook events (reads stdin)")
@@ -625,38 +703,46 @@ program
625
703
  break;
626
704
  }
627
705
  case "Stop": {
628
- // Stop event contains the assistant's response and token usage
706
+ // Stop event provides transcript_path - we read it to get messages and tokens
629
707
  const data = JSON.parse(input);
630
708
  const state = sessionState[data.session_id] || {};
631
- // Update accumulated token usage
632
- if (data.token_usage) {
633
- const current = state.tokenUsage || { input: 0, output: 0 };
634
- state.tokenUsage = {
635
- input: current.input + data.token_usage.input,
636
- output: current.output + data.token_usage.output,
637
- };
709
+ // Parse transcript file to extract assistant messages and token usage
710
+ if (data.transcript_path) {
711
+ const transcript = parseTranscriptFile(data.transcript_path);
712
+ // Update token usage from transcript
713
+ if (transcript.tokenUsage.input > 0 || transcript.tokenUsage.output > 0) {
714
+ state.tokenUsage = transcript.tokenUsage;
715
+ }
716
+ // Track which messages we've already synced to avoid duplicates
717
+ const syncedMessages = state.syncedMessageUuids instanceof Set
718
+ ? state.syncedMessageUuids
719
+ : new Set(Array.isArray(state.syncedMessageUuids) ? state.syncedMessageUuids : []);
720
+ // Sync new assistant messages
721
+ for (const msg of transcript.assistantMessages) {
722
+ // Skip if we've already synced this message
723
+ if (msg.uuid && syncedMessages.has(msg.uuid))
724
+ continue;
725
+ if (msg.uuid)
726
+ syncedMessages.add(msg.uuid);
727
+ // Increment message count
728
+ state.messageCount = (state.messageCount || 0) + 1;
729
+ const message = {
730
+ sessionId: data.session_id,
731
+ messageId: msg.uuid || `${data.session_id}-assistant-${Date.now()}`,
732
+ source: "claude-code",
733
+ role: "assistant",
734
+ content: msg.text,
735
+ model: msg.model,
736
+ timestamp: msg.timestamp,
737
+ };
738
+ await client.syncMessage(message);
739
+ }
740
+ // Store synced message UUIDs (convert Set to array for JSON)
741
+ state.syncedMessageUuids = syncedMessages;
638
742
  }
639
- // Increment message count for assistant response
640
- state.messageCount = (state.messageCount || 0) + 1;
641
743
  sessionState[data.session_id] = state;
642
744
  saveSessionState(sessionState);
643
- // Sync the assistant's response as a message
644
- if (data.response) {
645
- const message = {
646
- sessionId: data.session_id,
647
- messageId: `${data.session_id}-assistant-${Date.now()}`,
648
- source: "claude-code",
649
- role: "assistant",
650
- content: data.response,
651
- tokenCount: data.token_usage
652
- ? data.token_usage.input + data.token_usage.output
653
- : undefined,
654
- durationMs: data.duration_ms,
655
- timestamp: new Date().toISOString(),
656
- };
657
- await client.syncMessage(message);
658
- }
659
- // Update session with accumulated token usage
745
+ // Update session with token usage from transcript
660
746
  const session = {
661
747
  sessionId: data.session_id,
662
748
  source: "claude-code",
@@ -680,4 +766,4 @@ program
680
766
  });
681
767
  // Parse and run
682
768
  program.parse();
683
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHlDQUFvQztBQUNwQyxtREFBcUM7QUFDckMsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixtQ0FRaUI7QUFrRWpCLGlDQUFpQztBQUNqQyxTQUFTLFVBQVU7SUFDakIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQWdCLENBQUM7UUFDekUsT0FBTyxHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQztJQUNoQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLG1CQUFPLEVBQUUsQ0FBQztBQUU5QixPQUFPO0tBQ0osSUFBSSxDQUFDLGtCQUFrQixDQUFDO0tBQ3hCLFdBQVcsQ0FBQyxpREFBaUQsQ0FBQztLQUM5RCxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUV6QiwrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRSxTQUFTLE1BQU0sQ0FBQyxRQUFnQjtJQUM5QixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFB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O0lBQ2xCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsNENBQTRDO1FBQzVDLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFTCxnQkFBZ0I7QUFDaEIsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG4vKipcbiAqIENsYXVkZSBDb2RlIFN5bmMgQ0xJXG4gKlxuICogQ29tbWFuZHM6XG4gKiAgIGxvZ2luICAgLSBDb25maWd1cmUgQ29udmV4IFVSTCBhbmQgQVBJIEtleVxuICogICBsb2dvdXQgIC0gQ2xlYXIgc3RvcmVkIGNyZWRlbnRpYWxzXG4gKiAgIHN0YXR1cyAgLSBTaG93IGNvbm5lY3Rpb24gc3RhdHVzXG4gKiAgIGNvbmZpZyAgLSBTaG93IGN1cnJlbnQgY29uZmlndXJhdGlvblxuICovXG5cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tIFwicmVhZGxpbmVcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHtcbiAgbG9hZENvbmZpZyxcbiAgc2F2ZUNvbmZpZyxcbiAgY2xlYXJDb25maWcsXG4gIFN5bmNDbGllbnQsXG4gIENvbmZpZyxcbiAgU2Vzc2lvbkRhdGEsXG4gIE1lc3NhZ2VEYXRhLFxufSBmcm9tIFwiLi9pbmRleFwiO1xuXG4vLyBUeXBlcyBmb3IgQ2xhdWRlIENvZGUgaG9vayBldmVudCBkYXRhIGZyb20gc3RkaW5cbmludGVyZmFjZSBIb29rU2Vzc2lvblN0YXJ0RGF0YSB7XG4gIHNlc3Npb25faWQ6IHN0cmluZztcbiAgY3dkPzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgcGVybWlzc2lvbl9tb2RlPzogc3RyaW5nO1xuICBzb3VyY2U/OiBzdHJpbmc7XG4gIHRoaW5raW5nX2VuYWJsZWQ/OiBib29sZWFuO1xuICBtY3Bfc2VydmVycz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSG9va1Nlc3Npb25FbmREYXRhIHtcbiAgc2Vzc2lvbl9pZDogc3RyaW5nO1xuICByZWFzb24/OiBcInVzZXJfc3RvcFwiIHwgXCJtYXhfdHVybnNcIiB8IFwiZXJyb3JcIiB8IFwiY29tcGxldGVkXCI7XG4gIG1lc3NhZ2VfY291bnQ/OiBudW1iZXI7XG4gIHRvb2xfY2FsbF9jb3VudD86IG51bWJlcjtcbiAgdG90YWxfdG9rZW5fdXNhZ2U/OiB7XG4gICAgaW5wdXQ6IG51bWJlcjtcbiAgICBvdXRwdXQ6IG51bWJlcjtcbiAgfTtcbiAgY29zdF9lc3RpbWF0ZT86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEhvb2tVc2VyUHJvbXB0RGF0YSB7XG4gIHNlc3Npb25faWQ6IHN0cmluZztcbiAgcHJvbXB0OiBzdHJpbmc7XG4gIHRpbWVzdGFtcD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEhvb2tUb29sVXNlRGF0YSB7XG4gIHNlc3Npb25faWQ6IHN0cmluZztcbiAgdG9vbF9uYW1lOiBzdHJpbmc7XG4gIHRvb2xfdXNlX2lkPzogc3RyaW5nO1xuICB0b29sX2lucHV0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHRvb2xfcmVzdWx0Pzoge1xuICAgIG91dHB1dD86IHN0cmluZztcbiAgICBlcnJvcj86IHN0cmluZztcbiAgfTtcbiAgZHVyYXRpb25fbXM/OiBudW1iZXI7XG4gIHN1Y2Nlc3M/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSG9va1N0b3BEYXRhIHtcbiAgc2Vzc2lvbl9pZDogc3RyaW5nO1xuICByZXNwb25zZT86IHN0cmluZztcbiAgdG9rZW5fdXNhZ2U/OiB7XG4gICAgaW5wdXQ6IG51bWJlcjtcbiAgICBvdXRwdXQ6IG51bWJlcjtcbiAgfTtcbiAgZHVyYXRpb25fbXM/OiBudW1iZXI7XG4gIHN0b3BfcmVhc29uPzogc3RyaW5nO1xufVxuXG4vLyBUeXBlcyBmb3IgQ2xhdWRlIENvZGUgc2V0dGluZ3MuanNvblxuaW50ZXJmYWNlIENsYXVkZVNldHRpbmdzIHtcbiAgaG9va3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLy8gVHlwZSBmb3IgcGFja2FnZS5qc29uIHZlcnNpb24gZmllbGRcbmludGVyZmFjZSBQYWNrYWdlSnNvbiB7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8vIFJlYWQgdmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvblxuZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHBrZ1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwicGFja2FnZS5qc29uXCIpO1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBrZ1BhdGgsIFwidXRmLThcIikpIGFzIFBhY2thZ2VKc29uO1xuICAgIHJldHVybiBwa2cudmVyc2lvbiB8fCBcIjAuMC4wXCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBcIjAuMC4wXCI7XG4gIH1cbn1cblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW1cbiAgLm5hbWUoXCJjbGF1ZGUtY29kZS1zeW5jXCIpXG4gIC5kZXNjcmlwdGlvbihcIlN5bmMgQ2xhdWRlIENvZGUgc2Vzc2lvbnMgdG8gT3BlblN5bmMgZGFzaGJvYXJkXCIpXG4gIC52ZXJzaW9uKGdldFZlcnNpb24oKSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhlbHBlciBGdW5jdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gcHJvbXB0KHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmwucXVlc3Rpb24ocXVlc3Rpb24sIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICByZXNvbHZlKGFuc3dlci50cmltKCkpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFza0FwaUtleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChrZXkubGVuZ3RoIDw9IDgpIHJldHVybiBcIioqKipcIjtcbiAgcmV0dXJuIGtleS5zdWJzdHJpbmcoMCwgNCkgKyBcIioqKipcIiArIGtleS5zdWJzdHJpbmcoa2V5Lmxlbmd0aCAtIDQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb21tYW5kc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwibG9naW5cIilcbiAgLmRlc2NyaXB0aW9uKFwiQ29uZmlndXJlIENvbnZleCBVUkwgYW5kIEFQSSBLZXlcIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coXCJcXG4gIENsYXVkZSBDb2RlIFN5bmMgLSBMb2dpblxcblwiKTtcbiAgICBjb25zb2xlLmxvZyhcIkdldCB5b3VyIEFQSSBrZXkgZnJvbSB5b3VyIE9wZW5TeW5jLmRldiBTZXR0aW5ncyBwYWdlLCBzdGFydHMgd2l0aCBvc2tfLiBFbnRlciBpdCBoZXJlOlwiKTtcbiAgICBjb25zb2xlLmxvZyhcIiAgMS4gR28gdG8gU2V0dGluZ3NcIik7XG4gICAgY29uc29sZS5sb2coXCIgIDIuIENsaWNrICdHZW5lcmF0ZSBBUEkgS2V5J1wiKTtcbiAgICBjb25zb2xlLmxvZyhcIiAgMy4gQ29weSB0aGUga2V5IChzdGFydHMgd2l0aCBvc2tfKVxcblwiKTtcblxuICAgIGNvbnN0IGNvbnZleFVybCA9IGF3YWl0IHByb21wdChcIkNvbnZleCBVUkwgKGUuZy4sIGh0dHBzOi8veW91ci1wcm9qZWN0LmNvbnZleC5jbG91ZCk6IFwiKTtcblxuICAgIGlmICghY29udmV4VXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IENvbnZleCBVUkwgaXMgcmVxdWlyZWRcIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFjb252ZXhVcmwuaW5jbHVkZXMoXCJjb252ZXguY2xvdWRcIikgJiYgIWNvbnZleFVybC5pbmNsdWRlcyhcImNvbnZleC5zaXRlXCIpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IEludmFsaWQgQ29udmV4IFVSTC4gTXVzdCBjb250YWluIGNvbnZleC5jbG91ZCBvciBjb252ZXguc2l0ZVwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcGlLZXkgPSBhd2FpdCBwcm9tcHQoXCJBUEkgS2V5IChvc2tfLi4uKTogXCIpO1xuXG4gICAgaWYgKCFhcGlLZXkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcjogQVBJIEtleSBpcyByZXF1aXJlZFwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBpZiAoIWFwaUtleS5zdGFydHNXaXRoKFwib3NrX1wiKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yOiBJbnZhbGlkIEFQSSBLZXkuIE11c3Qgc3RhcnQgd2l0aCBvc2tfXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZzogQ29uZmlnID0ge1xuICAgICAgY29udmV4VXJsLFxuICAgICAgYXBpS2V5LFxuICAgICAgYXV0b1N5bmM6IHRydWUsXG4gICAgICBzeW5jVG9vbENhbGxzOiB0cnVlLFxuICAgICAgc3luY1RoaW5raW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gVGVzdCBjb25uZWN0aW9uXG4gICAgY29uc29sZS5sb2coXCJcXG5UZXN0aW5nIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgICBjb25zdCBjb25uZWN0ZWQgPSBhd2FpdCBjbGllbnQudGVzdENvbm5lY3Rpb24oKTtcblxuICAgIGlmICghY29ubmVjdGVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IENvdWxkIG5vdCBjb25uZWN0IHRvIENvbnZleCBiYWNrZW5kXCIpO1xuICAgICAgY29uc29sZS5lcnJvcihcIiAgIENoZWNrIHlvdXIgVVJMIGFuZCB0cnkgYWdhaW5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBjb25maWdcbiAgICBzYXZlQ29uZmlnKGNvbmZpZyk7XG4gICAgY29uc29sZS5sb2coXCJcXG5Db25maWd1cmF0aW9uIHNhdmVkIVwiKTtcbiAgICBjb25zb2xlLmxvZyhgICAgVVJMOiAke2NvbnZleFVybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICAgS2V5OiAke21hc2tBcGlLZXkoYXBpS2V5KX1gKTtcbiAgICBjb25zb2xlLmxvZyhcIlxcbk5leHQgc3RlcDogUnVuIHRoZSBzZXR1cCBjb21tYW5kIHRvIGNvbmZpZ3VyZSBDbGF1ZGUgQ29kZSBob29rczpcXG5cIik7XG4gICAgY29uc29sZS5sb2coXCIgICBjbGF1ZGUtY29kZS1zeW5jIHNldHVwXFxuXCIpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcImxvZ291dFwiKVxuICAuZGVzY3JpcHRpb24oXCJDbGVhciBzdG9yZWQgY3JlZGVudGlhbHNcIilcbiAgLmFjdGlvbigoKSA9PiB7XG4gICAgY2xlYXJDb25maWcoKTtcbiAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzIGNsZWFyZWRcIik7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic3RhdHVzXCIpXG4gIC5kZXNjcmlwdGlvbihcIlNob3cgY29ubmVjdGlvbiBzdGF0dXNcIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuXG4gICAgY29uc29sZS5sb2coXCJcXG4gIENsYXVkZSBDb2RlIFN5bmMgLSBTdGF0dXNcXG5cIik7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgY29uc29sZS5sb2coXCJOb3QgY29uZmlndXJlZFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiICAgUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXBcXG5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXCJDb25maWd1cmF0aW9uOlwiKTtcbiAgICBjb25zb2xlLmxvZyhgICBDb252ZXggVVJMOiAke2NvbmZpZy5jb252ZXhVcmx9YCk7XG4gICAgY29uc29sZS5sb2coYCAgQVBJIEtleTogICAgJHttYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpfWApO1xuICAgIGNvbnNvbGUubG9nKGAgIEF1dG8gU3luYzogICR7Y29uZmlnLmF1dG9TeW5jICE9PSBmYWxzZSA/IFwiZW5hYmxlZFwiIDogXCJkaXNhYmxlZFwifWApO1xuICAgIGNvbnNvbGUubG9nKGAgIFRvb2wgQ2FsbHM6ICR7Y29uZmlnLnN5bmNUb29sQ2FsbHMgIT09IGZhbHNlID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCk7XG4gICAgY29uc29sZS5sb2coYCAgVGhpbmtpbmc6ICAgJHtjb25maWcuc3luY1RoaW5raW5nID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcblRlc3RpbmcgY29ubmVjdGlvbi4uLlwiKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuXG4gICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0ZWQgdG8gQ29udmV4IGJhY2tlbmRcXG5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3I6IENvdWxkIG5vdCBjb25uZWN0IHRvIENvbnZleCBiYWNrZW5kXFxuXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJjb25maWdcIilcbiAgLmRlc2NyaXB0aW9uKFwiU2hvdyBjdXJyZW50IGNvbmZpZ3VyYXRpb25cIilcbiAgLm9wdGlvbihcIi0tanNvblwiLCBcIk91dHB1dCBhcyBKU09OXCIpXG4gIC5hY3Rpb24oKG9wdGlvbnM6IHsganNvbj86IGJvb2xlYW4gfSkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgY29uZmlndXJlZDogZmFsc2UgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJOb3QgY29uZmlndXJlZC4gUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXAuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25maWd1cmVkOiB0cnVlLFxuICAgICAgICAgICAgY29udmV4VXJsOiBjb25maWcuY29udmV4VXJsLFxuICAgICAgICAgICAgYXBpS2V5OiBtYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpLFxuICAgICAgICAgICAgYXV0b1N5bmM6IGNvbmZpZy5hdXRvU3luYyAhPT0gZmFsc2UsXG4gICAgICAgICAgICBzeW5jVG9vbENhbGxzOiBjb25maWcuc3luY1Rvb2xDYWxscyAhPT0gZmFsc2UsXG4gICAgICAgICAgICBzeW5jVGhpbmtpbmc6IGNvbmZpZy5zeW5jVGhpbmtpbmcgPT09IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJcXG4gIEN1cnJlbnQgQ29uZmlndXJhdGlvblxcblwiKTtcbiAgICAgIGNvbnNvbGUubG9nKGBDb252ZXggVVJMOiAgJHtjb25maWcuY29udmV4VXJsfWApO1xuICAgICAgY29uc29sZS5sb2coYEFQSSBLZXk6ICAgICAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgQXV0byBTeW5jOiAgICR7Y29uZmlnLmF1dG9TeW5jICE9PSBmYWxzZX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBUb29sIENhbGxzOiAgJHtjb25maWcuc3luY1Rvb2xDYWxscyAhPT0gZmFsc2V9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgVGhpbmtpbmc6ICAgICR7Y29uZmlnLnN5bmNUaGlua2luZyA9PT0gdHJ1ZX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBcXG5Db25maWcgZmlsZTogfi8uY29uZmlnL2NsYXVkZS1jb2RlLXN5bmMvY29uZmlnLmpzb25cXG5gKTtcbiAgICB9XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic2V0IDxrZXk+IDx2YWx1ZT5cIilcbiAgLmRlc2NyaXB0aW9uKFwiU2V0IGEgY29uZmlndXJhdGlvbiB2YWx1ZVwiKVxuICAuYWN0aW9uKChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiTm90IGNvbmZpZ3VyZWQuIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBsb2dpbicgZmlyc3QuXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkS2V5cyA9IFtcImF1dG9TeW5jXCIsIFwic3luY1Rvb2xDYWxsc1wiLCBcInN5bmNUaGlua2luZ1wiXTtcbiAgICBpZiAoIXZhbGlkS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGtleS4gVmFsaWQga2V5czogJHt2YWxpZEtleXMuam9pbihcIiwgXCIpfWApO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGJvb2xWYWx1ZSA9IHZhbHVlID09PSBcInRydWVcIiB8fCB2YWx1ZSA9PT0gXCIxXCIgfHwgdmFsdWUgPT09IFwieWVzXCI7XG4gICAgXG4gICAgLy8gVHlwZS1zYWZlIGNvbmZpZyB1cGRhdGVcbiAgICBpZiAoa2V5ID09PSBcImF1dG9TeW5jXCIpIHtcbiAgICAgIGNvbmZpZy5hdXRvU3luYyA9IGJvb2xWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJzeW5jVG9vbENhbGxzXCIpIHtcbiAgICAgIGNvbmZpZy5zeW5jVG9vbENhbGxzID0gYm9vbFZhbHVlO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN5bmNUaGlua2luZ1wiKSB7XG4gICAgICBjb25maWcuc3luY1RoaW5raW5nID0gYm9vbFZhbHVlO1xuICAgIH1cblxuICAgIHNhdmVDb25maWcoY29uZmlnKTtcbiAgICBjb25zb2xlLmxvZyhgU2V0ICR7a2V5fSA9ICR7Ym9vbFZhbHVlfWApO1xuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2V0dXAgQ29tbWFuZCAoY29uZmlndXJlcyBDbGF1ZGUgQ29kZSBob29rcylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gQ2xhdWRlIENvZGUgaG9va3MgY29uZmlndXJhdGlvblxuY29uc3QgQ0xBVURFX0hPT0tTX0NPTkZJRyA9IHtcbiAgaG9va3M6IHtcbiAgICBTZXNzaW9uU3RhcnQ6IFtcbiAgICAgIHtcbiAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1hbmRcIixcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiY2xhdWRlLWNvZGUtc3luYyBob29rIFNlc3Npb25TdGFydFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgU2Vzc2lvbkVuZDogW1xuICAgICAge1xuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgU2Vzc2lvbkVuZFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgVXNlclByb21wdFN1Ym1pdDogW1xuICAgICAge1xuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgVXNlclByb21wdFN1Ym1pdFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgUG9zdFRvb2xVc2U6IFtcbiAgICAgIHtcbiAgICAgICAgbWF0Y2hlcjogXCIqXCIsXG4gICAgICAgIGhvb2tzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJjb21tYW5kXCIsXG4gICAgICAgICAgICBjb21tYW5kOiBcImNsYXVkZS1jb2RlLXN5bmMgaG9vayBQb3N0VG9vbFVzZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgU3RvcDogW1xuICAgICAge1xuICAgICAgICBtYXRjaGVyOiBcIipcIixcbiAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1hbmRcIixcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiY2xhdWRlLWNvZGUtc3luYyBob29rIFN0b3BcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxufTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcInNldHVwXCIpXG4gIC5kZXNjcmlwdGlvbihcIkFkZCBob29rcyB0byBDbGF1ZGUgQ29kZSBzZXR0aW5ncyAoY29uZmlndXJlcyB+Ly5jbGF1ZGUvc2V0dGluZ3MuanNvbilcIilcbiAgLm9wdGlvbihcIi0tZm9yY2VcIiwgXCJPdmVyd3JpdGUgZXhpc3RpbmcgaG9va3MgY29uZmlndXJhdGlvblwiKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiB7IGZvcmNlPzogYm9vbGVhbiB9KSA9PiB7XG4gICAgY29uc3QgY2xhdWRlRGlyID0gcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUgfHwgXCJ+XCIsIFwiLmNsYXVkZVwiKTtcbiAgICBjb25zdCBzZXR0aW5nc1BhdGggPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcInNldHRpbmdzLmpzb25cIik7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ2xhdWRlIENvZGUgU3luYyAtIFNldHVwXFxuXCIpO1xuXG4gICAgLy8gQ2hlY2sgaWYgcGx1Z2luIGNyZWRlbnRpYWxzIGFyZSBjb25maWd1cmVkXG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIldhcm5pbmc6IFBsdWdpbiBub3QgY29uZmlndXJlZCB5ZXQuXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIGZpcnN0IHRvIHNldCB1cCBjcmVkZW50aWFscy5cXG5cIik7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIC5jbGF1ZGUgZGlyZWN0b3J5IGlmIG5lZWRlZFxuICAgIGlmICghZnMuZXhpc3RzU3luYyhjbGF1ZGVEaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoY2xhdWRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ3JlYXRlZCB+Ly5jbGF1ZGUgZGlyZWN0b3J5XCIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBleGlzdGluZyBzZXR0aW5nc1xuICAgIGxldCBleGlzdGluZ1NldHRpbmdzOiBDbGF1ZGVTZXR0aW5ncyA9IHt9O1xuICAgIGxldCBoYXNFeGlzdGluZ0hvb2tzID0gZmFsc2U7XG5cbiAgICBpZiAoZnMuZXhpc3RzU3luYyhzZXR0aW5nc1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHNldHRpbmdzUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgICAgZXhpc3RpbmdTZXR0aW5ncyA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgQ2xhdWRlU2V0dGluZ3M7XG4gICAgICAgIGhhc0V4aXN0aW5nSG9va3MgPSAhIWV4aXN0aW5nU2V0dGluZ3MuaG9va3M7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRm91bmQgZXhpc3Rpbmcgc2V0dGluZ3MuanNvblwiKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmxvZyhcIldhcm5pbmc6IENvdWxkIG5vdCBwYXJzZSBleGlzdGluZyBzZXR0aW5ncy5qc29uLCB3aWxsIGNyZWF0ZSBuZXcgb25lXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBleGlzdGluZyBob29rc1xuICAgIGlmIChoYXNFeGlzdGluZ0hvb2tzICYmICFvcHRpb25zLmZvcmNlKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkV4aXN0aW5nIGhvb2tzIGNvbmZpZ3VyYXRpb24gZm91bmQuXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBVc2UgLS1mb3JjZSB0byBvdmVyd3JpdGUsIG9yIG1hbnVhbGx5IG1lcmdlIHRoZSBob29rcy5cXG5cIik7XG4gICAgICBjb25zb2xlLmxvZyhcIlRvIG1hbnVhbGx5IGFkZCwgaW5jbHVkZSB0aGVzZSBob29rcyBpbiB5b3VyIHNldHRpbmdzLmpzb246XCIpO1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoQ0xBVURFX0hPT0tTX0NPTkZJRywgbnVsbCwgMikpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIC8vIE1lcmdlIHNldHRpbmdzXG4gICAgY29uc3QgbmV3U2V0dGluZ3MgPSB7XG4gICAgICAuLi5leGlzdGluZ1NldHRpbmdzLFxuICAgICAgLi4uQ0xBVURFX0hPT0tTX0NPTkZJRyxcbiAgICB9O1xuXG4gICAgLy8gV3JpdGUgc2V0dGluZ3NcbiAgICB0cnkge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhzZXR0aW5nc1BhdGgsIEpTT04uc3RyaW5naWZ5KG5ld1NldHRpbmdzLCBudWxsLCAyKSk7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkNsYXVkZSBDb2RlIGhvb2tzIGNvbmZpZ3VyZWQhXCIpO1xuICAgICAgY29uc29sZS5sb2coYCAgIFNldHRpbmdzIGZpbGU6ICR7c2V0dGluZ3NQYXRofWApO1xuICAgICAgY29uc29sZS5sb2coXCJcXG5TZXR1cCBjb21wbGV0ZS4gU2Vzc2lvbnMgd2lsbCBzeW5jIGF1dG9tYXRpY2FsbHkuXFxuXCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igd3JpdGluZyBzZXR0aW5nczpcIiwgZXJyb3IpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJ2ZXJpZnlcIilcbiAgLmRlc2NyaXB0aW9uKFwiVmVyaWZ5IGNyZWRlbnRpYWxzIGFuZCBDbGF1ZGUgQ29kZSBjb25maWd1cmF0aW9uXCIpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKFwiXFxuICBPcGVuU3luYyBTZXR1cCBWZXJpZmljYXRpb25cXG5cIik7XG5cbiAgICAvLyBDaGVjayBjcmVkZW50aWFsc1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzOiBPS1wiKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICBDb252ZXggVVJMOiAke2NvbmZpZy5jb252ZXhVcmx9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgICAgQVBJIEtleTogJHttYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzOiBOT1QgQ09ORklHVVJFRFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiICAgUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXBcIik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgQ2xhdWRlIENvZGUgY29uZmlnXG4gICAgY29uc3Qgc2V0dGluZ3NQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUgfHwgXCJ+XCIsIFwiLmNsYXVkZVwiLCBcInNldHRpbmdzLmpzb25cIik7XG4gICAgbGV0IGhvb2tzQ29uZmlndXJlZCA9IGZhbHNlO1xuXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoc2V0dGluZ3NQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhzZXR0aW5nc1BhdGgsIFwidXRmLThcIik7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBDbGF1ZGVTZXR0aW5ncztcbiAgICAgICAgaG9va3NDb25maWd1cmVkID0gISFzZXR0aW5ncy5ob29rcz8uU2Vzc2lvblN0YXJ0O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBwYXJzZSBlcnJvcnNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIlwiKTtcbiAgICBpZiAoaG9va3NDb25maWd1cmVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsYXVkZSBDb2RlIENvbmZpZzogT0tcIik7XG4gICAgICBjb25zb2xlLmxvZyhgICAgQ29uZmlnIGZpbGU6ICR7c2V0dGluZ3NQYXRofWApO1xuICAgICAgY29uc29sZS5sb2coXCIgICBIb29rcyByZWdpc3RlcmVkOiBjbGF1ZGUtY29kZS1zeW5jXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsYXVkZSBDb2RlIENvbmZpZzogTk9UIENPTkZJR1VSRURcIik7XG4gICAgICBjb25zb2xlLmxvZyhcIiAgIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBzZXR1cCcgdG8gY29uZmlndXJlIGhvb2tzXCIpO1xuICAgIH1cblxuICAgIC8vIFRlc3QgY29ubmVjdGlvbiBpZiBjcmVkZW50aWFscyBleGlzdFxuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuVGVzdGluZyBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuICAgICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNvbm5lY3Rpb246IE9LXFxuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBGQUlMRURcXG5cIik7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZmlnICYmIGhvb2tzQ29uZmlndXJlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJSZWFkeSEgU3RhcnQgQ2xhdWRlIENvZGUgYW5kIHNlc3Npb25zIHdpbGwgc3luYyBhdXRvbWF0aWNhbGx5LlxcblwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJcIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU3luYyBUZXN0IENvbW1hbmQgKHRlc3QgY29ubmVjdGl2aXR5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic3luY3Rlc3RcIilcbiAgLmRlc2NyaXB0aW9uKFwiVGVzdCBjb25uZWN0aXZpdHkgYW5kIGNyZWF0ZSBhIHRlc3Qgc2Vzc2lvblwiKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBsb2FkQ29uZmlnKCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ2xhdWRlIENvZGUgU3luYyAtIENvbm5lY3Rpb24gVGVzdFxcblwiKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIk5vdCBjb25maWd1cmVkXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIHRvIHNldCB1cFxcblwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIkNvbmZpZ3VyYXRpb246XCIpO1xuICAgIGNvbnNvbGUubG9nKGAgIENvbnZleCBVUkw6ICR7Y29uZmlnLmNvbnZleFVybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICBBUEkgS2V5OiAgICAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcblRlc3RpbmcgY29ubmVjdGlvbi4uLlwiKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuXG4gICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBPS1wiKTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGEgdGVzdCBzZXNzaW9uIHRvIHZlcmlmeSBmdWxsIHN5bmMgd29ya3NcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuQ3JlYXRpbmcgdGVzdCBzZXNzaW9uLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGVzdFNlc3Npb24gPSB7XG4gICAgICAgICAgc2Vzc2lvbklkOiBgdGVzdC0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIiBhcyBjb25zdCxcbiAgICAgICAgICB0aXRsZTogXCJDb25uZWN0aW9uIFRlc3RcIixcbiAgICAgICAgICBwcm9qZWN0TmFtZTogXCJzeW5jdGVzdFwiLFxuICAgICAgICAgIHN0YXJ0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGVuZGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHRlc3RTZXNzaW9uKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJUZXN0IHNlc3Npb24gY3JlYXRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiXFxuU3luYyB0ZXN0IHBhc3NlZC4gUmVhZHkgdG8gc3luYyBDbGF1ZGUgQ29kZSBzZXNzaW9ucy5cXG5cIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCBzZXNzaW9uIGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJcXG5Db25uZWN0aW9uIHdvcmtzIGJ1dCBzeW5jIG1heSBoYXZlIGlzc3Vlcy5cXG5cIik7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBGQUlMRURcIik7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkNoZWNrIHlvdXIgQ29udmV4IFVSTCBhbmQgQVBJIGtleS5cXG5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSG9vayBDb21tYW5kIChmb3IgQ2xhdWRlIENvZGUgaW50ZWdyYXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIFRyYWNrIHNlc3Npb24gc3RhdGUgZm9yIHRpdGxlIGdlbmVyYXRpb24gKGZpcnN0IHVzZXIgcHJvbXB0KVxuY29uc3QgU0VTU0lPTl9TVEFURV9GSUxFID0gcGF0aC5qb2luKFxuICBwcm9jZXNzLmVudi5IT01FIHx8IFwiflwiLFxuICBcIi5jb25maWdcIixcbiAgXCJjbGF1ZGUtY29kZS1zeW5jXCIsXG4gIFwic2Vzc2lvbi1zdGF0ZS5qc29uXCJcbik7XG5cbmludGVyZmFjZSBTZXNzaW9uU3RhdGUge1xuICBbc2Vzc2lvbklkOiBzdHJpbmddOiB7XG4gICAgbW9kZWw/OiBzdHJpbmc7XG4gICAgZmlyc3RQcm9tcHQ/OiBzdHJpbmc7XG4gICAgdG9rZW5Vc2FnZT86IHsgaW5wdXQ6IG51bWJlcjsgb3V0cHV0OiBudW1iZXIgfTtcbiAgICBtZXNzYWdlQ291bnQ/OiBudW1iZXI7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvYWRTZXNzaW9uU3RhdGUoKTogU2Vzc2lvblN0YXRlIHtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhTRVNTSU9OX1NUQVRFX0ZJTEUpKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoU0VTU0lPTl9TVEFURV9GSUxFLCBcInV0Zi04XCIpKSBhcyBTZXNzaW9uU3RhdGU7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgZXJyb3JzXG4gIH1cbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBzYXZlU2Vzc2lvblN0YXRlKHN0YXRlOiBTZXNzaW9uU3RhdGUpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoU0VTU0lPTl9TVEFURV9GSUxFKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlyKSkge1xuICAgICAgZnMubWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuICAgIGZzLndyaXRlRmlsZVN5bmMoU0VTU0lPTl9TVEFURV9GSUxFLCBKU09OLnN0cmluZ2lmeShzdGF0ZSwgbnVsbCwgMikpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgZXJyb3JzXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVUaXRsZShwcm9tcHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFVzZSBmaXJzdCA4MCBjaGFycyBvZiBmaXJzdCBwcm9tcHQgYXMgdGl0bGUsIHRyaW0gYXQgd29yZCBib3VuZGFyeVxuICBjb25zdCB0cmltbWVkID0gcHJvbXB0LnNsaWNlKDAsIDgwKS50cmltKCk7XG4gIGlmIChwcm9tcHQubGVuZ3RoID4gODApIHtcbiAgICBjb25zdCBsYXN0U3BhY2UgPSB0cmltbWVkLmxhc3RJbmRleE9mKFwiIFwiKTtcbiAgICBpZiAobGFzdFNwYWNlID4gNDApIHtcbiAgICAgIHJldHVybiB0cmltbWVkLnNsaWNlKDAsIGxhc3RTcGFjZSkgKyBcIi4uLlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJpbW1lZCArIFwiLi4uXCI7XG4gIH1cbiAgcmV0dXJuIHRyaW1tZWQ7XG59XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJob29rIDxldmVudD5cIilcbiAgLmRlc2NyaXB0aW9uKFwiSGFuZGxlIENsYXVkZSBDb2RlIGhvb2sgZXZlbnRzIChyZWFkcyBzdGRpbilcIilcbiAgLmFjdGlvbihhc3luYyAoZXZlbnQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICAvLyBFeGl0IHNpbGVudGx5IGlmIG5vdCBjb25maWd1cmVkIChkb24ndCBibG9jayBDbGF1ZGUgQ29kZSlcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmF1dG9TeW5jID09PSBmYWxzZSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cblxuICAgIC8vIFJlYWQgSlNPTiBpbnB1dCBmcm9tIHN0ZGluXG4gICAgbGV0IGlucHV0ID0gXCJcIjtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHByb2Nlc3Muc3RkaW4pIHtcbiAgICAgIGlucHV0ICs9IGNodW5rO1xuICAgIH1cblxuICAgIGlmICghaW5wdXQudHJpbSgpKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTeW5jQ2xpZW50KGNvbmZpZyk7XG4gICAgICBjb25zdCBzZXNzaW9uU3RhdGUgPSBsb2FkU2Vzc2lvblN0YXRlKCk7XG5cbiAgICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgICAgY2FzZSBcIlNlc3Npb25TdGFydFwiOiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIEhvb2tTZXNzaW9uU3RhcnREYXRhO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEluaXRpYWxpemUgc2Vzc2lvbiBzdGF0ZVxuICAgICAgICAgIHNlc3Npb25TdGF0ZVtkYXRhLnNlc3Npb25faWRdID0ge1xuICAgICAgICAgICAgbW9kZWw6IGRhdGEubW9kZWwsXG4gICAgICAgICAgICB0b2tlblVzYWdlOiB7IGlucHV0OiAwLCBvdXRwdXQ6IDAgfSxcbiAgICAgICAgICAgIG1lc3NhZ2VDb3VudDogMCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHNhdmVTZXNzaW9uU3RhdGUoc2Vzc2lvblN0YXRlKTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgICAgICBjd2Q6IGRhdGEuY3dkLFxuICAgICAgICAgICAgbW9kZWw6IGRhdGEubW9kZWwsXG4gICAgICAgICAgICBwZXJtaXNzaW9uTW9kZTogZGF0YS5wZXJtaXNzaW9uX21vZGUsXG4gICAgICAgICAgICB0aGlua2luZ0VuYWJsZWQ6IGRhdGEudGhpbmtpbmdfZW5hYmxlZCxcbiAgICAgICAgICAgIG1jcFNlcnZlcnM6IGRhdGEubWNwX3NlcnZlcnMsXG4gICAgICAgICAgICBzdGFydFR5cGU6IGRhdGEuc291cmNlID09PSBcInN0YXJ0dXBcIiA/IFwibmV3XCIgOiAoZGF0YS5zb3VyY2UgYXMgU2Vzc2lvbkRhdGFbXCJzdGFydFR5cGVcIl0pLFxuICAgICAgICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9qZWN0UGF0aDogZGF0YS5jd2QsXG4gICAgICAgICAgICBwcm9qZWN0TmFtZTogZGF0YS5jd2QgPyBkYXRhLmN3ZC5zcGxpdChcIi9cIikucG9wKCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCBjbGllbnQuc3luY1Nlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFwiU2Vzc2lvbkVuZFwiOiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIEhvb2tTZXNzaW9uRW5kRGF0YTtcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNlc3Npb25TdGF0ZVtkYXRhLnNlc3Npb25faWRdIHx8IHt9O1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBmaW5hbCB0b2tlbiB1c2FnZVxuICAgICAgICAgIGNvbnN0IGZpbmFsVG9rZW5Vc2FnZSA9IGRhdGEudG90YWxfdG9rZW5fdXNhZ2UgfHwgc3RhdGUudG9rZW5Vc2FnZTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgICAgICB0aXRsZTogc3RhdGUuZmlyc3RQcm9tcHQgPyBnZW5lcmF0ZVRpdGxlKHN0YXRlLmZpcnN0UHJvbXB0KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVuZFJlYXNvbjogZGF0YS5yZWFzb24sXG4gICAgICAgICAgICBtZXNzYWdlQ291bnQ6IGRhdGEubWVzc2FnZV9jb3VudCB8fCBzdGF0ZS5tZXNzYWdlQ291bnQsXG4gICAgICAgICAgICB0b29sQ2FsbENvdW50OiBkYXRhLnRvb2xfY2FsbF9jb3VudCxcbiAgICAgICAgICAgIHRva2VuVXNhZ2U6IGZpbmFsVG9rZW5Vc2FnZSxcbiAgICAgICAgICAgIGNvc3RFc3RpbWF0ZTogZGF0YS5jb3N0X2VzdGltYXRlLFxuICAgICAgICAgICAgZW5kZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENsZWFuIHVwIHNlc3Npb24gc3RhdGVcbiAgICAgICAgICBkZWxldGUgc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF07XG4gICAgICAgICAgc2F2ZVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBcIlVzZXJQcm9tcHRTdWJtaXRcIjoge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGlucHV0KSBhcyBIb29rVXNlclByb21wdERhdGE7XG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXNzaW9uU3RhdGVbZGF0YS5zZXNzaW9uX2lkXSB8fCB7fTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBUcmFjayBmaXJzdCBwcm9tcHQgZm9yIHRpdGxlIGdlbmVyYXRpb25cbiAgICAgICAgICBpZiAoIXN0YXRlLmZpcnN0UHJvbXB0KSB7XG4gICAgICAgICAgICBzdGF0ZS5maXJzdFByb21wdCA9IGRhdGEucHJvbXB0O1xuICAgICAgICAgICAgc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF0gPSBzdGF0ZTtcbiAgICAgICAgICAgIHNhdmVTZXNzaW9uU3RhdGUoc2Vzc2lvblN0YXRlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVXBkYXRlIHNlc3Npb24gd2l0aCB0aXRsZVxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbjogU2Vzc2lvbkRhdGEgPSB7XG4gICAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgICAgdGl0bGU6IGdlbmVyYXRlVGl0bGUoZGF0YS5wcm9tcHQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jU2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gSW5jcmVtZW50IG1lc3NhZ2UgY291bnRcbiAgICAgICAgICBzdGF0ZS5tZXNzYWdlQ291bnQgPSAoc3RhdGUubWVzc2FnZUNvdW50IHx8IDApICsgMTtcbiAgICAgICAgICBzZXNzaW9uU3RhdGVbZGF0YS5zZXNzaW9uX2lkXSA9IHN0YXRlO1xuICAgICAgICAgIHNhdmVTZXNzaW9uU3RhdGUoc2Vzc2lvblN0YXRlKTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBtZXNzYWdlOiBNZXNzYWdlRGF0YSA9IHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBgJHtkYXRhLnNlc3Npb25faWR9LXVzZXItJHtEYXRlLm5vdygpfWAsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgIHJvbGU6IFwidXNlclwiLFxuICAgICAgICAgICAgY29udGVudDogZGF0YS5wcm9tcHQsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGRhdGEudGltZXN0YW1wIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJQb3N0VG9vbFVzZVwiOiB7XG4gICAgICAgICAgaWYgKCFjb25maWcuc3luY1Rvb2xDYWxscykgYnJlYWs7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIEhvb2tUb29sVXNlRGF0YTtcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNlc3Npb25TdGF0ZVtkYXRhLnNlc3Npb25faWRdIHx8IHt9O1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2VEYXRhID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IGRhdGEudG9vbF91c2VfaWQgfHwgYCR7ZGF0YS5zZXNzaW9uX2lkfS10b29sLSR7RGF0ZS5ub3coKX1gLFxuICAgICAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICAgICAgdG9vbE5hbWU6IGRhdGEudG9vbF9uYW1lLFxuICAgICAgICAgICAgdG9vbEFyZ3M6IGRhdGEudG9vbF9pbnB1dCxcbiAgICAgICAgICAgIHRvb2xSZXN1bHQ6IGRhdGEudG9vbF9yZXN1bHQ/Lm91dHB1dCB8fCBkYXRhLnRvb2xfcmVzdWx0Py5lcnJvcixcbiAgICAgICAgICAgIGR1cmF0aW9uTXM6IGRhdGEuZHVyYXRpb25fbXMsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJTdG9wXCI6IHtcbiAgICAgICAgICAvLyBTdG9wIGV2ZW50IGNvbnRhaW5zIHRoZSBhc3Npc3RhbnQncyByZXNwb25zZSBhbmQgdG9rZW4gdXNhZ2VcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgSG9va1N0b3BEYXRhO1xuICAgICAgICAgIGNvbnN0IHN0YXRlID0gc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF0gfHwge307XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gVXBkYXRlIGFjY3VtdWxhdGVkIHRva2VuIHVzYWdlXG4gICAgICAgICAgaWYgKGRhdGEudG9rZW5fdXNhZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBzdGF0ZS50b2tlblVzYWdlIHx8IHsgaW5wdXQ6IDAsIG91dHB1dDogMCB9O1xuICAgICAgICAgICAgc3RhdGUudG9rZW5Vc2FnZSA9IHtcbiAgICAgICAgICAgICAgaW5wdXQ6IGN1cnJlbnQuaW5wdXQgKyBkYXRhLnRva2VuX3VzYWdlLmlucHV0LFxuICAgICAgICAgICAgICBvdXRwdXQ6IGN1cnJlbnQub3V0cHV0ICsgZGF0YS50b2tlbl91c2FnZS5vdXRwdXQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBJbmNyZW1lbnQgbWVzc2FnZSBjb3VudCBmb3IgYXNzaXN0YW50IHJlc3BvbnNlXG4gICAgICAgICAgc3RhdGUubWVzc2FnZUNvdW50ID0gKHN0YXRlLm1lc3NhZ2VDb3VudCB8fCAwKSArIDE7XG4gICAgICAgICAgc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF0gPSBzdGF0ZTtcbiAgICAgICAgICBzYXZlU2Vzc2lvblN0YXRlKHNlc3Npb25TdGF0ZSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU3luYyB0aGUgYXNzaXN0YW50J3MgcmVzcG9uc2UgYXMgYSBtZXNzYWdlXG4gICAgICAgICAgaWYgKGRhdGEucmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2VEYXRhID0ge1xuICAgICAgICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbl9pZCxcbiAgICAgICAgICAgICAgbWVzc2FnZUlkOiBgJHtkYXRhLnNlc3Npb25faWR9LWFzc2lzdGFudC0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGRhdGEucmVzcG9uc2UsXG4gICAgICAgICAgICAgIHRva2VuQ291bnQ6IGRhdGEudG9rZW5fdXNhZ2VcbiAgICAgICAgICAgICAgICA/IGRhdGEudG9rZW5fdXNhZ2UuaW5wdXQgKyBkYXRhLnRva2VuX3VzYWdlLm91dHB1dFxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBkdXJhdGlvbk1zOiBkYXRhLmR1cmF0aW9uX21zLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuc3luY01lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIFVwZGF0ZSBzZXNzaW9uIHdpdGggYWNjdW11bGF0ZWQgdG9rZW4gdXNhZ2VcbiAgICAgICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgICAgICB0b2tlblVzYWdlOiBzdGF0ZS50b2tlblVzYWdlLFxuICAgICAgICAgICAgbWVzc2FnZUNvdW50OiBzdGF0ZS5tZXNzYWdlQ291bnQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCBjbGllbnQuc3luY1Nlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIFVua25vd24gZXZlbnQsIGlnbm9yZVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIExvZyB0byBzdGRlcnIgYnV0IGRvbid0IGJsb2NrIENsYXVkZSBDb2RlXG4gICAgICBjb25zb2xlLmVycm9yKGBbY2xhdWRlLWNvZGUtc3luY10gRXJyb3I6ICR7ZXJyb3J9YCk7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuICB9KTtcblxuLy8gUGFyc2UgYW5kIHJ1blxucHJvZ3JhbS5wYXJzZSgpO1xuIl19
769
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHlDQUFvQztBQUNwQyxtREFBcUM7QUFDckMsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixtQ0FRaUI7QUFpR2pCLGlDQUFpQztBQUNqQyxTQUFTLFVBQVU7SUFDakIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQWdCLENBQUM7UUFDekUsT0FBTyxHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQztJQUNoQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLG1CQUFPLEVBQUUsQ0FBQztBQUU5QixPQUFPO0tBQ0osSUFBSSxDQUFDLGtCQUFrQixDQUFDO0tBQ3hCLFdBQVcsQ0FBQyxpREFBaUQsQ0FBQztLQUM5RCxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUV6QiwrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRSxTQUFTLE1BQU0sQ0FBQyxRQUFnQjtJQUM5QixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFB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QyxDQUFDO2dCQUNGLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEMsTUFBTTtZQUNSLENBQUM7WUFFRDtnQkFDRSx3QkFBd0I7Z0JBQ3hCLE1BQU07UUFDVixDQUFDO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLDRDQUE0QztRQUM1QyxPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUwsZ0JBQWdCO0FBQ2hCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuLyoqXG4gKiBDbGF1ZGUgQ29kZSBTeW5jIENMSVxuICpcbiAqIENvbW1hbmRzOlxuICogICBsb2dpbiAgIC0gQ29uZmlndXJlIENvbnZleCBVUkwgYW5kIEFQSSBLZXlcbiAqICAgbG9nb3V0ICAtIENsZWFyIHN0b3JlZCBjcmVkZW50aWFsc1xuICogICBzdGF0dXMgIC0gU2hvdyBjb25uZWN0aW9uIHN0YXR1c1xuICogICBjb25maWcgIC0gU2hvdyBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAqL1xuXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0ICogYXMgcmVhZGxpbmUgZnJvbSBcInJlYWRsaW5lXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7XG4gIGxvYWRDb25maWcsXG4gIHNhdmVDb25maWcsXG4gIGNsZWFyQ29uZmlnLFxuICBTeW5jQ2xpZW50LFxuICBDb25maWcsXG4gIFNlc3Npb25EYXRhLFxuICBNZXNzYWdlRGF0YSxcbn0gZnJvbSBcIi4vaW5kZXhcIjtcblxuLy8gVHlwZXMgZm9yIENsYXVkZSBDb2RlIGhvb2sgZXZlbnQgZGF0YSBmcm9tIHN0ZGluXG5pbnRlcmZhY2UgSG9va1Nlc3Npb25TdGFydERhdGEge1xuICBzZXNzaW9uX2lkOiBzdHJpbmc7XG4gIGN3ZD86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIHBlcm1pc3Npb25fbW9kZT86IHN0cmluZztcbiAgc291cmNlPzogc3RyaW5nO1xuICB0aGlua2luZ19lbmFibGVkPzogYm9vbGVhbjtcbiAgbWNwX3NlcnZlcnM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIEhvb2tTZXNzaW9uRW5kRGF0YSB7XG4gIHNlc3Npb25faWQ6IHN0cmluZztcbiAgcmVhc29uPzogXCJ1c2VyX3N0b3BcIiB8IFwibWF4X3R1cm5zXCIgfCBcImVycm9yXCIgfCBcImNvbXBsZXRlZFwiO1xuICBtZXNzYWdlX2NvdW50PzogbnVtYmVyO1xuICB0b29sX2NhbGxfY291bnQ/OiBudW1iZXI7XG4gIHRvdGFsX3Rva2VuX3VzYWdlPzoge1xuICAgIGlucHV0OiBudW1iZXI7XG4gICAgb3V0cHV0OiBudW1iZXI7XG4gIH07XG4gIGNvc3RfZXN0aW1hdGU/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBIb29rVXNlclByb21wdERhdGEge1xuICBzZXNzaW9uX2lkOiBzdHJpbmc7XG4gIHByb21wdDogc3RyaW5nO1xuICB0aW1lc3RhbXA/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBIb29rVG9vbFVzZURhdGEge1xuICBzZXNzaW9uX2lkOiBzdHJpbmc7XG4gIHRvb2xfbmFtZTogc3RyaW5nO1xuICB0b29sX3VzZV9pZD86IHN0cmluZztcbiAgdG9vbF9pbnB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB0b29sX3Jlc3VsdD86IHtcbiAgICBvdXRwdXQ/OiBzdHJpbmc7XG4gICAgZXJyb3I/OiBzdHJpbmc7XG4gIH07XG4gIGR1cmF0aW9uX21zPzogbnVtYmVyO1xuICBzdWNjZXNzPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEhvb2tTdG9wRGF0YSB7XG4gIHNlc3Npb25faWQ6IHN0cmluZztcbiAgdHJhbnNjcmlwdF9wYXRoPzogc3RyaW5nO1xuICBzdG9wX2hvb2tfYWN0aXZlPzogYm9vbGVhbjtcbiAgcGVybWlzc2lvbl9tb2RlPzogc3RyaW5nO1xuICBjd2Q/OiBzdHJpbmc7XG4gIGhvb2tfZXZlbnRfbmFtZT86IHN0cmluZztcbn1cblxuLy8gVHlwZXMgZm9yIENsYXVkZSBDb2RlIHRyYW5zY3JpcHQgSlNPTkwgZW50cmllc1xuaW50ZXJmYWNlIFRyYW5zY3JpcHRVc2FnZSB7XG4gIGlucHV0X3Rva2Vucz86IG51bWJlcjtcbiAgb3V0cHV0X3Rva2Vucz86IG51bWJlcjtcbiAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2Vucz86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFRyYW5zY3JpcHRDb250ZW50UGFydCB7XG4gIHR5cGU6IFwidGV4dFwiIHwgXCJ0aGlua2luZ1wiIHwgXCJ0b29sX3VzZVwiIHwgXCJ0b29sX3Jlc3VsdFwiO1xuICB0ZXh0Pzogc3RyaW5nO1xuICB0aGlua2luZz86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGlucHV0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmludGVyZmFjZSBUcmFuc2NyaXB0TWVzc2FnZSB7XG4gIGNvbnRlbnQ/OiBUcmFuc2NyaXB0Q29udGVudFBhcnRbXTtcbiAgdXNhZ2U/OiBUcmFuc2NyaXB0VXNhZ2U7XG4gIG1vZGVsPzogc3RyaW5nO1xuICBzdG9wX3JlYXNvbj86IHN0cmluZyB8IG51bGw7XG59XG5cbmludGVyZmFjZSBUcmFuc2NyaXB0RW50cnkge1xuICB0eXBlPzogc3RyaW5nO1xuICB1dWlkPzogc3RyaW5nO1xuICB0aW1lc3RhbXA/OiBzdHJpbmc7XG4gIG1lc3NhZ2U/OiBUcmFuc2NyaXB0TWVzc2FnZTtcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBwYXJlbnRVdWlkPzogc3RyaW5nO1xufVxuXG4vLyBUeXBlcyBmb3IgQ2xhdWRlIENvZGUgc2V0dGluZ3MuanNvblxuaW50ZXJmYWNlIENsYXVkZVNldHRpbmdzIHtcbiAgaG9va3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLy8gVHlwZSBmb3IgcGFja2FnZS5qc29uIHZlcnNpb24gZmllbGRcbmludGVyZmFjZSBQYWNrYWdlSnNvbiB7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8vIFJlYWQgdmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvblxuZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHBrZ1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwicGFja2FnZS5qc29uXCIpO1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBrZ1BhdGgsIFwidXRmLThcIikpIGFzIFBhY2thZ2VKc29uO1xuICAgIHJldHVybiBwa2cudmVyc2lvbiB8fCBcIjAuMC4wXCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBcIjAuMC4wXCI7XG4gIH1cbn1cblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW1cbiAgLm5hbWUoXCJjbGF1ZGUtY29kZS1zeW5jXCIpXG4gIC5kZXNjcmlwdGlvbihcIlN5bmMgQ2xhdWRlIENvZGUgc2Vzc2lvbnMgdG8gT3BlblN5bmMgZGFzaGJvYXJkXCIpXG4gIC52ZXJzaW9uKGdldFZlcnNpb24oKSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhlbHBlciBGdW5jdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gcHJvbXB0KHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmwucXVlc3Rpb24ocXVlc3Rpb24sIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICByZXNvbHZlKGFuc3dlci50cmltKCkpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFza0FwaUtleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChrZXkubGVuZ3RoIDw9IDgpIHJldHVybiBcIioqKipcIjtcbiAgcmV0dXJuIGtleS5zdWJzdHJpbmcoMCwgNCkgKyBcIioqKipcIiArIGtleS5zdWJzdHJpbmcoa2V5Lmxlbmd0aCAtIDQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb21tYW5kc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwibG9naW5cIilcbiAgLmRlc2NyaXB0aW9uKFwiQ29uZmlndXJlIENvbnZleCBVUkwgYW5kIEFQSSBLZXlcIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coXCJcXG4gIENsYXVkZSBDb2RlIFN5bmMgLSBMb2dpblxcblwiKTtcbiAgICBjb25zb2xlLmxvZyhcIkdldCB5b3VyIEFQSSBrZXkgZnJvbSB5b3VyIE9wZW5TeW5jLmRldiBTZXR0aW5ncyBwYWdlLCBzdGFydHMgd2l0aCBvc2tfLiBFbnRlciBpdCBoZXJlOlwiKTtcbiAgICBjb25zb2xlLmxvZyhcIiAgMS4gR28gdG8gU2V0dGluZ3NcIik7XG4gICAgY29uc29sZS5sb2coXCIgIDIuIENsaWNrICdHZW5lcmF0ZSBBUEkgS2V5J1wiKTtcbiAgICBjb25zb2xlLmxvZyhcIiAgMy4gQ29weSB0aGUga2V5IChzdGFydHMgd2l0aCBvc2tfKVxcblwiKTtcblxuICAgIGNvbnN0IGNvbnZleFVybCA9IGF3YWl0IHByb21wdChcIkNvbnZleCBVUkwgKGUuZy4sIGh0dHBzOi8veW91ci1wcm9qZWN0LmNvbnZleC5jbG91ZCk6IFwiKTtcblxuICAgIGlmICghY29udmV4VXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IENvbnZleCBVUkwgaXMgcmVxdWlyZWRcIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFjb252ZXhVcmwuaW5jbHVkZXMoXCJjb252ZXguY2xvdWRcIikgJiYgIWNvbnZleFVybC5pbmNsdWRlcyhcImNvbnZleC5zaXRlXCIpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IEludmFsaWQgQ29udmV4IFVSTC4gTXVzdCBjb250YWluIGNvbnZleC5jbG91ZCBvciBjb252ZXguc2l0ZVwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcGlLZXkgPSBhd2FpdCBwcm9tcHQoXCJBUEkgS2V5IChvc2tfLi4uKTogXCIpO1xuXG4gICAgaWYgKCFhcGlLZXkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcjogQVBJIEtleSBpcyByZXF1aXJlZFwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBpZiAoIWFwaUtleS5zdGFydHNXaXRoKFwib3NrX1wiKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yOiBJbnZhbGlkIEFQSSBLZXkuIE11c3Qgc3RhcnQgd2l0aCBvc2tfXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZzogQ29uZmlnID0ge1xuICAgICAgY29udmV4VXJsLFxuICAgICAgYXBpS2V5LFxuICAgICAgYXV0b1N5bmM6IHRydWUsXG4gICAgICBzeW5jVG9vbENhbGxzOiB0cnVlLFxuICAgICAgc3luY1RoaW5raW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gVGVzdCBjb25uZWN0aW9uXG4gICAgY29uc29sZS5sb2coXCJcXG5UZXN0aW5nIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgICBjb25zdCBjb25uZWN0ZWQgPSBhd2FpdCBjbGllbnQudGVzdENvbm5lY3Rpb24oKTtcblxuICAgIGlmICghY29ubmVjdGVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IENvdWxkIG5vdCBjb25uZWN0IHRvIENvbnZleCBiYWNrZW5kXCIpO1xuICAgICAgY29uc29sZS5lcnJvcihcIiAgIENoZWNrIHlvdXIgVVJMIGFuZCB0cnkgYWdhaW5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBjb25maWdcbiAgICBzYXZlQ29uZmlnKGNvbmZpZyk7XG4gICAgY29uc29sZS5sb2coXCJcXG5Db25maWd1cmF0aW9uIHNhdmVkIVwiKTtcbiAgICBjb25zb2xlLmxvZyhgICAgVVJMOiAke2NvbnZleFVybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICAgS2V5OiAke21hc2tBcGlLZXkoYXBpS2V5KX1gKTtcbiAgICBjb25zb2xlLmxvZyhcIlxcbk5leHQgc3RlcDogUnVuIHRoZSBzZXR1cCBjb21tYW5kIHRvIGNvbmZpZ3VyZSBDbGF1ZGUgQ29kZSBob29rczpcXG5cIik7XG4gICAgY29uc29sZS5sb2coXCIgICBjbGF1ZGUtY29kZS1zeW5jIHNldHVwXFxuXCIpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcImxvZ291dFwiKVxuICAuZGVzY3JpcHRpb24oXCJDbGVhciBzdG9yZWQgY3JlZGVudGlhbHNcIilcbiAgLmFjdGlvbigoKSA9PiB7XG4gICAgY2xlYXJDb25maWcoKTtcbiAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzIGNsZWFyZWRcIik7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic3RhdHVzXCIpXG4gIC5kZXNjcmlwdGlvbihcIlNob3cgY29ubmVjdGlvbiBzdGF0dXNcIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuXG4gICAgY29uc29sZS5sb2coXCJcXG4gIENsYXVkZSBDb2RlIFN5bmMgLSBTdGF0dXNcXG5cIik7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgY29uc29sZS5sb2coXCJOb3QgY29uZmlndXJlZFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiICAgUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXBcXG5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXCJDb25maWd1cmF0aW9uOlwiKTtcbiAgICBjb25zb2xlLmxvZyhgICBDb252ZXggVVJMOiAke2NvbmZpZy5jb252ZXhVcmx9YCk7XG4gICAgY29uc29sZS5sb2coYCAgQVBJIEtleTogICAgJHttYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpfWApO1xuICAgIGNvbnNvbGUubG9nKGAgIEF1dG8gU3luYzogICR7Y29uZmlnLmF1dG9TeW5jICE9PSBmYWxzZSA/IFwiZW5hYmxlZFwiIDogXCJkaXNhYmxlZFwifWApO1xuICAgIGNvbnNvbGUubG9nKGAgIFRvb2wgQ2FsbHM6ICR7Y29uZmlnLnN5bmNUb29sQ2FsbHMgIT09IGZhbHNlID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCk7XG4gICAgY29uc29sZS5sb2coYCAgVGhpbmtpbmc6ICAgJHtjb25maWcuc3luY1RoaW5raW5nID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcblRlc3RpbmcgY29ubmVjdGlvbi4uLlwiKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuXG4gICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0ZWQgdG8gQ29udmV4IGJhY2tlbmRcXG5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3I6IENvdWxkIG5vdCBjb25uZWN0IHRvIENvbnZleCBiYWNrZW5kXFxuXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJjb25maWdcIilcbiAgLmRlc2NyaXB0aW9uKFwiU2hvdyBjdXJyZW50IGNvbmZpZ3VyYXRpb25cIilcbiAgLm9wdGlvbihcIi0tanNvblwiLCBcIk91dHB1dCBhcyBKU09OXCIpXG4gIC5hY3Rpb24oKG9wdGlvbnM6IHsganNvbj86IGJvb2xlYW4gfSkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgY29uZmlndXJlZDogZmFsc2UgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJOb3QgY29uZmlndXJlZC4gUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXAuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25maWd1cmVkOiB0cnVlLFxuICAgICAgICAgICAgY29udmV4VXJsOiBjb25maWcuY29udmV4VXJsLFxuICAgICAgICAgICAgYXBpS2V5OiBtYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpLFxuICAgICAgICAgICAgYXV0b1N5bmM6IGNvbmZpZy5hdXRvU3luYyAhPT0gZmFsc2UsXG4gICAgICAgICAgICBzeW5jVG9vbENhbGxzOiBjb25maWcuc3luY1Rvb2xDYWxscyAhPT0gZmFsc2UsXG4gICAgICAgICAgICBzeW5jVGhpbmtpbmc6IGNvbmZpZy5zeW5jVGhpbmtpbmcgPT09IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJcXG4gIEN1cnJlbnQgQ29uZmlndXJhdGlvblxcblwiKTtcbiAgICAgIGNvbnNvbGUubG9nKGBDb252ZXggVVJMOiAgJHtjb25maWcuY29udmV4VXJsfWApO1xuICAgICAgY29uc29sZS5sb2coYEFQSSBLZXk6ICAgICAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgQXV0byBTeW5jOiAgICR7Y29uZmlnLmF1dG9TeW5jICE9PSBmYWxzZX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBUb29sIENhbGxzOiAgJHtjb25maWcuc3luY1Rvb2xDYWxscyAhPT0gZmFsc2V9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgVGhpbmtpbmc6ICAgICR7Y29uZmlnLnN5bmNUaGlua2luZyA9PT0gdHJ1ZX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBcXG5Db25maWcgZmlsZTogfi8uY29uZmlnL2NsYXVkZS1jb2RlLXN5bmMvY29uZmlnLmpzb25cXG5gKTtcbiAgICB9XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic2V0IDxrZXk+IDx2YWx1ZT5cIilcbiAgLmRlc2NyaXB0aW9uKFwiU2V0IGEgY29uZmlndXJhdGlvbiB2YWx1ZVwiKVxuICAuYWN0aW9uKChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiTm90IGNvbmZpZ3VyZWQuIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBsb2dpbicgZmlyc3QuXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkS2V5cyA9IFtcImF1dG9TeW5jXCIsIFwic3luY1Rvb2xDYWxsc1wiLCBcInN5bmNUaGlua2luZ1wiXTtcbiAgICBpZiAoIXZhbGlkS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGtleS4gVmFsaWQga2V5czogJHt2YWxpZEtleXMuam9pbihcIiwgXCIpfWApO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGJvb2xWYWx1ZSA9IHZhbHVlID09PSBcInRydWVcIiB8fCB2YWx1ZSA9PT0gXCIxXCIgfHwgdmFsdWUgPT09IFwieWVzXCI7XG4gICAgXG4gICAgLy8gVHlwZS1zYWZlIGNvbmZpZyB1cGRhdGVcbiAgICBpZiAoa2V5ID09PSBcImF1dG9TeW5jXCIpIHtcbiAgICAgIGNvbmZpZy5hdXRvU3luYyA9IGJvb2xWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJzeW5jVG9vbENhbGxzXCIpIHtcbiAgICAgIGNvbmZpZy5zeW5jVG9vbENhbGxzID0gYm9vbFZhbHVlO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN5bmNUaGlua2luZ1wiKSB7XG4gICAgICBjb25maWcuc3luY1RoaW5raW5nID0gYm9vbFZhbHVlO1xuICAgIH1cblxuICAgIHNhdmVDb25maWcoY29uZmlnKTtcbiAgICBjb25zb2xlLmxvZyhgU2V0ICR7a2V5fSA9ICR7Ym9vbFZhbHVlfWApO1xuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2V0dXAgQ29tbWFuZCAoY29uZmlndXJlcyBDbGF1ZGUgQ29kZSBob29rcylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gQ2xhdWRlIENvZGUgaG9va3MgY29uZmlndXJhdGlvblxuY29uc3QgQ0xBVURFX0hPT0tTX0NPTkZJRyA9IHtcbiAgaG9va3M6IHtcbiAgICBTZXNzaW9uU3RhcnQ6IFtcbiAgICAgIHtcbiAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1hbmRcIixcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiY2xhdWRlLWNvZGUtc3luYyBob29rIFNlc3Npb25TdGFydFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgU2Vzc2lvbkVuZDogW1xuICAgICAge1xuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgU2Vzc2lvbkVuZFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgVXNlclByb21wdFN1Ym1pdDogW1xuICAgICAge1xuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgVXNlclByb21wdFN1Ym1pdFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgUG9zdFRvb2xVc2U6IFtcbiAgICAgIHtcbiAgICAgICAgbWF0Y2hlcjogXCIqXCIsXG4gICAgICAgIGhvb2tzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJjb21tYW5kXCIsXG4gICAgICAgICAgICBjb21tYW5kOiBcImNsYXVkZS1jb2RlLXN5bmMgaG9vayBQb3N0VG9vbFVzZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgU3RvcDogW1xuICAgICAge1xuICAgICAgICBtYXRjaGVyOiBcIipcIixcbiAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1hbmRcIixcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiY2xhdWRlLWNvZGUtc3luYyBob29rIFN0b3BcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxufTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcInNldHVwXCIpXG4gIC5kZXNjcmlwdGlvbihcIkFkZCBob29rcyB0byBDbGF1ZGUgQ29kZSBzZXR0aW5ncyAoY29uZmlndXJlcyB+Ly5jbGF1ZGUvc2V0dGluZ3MuanNvbilcIilcbiAgLm9wdGlvbihcIi0tZm9yY2VcIiwgXCJPdmVyd3JpdGUgZXhpc3RpbmcgaG9va3MgY29uZmlndXJhdGlvblwiKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiB7IGZvcmNlPzogYm9vbGVhbiB9KSA9PiB7XG4gICAgY29uc3QgY2xhdWRlRGlyID0gcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUgfHwgXCJ+XCIsIFwiLmNsYXVkZVwiKTtcbiAgICBjb25zdCBzZXR0aW5nc1BhdGggPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcInNldHRpbmdzLmpzb25cIik7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ2xhdWRlIENvZGUgU3luYyAtIFNldHVwXFxuXCIpO1xuXG4gICAgLy8gQ2hlY2sgaWYgcGx1Z2luIGNyZWRlbnRpYWxzIGFyZSBjb25maWd1cmVkXG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIldhcm5pbmc6IFBsdWdpbiBub3QgY29uZmlndXJlZCB5ZXQuXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIGZpcnN0IHRvIHNldCB1cCBjcmVkZW50aWFscy5cXG5cIik7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIC5jbGF1ZGUgZGlyZWN0b3J5IGlmIG5lZWRlZFxuICAgIGlmICghZnMuZXhpc3RzU3luYyhjbGF1ZGVEaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoY2xhdWRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ3JlYXRlZCB+Ly5jbGF1ZGUgZGlyZWN0b3J5XCIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBleGlzdGluZyBzZXR0aW5nc1xuICAgIGxldCBleGlzdGluZ1NldHRpbmdzOiBDbGF1ZGVTZXR0aW5ncyA9IHt9O1xuICAgIGxldCBoYXNFeGlzdGluZ0hvb2tzID0gZmFsc2U7XG5cbiAgICBpZiAoZnMuZXhpc3RzU3luYyhzZXR0aW5nc1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHNldHRpbmdzUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgICAgZXhpc3RpbmdTZXR0aW5ncyA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgQ2xhdWRlU2V0dGluZ3M7XG4gICAgICAgIGhhc0V4aXN0aW5nSG9va3MgPSAhIWV4aXN0aW5nU2V0dGluZ3MuaG9va3M7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRm91bmQgZXhpc3Rpbmcgc2V0dGluZ3MuanNvblwiKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmxvZyhcIldhcm5pbmc6IENvdWxkIG5vdCBwYXJzZSBleGlzdGluZyBzZXR0aW5ncy5qc29uLCB3aWxsIGNyZWF0ZSBuZXcgb25lXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBleGlzdGluZyBob29rc1xuICAgIGlmIChoYXNFeGlzdGluZ0hvb2tzICYmICFvcHRpb25zLmZvcmNlKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkV4aXN0aW5nIGhvb2tzIGNvbmZpZ3VyYXRpb24gZm91bmQuXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBVc2UgLS1mb3JjZSB0byBvdmVyd3JpdGUsIG9yIG1hbnVhbGx5IG1lcmdlIHRoZSBob29rcy5cXG5cIik7XG4gICAgICBjb25zb2xlLmxvZyhcIlRvIG1hbnVhbGx5IGFkZCwgaW5jbHVkZSB0aGVzZSBob29rcyBpbiB5b3VyIHNldHRpbmdzLmpzb246XCIpO1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoQ0xBVURFX0hPT0tTX0NPTkZJRywgbnVsbCwgMikpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIC8vIE1lcmdlIHNldHRpbmdzXG4gICAgY29uc3QgbmV3U2V0dGluZ3MgPSB7XG4gICAgICAuLi5leGlzdGluZ1NldHRpbmdzLFxuICAgICAgLi4uQ0xBVURFX0hPT0tTX0NPTkZJRyxcbiAgICB9O1xuXG4gICAgLy8gV3JpdGUgc2V0dGluZ3NcbiAgICB0cnkge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhzZXR0aW5nc1BhdGgsIEpTT04uc3RyaW5naWZ5KG5ld1NldHRpbmdzLCBudWxsLCAyKSk7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkNsYXVkZSBDb2RlIGhvb2tzIGNvbmZpZ3VyZWQhXCIpO1xuICAgICAgY29uc29sZS5sb2coYCAgIFNldHRpbmdzIGZpbGU6ICR7c2V0dGluZ3NQYXRofWApO1xuICAgICAgY29uc29sZS5sb2coXCJcXG5TZXR1cCBjb21wbGV0ZS4gU2Vzc2lvbnMgd2lsbCBzeW5jIGF1dG9tYXRpY2FsbHkuXFxuXCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igd3JpdGluZyBzZXR0aW5nczpcIiwgZXJyb3IpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJ2ZXJpZnlcIilcbiAgLmRlc2NyaXB0aW9uKFwiVmVyaWZ5IGNyZWRlbnRpYWxzIGFuZCBDbGF1ZGUgQ29kZSBjb25maWd1cmF0aW9uXCIpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKFwiXFxuICBPcGVuU3luYyBTZXR1cCBWZXJpZmljYXRpb25cXG5cIik7XG5cbiAgICAvLyBDaGVjayBjcmVkZW50aWFsc1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzOiBPS1wiKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICBDb252ZXggVVJMOiAke2NvbmZpZy5jb252ZXhVcmx9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgICAgQVBJIEtleTogJHttYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzOiBOT1QgQ09ORklHVVJFRFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiICAgUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXBcIik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgQ2xhdWRlIENvZGUgY29uZmlnXG4gICAgY29uc3Qgc2V0dGluZ3NQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUgfHwgXCJ+XCIsIFwiLmNsYXVkZVwiLCBcInNldHRpbmdzLmpzb25cIik7XG4gICAgbGV0IGhvb2tzQ29uZmlndXJlZCA9IGZhbHNlO1xuXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoc2V0dGluZ3NQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhzZXR0aW5nc1BhdGgsIFwidXRmLThcIik7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBDbGF1ZGVTZXR0aW5ncztcbiAgICAgICAgaG9va3NDb25maWd1cmVkID0gISFzZXR0aW5ncy5ob29rcz8uU2Vzc2lvblN0YXJ0O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBwYXJzZSBlcnJvcnNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIlwiKTtcbiAgICBpZiAoaG9va3NDb25maWd1cmVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsYXVkZSBDb2RlIENvbmZpZzogT0tcIik7XG4gICAgICBjb25zb2xlLmxvZyhgICAgQ29uZmlnIGZpbGU6ICR7c2V0dGluZ3NQYXRofWApO1xuICAgICAgY29uc29sZS5sb2coXCIgICBIb29rcyByZWdpc3RlcmVkOiBjbGF1ZGUtY29kZS1zeW5jXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsYXVkZSBDb2RlIENvbmZpZzogTk9UIENPTkZJR1VSRURcIik7XG4gICAgICBjb25zb2xlLmxvZyhcIiAgIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBzZXR1cCcgdG8gY29uZmlndXJlIGhvb2tzXCIpO1xuICAgIH1cblxuICAgIC8vIFRlc3QgY29ubmVjdGlvbiBpZiBjcmVkZW50aWFscyBleGlzdFxuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuVGVzdGluZyBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuICAgICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNvbm5lY3Rpb246IE9LXFxuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBGQUlMRURcXG5cIik7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZmlnICYmIGhvb2tzQ29uZmlndXJlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJSZWFkeSEgU3RhcnQgQ2xhdWRlIENvZGUgYW5kIHNlc3Npb25zIHdpbGwgc3luYyBhdXRvbWF0aWNhbGx5LlxcblwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJcIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU3luYyBUZXN0IENvbW1hbmQgKHRlc3QgY29ubmVjdGl2aXR5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic3luY3Rlc3RcIilcbiAgLmRlc2NyaXB0aW9uKFwiVGVzdCBjb25uZWN0aXZpdHkgYW5kIGNyZWF0ZSBhIHRlc3Qgc2Vzc2lvblwiKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBsb2FkQ29uZmlnKCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ2xhdWRlIENvZGUgU3luYyAtIENvbm5lY3Rpb24gVGVzdFxcblwiKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIk5vdCBjb25maWd1cmVkXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIHRvIHNldCB1cFxcblwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIkNvbmZpZ3VyYXRpb246XCIpO1xuICAgIGNvbnNvbGUubG9nKGAgIENvbnZleCBVUkw6ICR7Y29uZmlnLmNvbnZleFVybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICBBUEkgS2V5OiAgICAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcblRlc3RpbmcgY29ubmVjdGlvbi4uLlwiKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuXG4gICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBPS1wiKTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGEgdGVzdCBzZXNzaW9uIHRvIHZlcmlmeSBmdWxsIHN5bmMgd29ya3NcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuQ3JlYXRpbmcgdGVzdCBzZXNzaW9uLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGVzdFNlc3Npb24gPSB7XG4gICAgICAgICAgc2Vzc2lvbklkOiBgdGVzdC0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIiBhcyBjb25zdCxcbiAgICAgICAgICB0aXRsZTogXCJDb25uZWN0aW9uIFRlc3RcIixcbiAgICAgICAgICBwcm9qZWN0TmFtZTogXCJzeW5jdGVzdFwiLFxuICAgICAgICAgIHN0YXJ0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGVuZGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHRlc3RTZXNzaW9uKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJUZXN0IHNlc3Npb24gY3JlYXRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiXFxuU3luYyB0ZXN0IHBhc3NlZC4gUmVhZHkgdG8gc3luYyBDbGF1ZGUgQ29kZSBzZXNzaW9ucy5cXG5cIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCBzZXNzaW9uIGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJcXG5Db25uZWN0aW9uIHdvcmtzIGJ1dCBzeW5jIG1heSBoYXZlIGlzc3Vlcy5cXG5cIik7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBGQUlMRURcIik7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkNoZWNrIHlvdXIgQ29udmV4IFVSTCBhbmQgQVBJIGtleS5cXG5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSG9vayBDb21tYW5kIChmb3IgQ2xhdWRlIENvZGUgaW50ZWdyYXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIFRyYWNrIHNlc3Npb24gc3RhdGUgZm9yIHRpdGxlIGdlbmVyYXRpb24gKGZpcnN0IHVzZXIgcHJvbXB0KVxuY29uc3QgU0VTU0lPTl9TVEFURV9GSUxFID0gcGF0aC5qb2luKFxuICBwcm9jZXNzLmVudi5IT01FIHx8IFwiflwiLFxuICBcIi5jb25maWdcIixcbiAgXCJjbGF1ZGUtY29kZS1zeW5jXCIsXG4gIFwic2Vzc2lvbi1zdGF0ZS5qc29uXCJcbik7XG5cbmludGVyZmFjZSBTZXNzaW9uU3RhdGUge1xuICBbc2Vzc2lvbklkOiBzdHJpbmddOiB7XG4gICAgbW9kZWw/OiBzdHJpbmc7XG4gICAgZmlyc3RQcm9tcHQ/OiBzdHJpbmc7XG4gICAgdG9rZW5Vc2FnZT86IHsgaW5wdXQ6IG51bWJlcjsgb3V0cHV0OiBudW1iZXIgfTtcbiAgICBtZXNzYWdlQ291bnQ/OiBudW1iZXI7XG4gICAgc3luY2VkTWVzc2FnZVV1aWRzPzogU2V0PHN0cmluZz4gfCBzdHJpbmdbXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9hZFNlc3Npb25TdGF0ZSgpOiBTZXNzaW9uU3RhdGUge1xuICB0cnkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKFNFU1NJT05fU1RBVEVfRklMRSkpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhTRVNTSU9OX1NUQVRFX0ZJTEUsIFwidXRmLThcIikpIGFzIFNlc3Npb25TdGF0ZTtcbiAgICAgIC8vIENvbnZlcnQgYXJyYXlzIGJhY2sgdG8gU2V0cyBmb3Igc3luY2VkTWVzc2FnZVV1aWRzXG4gICAgICBmb3IgKGNvbnN0IHNlc3Npb25JZCBvZiBPYmplY3Qua2V5cyhkYXRhKSkge1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gZGF0YVtzZXNzaW9uSWRdO1xuICAgICAgICBpZiAoc2Vzc2lvbi5zeW5jZWRNZXNzYWdlVXVpZHMgJiYgQXJyYXkuaXNBcnJheShzZXNzaW9uLnN5bmNlZE1lc3NhZ2VVdWlkcykpIHtcbiAgICAgICAgICBzZXNzaW9uLnN5bmNlZE1lc3NhZ2VVdWlkcyA9IG5ldyBTZXQoc2Vzc2lvbi5zeW5jZWRNZXNzYWdlVXVpZHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIElnbm9yZSBlcnJvcnNcbiAgfVxuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHNhdmVTZXNzaW9uU3RhdGUoc3RhdGU6IFNlc3Npb25TdGF0ZSk6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShTRVNTSU9OX1NUQVRFX0ZJTEUpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLy8gQ29udmVydCBTZXRzIHRvIGFycmF5cyBmb3IgSlNPTiBzZXJpYWxpemF0aW9uXG4gICAgY29uc3Qgc2VyaWFsaXphYmxlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3Qgc2Vzc2lvbklkIG9mIE9iamVjdC5rZXlzKHN0YXRlKSkge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IHN0YXRlW3Nlc3Npb25JZF07XG4gICAgICBzZXJpYWxpemFibGVbc2Vzc2lvbklkXSA9IHtcbiAgICAgICAgLi4uc2Vzc2lvbixcbiAgICAgICAgc3luY2VkTWVzc2FnZVV1aWRzOiBzZXNzaW9uLnN5bmNlZE1lc3NhZ2VVdWlkcyBpbnN0YW5jZW9mIFNldFxuICAgICAgICAgID8gQXJyYXkuZnJvbShzZXNzaW9uLnN5bmNlZE1lc3NhZ2VVdWlkcylcbiAgICAgICAgICA6IHNlc3Npb24uc3luY2VkTWVzc2FnZVV1aWRzLFxuICAgICAgfTtcbiAgICB9XG4gICAgZnMud3JpdGVGaWxlU3luYyhTRVNTSU9OX1NUQVRFX0ZJTEUsIEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6YWJsZSwgbnVsbCwgMikpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgZXJyb3JzXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVUaXRsZShwcm9tcHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFVzZSBmaXJzdCA4MCBjaGFycyBvZiBmaXJzdCBwcm9tcHQgYXMgdGl0bGUsIHRyaW0gYXQgd29yZCBib3VuZGFyeVxuICBjb25zdCB0cmltbWVkID0gcHJvbXB0LnNsaWNlKDAsIDgwKS50cmltKCk7XG4gIGlmIChwcm9tcHQubGVuZ3RoID4gODApIHtcbiAgICBjb25zdCBsYXN0U3BhY2UgPSB0cmltbWVkLmxhc3RJbmRleE9mKFwiIFwiKTtcbiAgICBpZiAobGFzdFNwYWNlID4gNDApIHtcbiAgICAgIHJldHVybiB0cmltbWVkLnNsaWNlKDAsIGxhc3RTcGFjZSkgKyBcIi4uLlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJpbW1lZCArIFwiLi4uXCI7XG4gIH1cbiAgcmV0dXJuIHRyaW1tZWQ7XG59XG5cbi8vIFBhcnNlIHRyYW5zY3JpcHQgZmlsZSB0byBleHRyYWN0IGFzc2lzdGFudCBtZXNzYWdlcyBhbmQgdG9rZW4gdXNhZ2VcbmludGVyZmFjZSBQYXJzZWRUcmFuc2NyaXB0IHtcbiAgYXNzaXN0YW50TWVzc2FnZXM6IEFycmF5PHtcbiAgICB1dWlkOiBzdHJpbmc7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIHRpbWVzdGFtcDogc3RyaW5nO1xuICAgIG1vZGVsPzogc3RyaW5nO1xuICB9PjtcbiAgdG9rZW5Vc2FnZToge1xuICAgIGlucHV0OiBudW1iZXI7XG4gICAgb3V0cHV0OiBudW1iZXI7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHJhbnNjcmlwdEZpbGUodHJhbnNjcmlwdFBhdGg6IHN0cmluZyk6IFBhcnNlZFRyYW5zY3JpcHQge1xuICBjb25zdCByZXN1bHQ6IFBhcnNlZFRyYW5zY3JpcHQgPSB7XG4gICAgYXNzaXN0YW50TWVzc2FnZXM6IFtdLFxuICAgIHRva2VuVXNhZ2U6IHsgaW5wdXQ6IDAsIG91dHB1dDogMCB9LFxuICB9O1xuXG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRyYW5zY3JpcHRQYXRoKSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHRyYW5zY3JpcHRQYXRoLCBcInV0Zi04XCIpO1xuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC50cmltKCkuc3BsaXQoXCJcXG5cIik7XG4gICAgY29uc3Qgc2VlblV1aWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGlmICghbGluZS50cmltKCkpIGNvbnRpbnVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IEpTT04ucGFyc2UobGluZSkgYXMgVHJhbnNjcmlwdEVudHJ5O1xuXG4gICAgICAgIC8vIE9ubHkgcHJvY2VzcyBhc3Npc3RhbnQgbWVzc2FnZXNcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IFwiYXNzaXN0YW50XCIgJiYgZW50cnkubWVzc2FnZSkge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGVudHJ5Lm1lc3NhZ2U7XG4gICAgICAgICAgY29uc3QgdXVpZCA9IGVudHJ5LnV1aWQgfHwgXCJcIjtcblxuICAgICAgICAgIC8vIFNraXAgaWYgd2UndmUgYWxyZWFkeSBzZWVuIHRoaXMgVVVJRCAoZGVkdXApXG4gICAgICAgICAgaWYgKHV1aWQgJiYgc2VlblV1aWRzLmhhcyh1dWlkKSkgY29udGludWU7XG4gICAgICAgICAgaWYgKHV1aWQpIHNlZW5VdWlkcy5hZGQodXVpZCk7XG5cbiAgICAgICAgICAvLyBFeHRyYWN0IHRleHQgY29udGVudCBmcm9tIG1lc3NhZ2VcbiAgICAgICAgICBpZiAobXNnLmNvbnRlbnQgJiYgQXJyYXkuaXNBcnJheShtc2cuY29udGVudCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBtc2cuY29udGVudCkge1xuICAgICAgICAgICAgICBpZiAocGFydC50eXBlID09PSBcInRleHRcIiAmJiBwYXJ0LnRleHQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYXNzaXN0YW50TWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICB1dWlkLFxuICAgICAgICAgICAgICAgICAgdGV4dDogcGFydC50ZXh0LFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBlbnRyeS50aW1lc3RhbXAgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgbW9kZWw6IG1zZy5tb2RlbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFjY3VtdWxhdGUgdG9rZW4gdXNhZ2UgZnJvbSBhbGwgYXNzaXN0YW50IG1lc3NhZ2VzXG4gICAgICAgICAgaWYgKG1zZy51c2FnZSkge1xuICAgICAgICAgICAgcmVzdWx0LnRva2VuVXNhZ2UuaW5wdXQgKz1cbiAgICAgICAgICAgICAgKG1zZy51c2FnZS5pbnB1dF90b2tlbnMgfHwgMCkgK1xuICAgICAgICAgICAgICAobXNnLnVzYWdlLmNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIHx8IDApICtcbiAgICAgICAgICAgICAgKG1zZy51c2FnZS5jYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMgfHwgMCk7XG4gICAgICAgICAgICByZXN1bHQudG9rZW5Vc2FnZS5vdXRwdXQgKz0gbXNnLnVzYWdlLm91dHB1dF90b2tlbnMgfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTa2lwIG1hbGZvcm1lZCBsaW5lc1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gUmV0dXJuIGVtcHR5IHJlc3VsdCBvbiBlcnJvclxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxucHJvZ3JhbVxuICAuY29tbWFuZChcImhvb2sgPGV2ZW50PlwiKVxuICAuZGVzY3JpcHRpb24oXCJIYW5kbGUgQ2xhdWRlIENvZGUgaG9vayBldmVudHMgKHJlYWRzIHN0ZGluKVwiKVxuICAuYWN0aW9uKGFzeW5jIChldmVudDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIC8vIEV4aXQgc2lsZW50bHkgaWYgbm90IGNvbmZpZ3VyZWQgKGRvbid0IGJsb2NrIENsYXVkZSBDb2RlKVxuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuYXV0b1N5bmMgPT09IGZhbHNlKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuXG4gICAgLy8gUmVhZCBKU09OIGlucHV0IGZyb20gc3RkaW5cbiAgICBsZXQgaW5wdXQgPSBcIlwiO1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcHJvY2Vzcy5zdGRpbikge1xuICAgICAgaW5wdXQgKz0gY2h1bms7XG4gICAgfVxuXG4gICAgaWYgKCFpbnB1dC50cmltKCkpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgICAgIGNvbnN0IHNlc3Npb25TdGF0ZSA9IGxvYWRTZXNzaW9uU3RhdGUoKTtcblxuICAgICAgc3dpdGNoIChldmVudCkge1xuICAgICAgICBjYXNlIFwiU2Vzc2lvblN0YXJ0XCI6IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgSG9va1Nlc3Npb25TdGFydERhdGE7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gSW5pdGlhbGl6ZSBzZXNzaW9uIHN0YXRlXG4gICAgICAgICAgc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF0gPSB7XG4gICAgICAgICAgICBtb2RlbDogZGF0YS5tb2RlbCxcbiAgICAgICAgICAgIHRva2VuVXNhZ2U6IHsgaW5wdXQ6IDAsIG91dHB1dDogMCB9LFxuICAgICAgICAgICAgbWVzc2FnZUNvdW50OiAwLFxuICAgICAgICAgIH07XG4gICAgICAgICAgc2F2ZVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUpO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHNlc3Npb246IFNlc3Npb25EYXRhID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgIGN3ZDogZGF0YS5jd2QsXG4gICAgICAgICAgICBtb2RlbDogZGF0YS5tb2RlbCxcbiAgICAgICAgICAgIHBlcm1pc3Npb25Nb2RlOiBkYXRhLnBlcm1pc3Npb25fbW9kZSxcbiAgICAgICAgICAgIHRoaW5raW5nRW5hYmxlZDogZGF0YS50aGlua2luZ19lbmFibGVkLFxuICAgICAgICAgICAgbWNwU2VydmVyczogZGF0YS5tY3Bfc2VydmVycyxcbiAgICAgICAgICAgIHN0YXJ0VHlwZTogZGF0YS5zb3VyY2UgPT09IFwic3RhcnR1cFwiID8gXCJuZXdcIiA6IChkYXRhLnNvdXJjZSBhcyBTZXNzaW9uRGF0YVtcInN0YXJ0VHlwZVwiXSksXG4gICAgICAgICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIHByb2plY3RQYXRoOiBkYXRhLmN3ZCxcbiAgICAgICAgICAgIHByb2plY3ROYW1lOiBkYXRhLmN3ZCA/IGRhdGEuY3dkLnNwbGl0KFwiL1wiKS5wb3AoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jU2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJTZXNzaW9uRW5kXCI6IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgSG9va1Nlc3Npb25FbmREYXRhO1xuICAgICAgICAgIGNvbnN0IHN0YXRlID0gc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF0gfHwge307XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIGZpbmFsIHRva2VuIHVzYWdlXG4gICAgICAgICAgY29uc3QgZmluYWxUb2tlblVzYWdlID0gZGF0YS50b3RhbF90b2tlbl91c2FnZSB8fCBzdGF0ZS50b2tlblVzYWdlO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHNlc3Npb246IFNlc3Npb25EYXRhID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgIHRpdGxlOiBzdGF0ZS5maXJzdFByb21wdCA/IGdlbmVyYXRlVGl0bGUoc3RhdGUuZmlyc3RQcm9tcHQpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZW5kUmVhc29uOiBkYXRhLnJlYXNvbixcbiAgICAgICAgICAgIG1lc3NhZ2VDb3VudDogZGF0YS5tZXNzYWdlX2NvdW50IHx8IHN0YXRlLm1lc3NhZ2VDb3VudCxcbiAgICAgICAgICAgIHRvb2xDYWxsQ291bnQ6IGRhdGEudG9vbF9jYWxsX2NvdW50LFxuICAgICAgICAgICAgdG9rZW5Vc2FnZTogZmluYWxUb2tlblVzYWdlLFxuICAgICAgICAgICAgY29zdEVzdGltYXRlOiBkYXRhLmNvc3RfZXN0aW1hdGUsXG4gICAgICAgICAgICBlbmRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCBjbGllbnQuc3luY1Nlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ2xlYW4gdXAgc2Vzc2lvbiBzdGF0ZVxuICAgICAgICAgIGRlbGV0ZSBzZXNzaW9uU3RhdGVbZGF0YS5zZXNzaW9uX2lkXTtcbiAgICAgICAgICBzYXZlU2Vzc2lvblN0YXRlKHNlc3Npb25TdGF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFwiVXNlclByb21wdFN1Ym1pdFwiOiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIEhvb2tVc2VyUHJvbXB0RGF0YTtcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNlc3Npb25TdGF0ZVtkYXRhLnNlc3Npb25faWRdIHx8IHt9O1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFRyYWNrIGZpcnN0IHByb21wdCBmb3IgdGl0bGUgZ2VuZXJhdGlvblxuICAgICAgICAgIGlmICghc3RhdGUuZmlyc3RQcm9tcHQpIHtcbiAgICAgICAgICAgIHN0YXRlLmZpcnN0UHJvbXB0ID0gZGF0YS5wcm9tcHQ7XG4gICAgICAgICAgICBzZXNzaW9uU3RhdGVbZGF0YS5zZXNzaW9uX2lkXSA9IHN0YXRlO1xuICAgICAgICAgICAgc2F2ZVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBVcGRhdGUgc2Vzc2lvbiB3aXRoIHRpdGxlXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICAgICAgICB0aXRsZTogZ2VuZXJhdGVUaXRsZShkYXRhLnByb21wdCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBJbmNyZW1lbnQgbWVzc2FnZSBjb3VudFxuICAgICAgICAgIHN0YXRlLm1lc3NhZ2VDb3VudCA9IChzdGF0ZS5tZXNzYWdlQ291bnQgfHwgMCkgKyAxO1xuICAgICAgICAgIHNlc3Npb25TdGF0ZVtkYXRhLnNlc3Npb25faWRdID0gc3RhdGU7XG4gICAgICAgICAgc2F2ZVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUpO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2VEYXRhID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IGAke2RhdGEuc2Vzc2lvbl9pZH0tdXNlci0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICAgICAgcm9sZTogXCJ1c2VyXCIsXG4gICAgICAgICAgICBjb250ZW50OiBkYXRhLnByb21wdCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogZGF0YS50aW1lc3RhbXAgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBcIlBvc3RUb29sVXNlXCI6IHtcbiAgICAgICAgICBpZiAoIWNvbmZpZy5zeW5jVG9vbENhbGxzKSBicmVhaztcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgSG9va1Rvb2xVc2VEYXRhO1xuICAgICAgICAgIGNvbnN0IHN0YXRlID0gc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF0gfHwge307XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgbWVzc2FnZTogTWVzc2FnZURhdGEgPSB7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbl9pZCxcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogZGF0YS50b29sX3VzZV9pZCB8fCBgJHtkYXRhLnNlc3Npb25faWR9LXRvb2wtJHtEYXRlLm5vdygpfWAsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgICAgICB0b29sTmFtZTogZGF0YS50b29sX25hbWUsXG4gICAgICAgICAgICB0b29sQXJnczogZGF0YS50b29sX2lucHV0LFxuICAgICAgICAgICAgdG9vbFJlc3VsdDogZGF0YS50b29sX3Jlc3VsdD8ub3V0cHV0IHx8IGRhdGEudG9vbF9yZXN1bHQ/LmVycm9yLFxuICAgICAgICAgICAgZHVyYXRpb25NczogZGF0YS5kdXJhdGlvbl9tcyxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBcIlN0b3BcIjoge1xuICAgICAgICAgIC8vIFN0b3AgZXZlbnQgcHJvdmlkZXMgdHJhbnNjcmlwdF9wYXRoIC0gd2UgcmVhZCBpdCB0byBnZXQgbWVzc2FnZXMgYW5kIHRva2Vuc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGlucHV0KSBhcyBIb29rU3RvcERhdGE7XG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXNzaW9uU3RhdGVbZGF0YS5zZXNzaW9uX2lkXSB8fCB7fTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBQYXJzZSB0cmFuc2NyaXB0IGZpbGUgdG8gZXh0cmFjdCBhc3Npc3RhbnQgbWVzc2FnZXMgYW5kIHRva2VuIHVzYWdlXG4gICAgICAgICAgaWYgKGRhdGEudHJhbnNjcmlwdF9wYXRoKSB7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2NyaXB0ID0gcGFyc2VUcmFuc2NyaXB0RmlsZShkYXRhLnRyYW5zY3JpcHRfcGF0aCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0b2tlbiB1c2FnZSBmcm9tIHRyYW5zY3JpcHRcbiAgICAgICAgICAgIGlmICh0cmFuc2NyaXB0LnRva2VuVXNhZ2UuaW5wdXQgPiAwIHx8IHRyYW5zY3JpcHQudG9rZW5Vc2FnZS5vdXRwdXQgPiAwKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnRva2VuVXNhZ2UgPSB0cmFuc2NyaXB0LnRva2VuVXNhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFRyYWNrIHdoaWNoIG1lc3NhZ2VzIHdlJ3ZlIGFscmVhZHkgc3luY2VkIHRvIGF2b2lkIGR1cGxpY2F0ZXNcbiAgICAgICAgICAgIGNvbnN0IHN5bmNlZE1lc3NhZ2VzID0gc3RhdGUuc3luY2VkTWVzc2FnZVV1aWRzIGluc3RhbmNlb2YgU2V0XG4gICAgICAgICAgICAgID8gc3RhdGUuc3luY2VkTWVzc2FnZVV1aWRzXG4gICAgICAgICAgICAgIDogbmV3IFNldDxzdHJpbmc+KEFycmF5LmlzQXJyYXkoc3RhdGUuc3luY2VkTWVzc2FnZVV1aWRzKSA/IHN0YXRlLnN5bmNlZE1lc3NhZ2VVdWlkcyA6IFtdKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gU3luYyBuZXcgYXNzaXN0YW50IG1lc3NhZ2VzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiB0cmFuc2NyaXB0LmFzc2lzdGFudE1lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgIC8vIFNraXAgaWYgd2UndmUgYWxyZWFkeSBzeW5jZWQgdGhpcyBtZXNzYWdlXG4gICAgICAgICAgICAgIGlmIChtc2cudXVpZCAmJiBzeW5jZWRNZXNzYWdlcy5oYXMobXNnLnV1aWQpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgaWYgKG1zZy51dWlkKSBzeW5jZWRNZXNzYWdlcy5hZGQobXNnLnV1aWQpO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLy8gSW5jcmVtZW50IG1lc3NhZ2UgY291bnRcbiAgICAgICAgICAgICAgc3RhdGUubWVzc2FnZUNvdW50ID0gKHN0YXRlLm1lc3NhZ2VDb3VudCB8fCAwKSArIDE7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlOiBNZXNzYWdlRGF0YSA9IHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbl9pZCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IG1zZy51dWlkIHx8IGAke2RhdGEuc2Vzc2lvbl9pZH0tYXNzaXN0YW50LSR7RGF0ZS5ub3coKX1gLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICAgICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgICAgICAgICAgY29udGVudDogbXNnLnRleHQsXG4gICAgICAgICAgICAgICAgbW9kZWw6IG1zZy5tb2RlbCxcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IG1zZy50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gU3RvcmUgc3luY2VkIG1lc3NhZ2UgVVVJRHMgKGNvbnZlcnQgU2V0IHRvIGFycmF5IGZvciBKU09OKVxuICAgICAgICAgICAgc3RhdGUuc3luY2VkTWVzc2FnZVV1aWRzID0gc3luY2VkTWVzc2FnZXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHNlc3Npb25TdGF0ZVtkYXRhLnNlc3Npb25faWRdID0gc3RhdGU7XG4gICAgICAgICAgc2F2ZVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFVwZGF0ZSBzZXNzaW9uIHdpdGggdG9rZW4gdXNhZ2UgZnJvbSB0cmFuc2NyaXB0XG4gICAgICAgICAgY29uc3Qgc2Vzc2lvbjogU2Vzc2lvbkRhdGEgPSB7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbl9pZCxcbiAgICAgICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICAgICAgdG9rZW5Vc2FnZTogc3RhdGUudG9rZW5Vc2FnZSxcbiAgICAgICAgICAgIG1lc3NhZ2VDb3VudDogc3RhdGUubWVzc2FnZUNvdW50LFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBVbmtub3duIGV2ZW50LCBpZ25vcmVcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBMb2cgdG8gc3RkZXJyIGJ1dCBkb24ndCBibG9jayBDbGF1ZGUgQ29kZVxuICAgICAgY29uc29sZS5lcnJvcihgW2NsYXVkZS1jb2RlLXN5bmNdIEVycm9yOiAke2Vycm9yfWApO1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cbiAgfSk7XG5cbi8vIFBhcnNlIGFuZCBydW5cbnByb2dyYW0ucGFyc2UoKTtcbiJdfQ==
package/dist/index.d.ts CHANGED
@@ -52,6 +52,7 @@ export interface MessageData {
52
52
  durationMs?: number;
53
53
  tokenCount?: number;
54
54
  timestamp?: string;
55
+ model?: string;
55
56
  }
56
57
  export interface ToolUseData {
57
58
  sessionId: string;
package/dist/index.js CHANGED
@@ -194,6 +194,10 @@ class SyncClient {
194
194
  if (message.tokenCount !== undefined) {
195
195
  payload.promptTokens = message.tokenCount;
196
196
  }
197
+ // Include model if available
198
+ if (message.model) {
199
+ payload.model = message.model;
200
+ }
197
201
  // Tool use info stored in parts
198
202
  if (message.toolName) {
199
203
  payload.parts = [
@@ -423,4 +427,4 @@ function createPlugin() {
423
427
  }
424
428
  // Default export for Claude Code plugin system
425
429
  exports.default = createPlugin;
426
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvSUgsZ0NBNEJDO0FBRUQsZ0NBVUM7QUFFRCxrQ0FRQztBQW1NRCxvQ0FxS0M7QUE1aEJELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBeUh6QiwrRUFBK0U7QUFDL0UsZ0JBQWdCO0FBQ2hCLCtFQUErRTtBQUUvRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUMxRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUV6RCxTQUFnQixVQUFVO0lBQ3hCLG9DQUFvQztJQUNwQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDO0lBQ2xELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7SUFFL0MsSUFBSSxNQUFNLElBQUksTUFBTSxFQUFFLENBQUM7UUFDckIsT0FBTztZQUNMLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7WUFDckMsTUFBTSxFQUFFLE1BQU07WUFDZCxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsS0FBSyxPQUFPO1lBQ3ZELGFBQWEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixLQUFLLE9BQU87WUFDN0QsWUFBWSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEtBQUssTUFBTTtTQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUVELDJCQUEyQjtJQUMzQixJQUFJLENBQUM7UUFDSCxJQUFJLEVB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QWE7Z0JBQ2xDLFVBQVUsRUFBRSxLQUFLLENBQUMsZUFBZTtnQkFDakMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO2dCQUNoQyxPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDbEMsQ0FBQztZQUVGLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTFDLE9BQU8sQ0FBQyxHQUFHLENBQ1Qsc0NBQXNDLEtBQUssQ0FBQyxZQUFZLGNBQWMsS0FBSyxDQUFDLGFBQWEsYUFBYSxDQUN2RyxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsK0NBQStDO0FBQy9DLGtCQUFlLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhdWRlIENvZGUgU3luYyBQbHVnaW5cbiAqXG4gKiBTeW5jcyBDbGF1ZGUgQ29kZSBzZXNzaW9ucyB0byBPcGVuU3luYyBkYXNoYm9hcmQuXG4gKiBVc2VzIEFQSSBLZXkgYXV0aGVudGljYXRpb24gKG5vIGJyb3dzZXIgT0F1dGggcmVxdWlyZWQpLlxuICpcbiAqIEluc3RhbGw6IG5wbSBpbnN0YWxsIC1nIGNsYXVkZS1jb2RlLXN5bmNcbiAqIENvbmZpZ3VyZTogY2xhdWRlLWNvZGUtc3luYyBsb2dpblxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnIHtcbiAgY29udmV4VXJsOiBzdHJpbmc7XG4gIGFwaUtleTogc3RyaW5nO1xuICBhdXRvU3luYz86IGJvb2xlYW47XG4gIHN5bmNUb29sQ2FsbHM/OiBib29sZWFuO1xuICBzeW5jVGhpbmtpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25EYXRhIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiO1xuICB0aXRsZT86IHN0cmluZztcbiAgcHJvamVjdFBhdGg/OiBzdHJpbmc7XG4gIHByb2plY3ROYW1lPzogc3RyaW5nO1xuICBjd2Q/OiBzdHJpbmc7XG4gIGdpdEJyYW5jaD86IHN0cmluZztcbiAgZ2l0UmVwbz86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIHN0YXJ0VHlwZT86IFwibmV3XCIgfCBcInJlc3VtZVwiIHwgXCJjb250aW51ZVwiO1xuICBlbmRSZWFzb24/OiBcInVzZXJfc3RvcFwiIHwgXCJtYXhfdHVybnNcIiB8IFwiZXJyb3JcIiB8IFwiY29tcGxldGVkXCI7XG4gIHRoaW5raW5nRW5hYmxlZD86IGJvb2xlYW47XG4gIHBlcm1pc3Npb25Nb2RlPzogc3RyaW5nO1xuICBtY3BTZXJ2ZXJzPzogc3RyaW5nW107XG4gIG1lc3NhZ2VDb3VudD86IG51bWJlcjtcbiAgdG9vbENhbGxDb3VudD86IG51bWJlcjtcbiAgdG9rZW5Vc2FnZT86IHtcbiAgICBpbnB1dDogbnVtYmVyO1xuICAgIG91dHB1dDogbnVtYmVyO1xuICB9O1xuICBjb3N0RXN0aW1hdGU/OiBudW1iZXI7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgZW5kZWRBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlRGF0YSB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgc291cmNlOiBcImNsYXVkZS1jb2RlXCI7XG4gIHJvbGU6IFwidXNlclwiIHwgXCJhc3Npc3RhbnRcIiB8IFwic3lzdGVtXCI7XG4gIGNvbnRlbnQ/OiBzdHJpbmc7XG4gIHRoaW5raW5nQ29udGVudD86IHN0cmluZztcbiAgdG9vbE5hbWU/OiBzdHJpbmc7XG4gIHRvb2xBcmdzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHRvb2xSZXN1bHQ/OiBzdHJpbmc7XG4gIGR1cmF0aW9uTXM/OiBudW1iZXI7XG4gIHRva2VuQ291bnQ/OiBudW1iZXI7XG4gIHRpbWVzdGFtcD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb29sVXNlRGF0YSB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB0b29sTmFtZTogc3RyaW5nO1xuICB0b29sQXJncz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZXN1bHQ/OiBzdHJpbmc7XG4gIHN1Y2Nlc3M/OiBib29sZWFuO1xuICBkdXJhdGlvbk1zPzogbnVtYmVyO1xuICB0aW1lc3RhbXA/OiBzdHJpbmc7XG59XG5cbi8vIENsYXVkZSBDb2RlIEhvb2sgVHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgQ2xhdWRlQ29kZUhvb2tzIHtcbiAgU2Vzc2lvblN0YXJ0PzogKGRhdGE6IFNlc3Npb25TdGFydEV2ZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgVXNlclByb21wdFN1Ym1pdD86IChkYXRhOiBVc2VyUHJvbXB0RXZlbnQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBQb3N0VG9vbFVzZT86IChkYXRhOiBUb29sVXNlRXZlbnQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBTdG9wPzogKGRhdGE6IFN0b3BFdmVudCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIFNlc3Npb25FbmQ/OiAoZGF0YTogU2Vzc2lvbkVuZEV2ZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uU3RhcnRFdmVudCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBjd2Q6IHN0cmluZztcbiAgbW9kZWw6IHN0cmluZztcbiAgc3RhcnRUeXBlOiBcIm5ld1wiIHwgXCJyZXN1bWVcIiB8IFwiY29udGludWVcIjtcbiAgdGhpbmtpbmdFbmFibGVkPzogYm9vbGVhbjtcbiAgcGVybWlzc2lvbk1vZGU/OiBzdHJpbmc7XG4gIG1jcFNlcnZlcnM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyUHJvbXB0RXZlbnQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJvbXB0OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xVc2VFdmVudCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB0b29sTmFtZTogc3RyaW5nO1xuICBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVzdWx0OiBzdHJpbmc7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdG9wRXZlbnQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgcmVzcG9uc2U6IHN0cmluZztcbiAgdG9rZW5Vc2FnZToge1xuICAgIGlucHV0OiBudW1iZXI7XG4gICAgb3V0cHV0OiBudW1iZXI7XG4gIH07XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uRW5kRXZlbnQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgZW5kUmVhc29uOiBcInVzZXJfc3RvcFwiIHwgXCJtYXhfdHVybnNcIiB8IFwiZXJyb3JcIiB8IFwiY29tcGxldGVkXCI7XG4gIG1lc3NhZ2VDb3VudDogbnVtYmVyO1xuICB0b29sQ2FsbENvdW50OiBudW1iZXI7XG4gIHRvdGFsVG9rZW5Vc2FnZToge1xuICAgIGlucHV0OiBudW1iZXI7XG4gICAgb3V0cHV0OiBudW1iZXI7XG4gIH07XG4gIGNvc3RFc3RpbWF0ZTogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb25maWd1cmF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IENPTkZJR19ESVIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCBcIi5jb25maWdcIiwgXCJjbGF1ZGUtY29kZS1zeW5jXCIpO1xuY29uc3QgQ09ORklHX0ZJTEUgPSBwYXRoLmpvaW4oQ09ORklHX0RJUiwgXCJjb25maWcuanNvblwiKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb25maWcoKTogQ29uZmlnIHwgbnVsbCB7XG4gIC8vIENoZWNrIGVudmlyb25tZW50IHZhcmlhYmxlcyBmaXJzdFxuICBjb25zdCBlbnZVcmwgPSBwcm9jZXNzLmVudi5DTEFVREVfU1lOQ19DT05WRVhfVVJMO1xuICBjb25zdCBlbnZLZXkgPSBwcm9jZXNzLmVudi5DTEFVREVfU1lOQ19BUElfS0VZO1xuXG4gIGlmIChlbnZVcmwgJiYgZW52S2V5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnZleFVybDogbm9ybWFsaXplQ29udmV4VXJsKGVudlVybCksXG4gICAgICBhcGlLZXk6IGVudktleSxcbiAgICAgIGF1dG9TeW5jOiBwcm9jZXNzLmVudi5DTEFVREVfU1lOQ19BVVRPX1NZTkMgIT09IFwiZmFsc2VcIixcbiAgICAgIHN5bmNUb29sQ2FsbHM6IHByb2Nlc3MuZW52LkNMQVVERV9TWU5DX1RPT0xfQ0FMTFMgIT09IFwiZmFsc2VcIixcbiAgICAgIHN5bmNUaGlua2luZzogcHJvY2Vzcy5lbnYuQ0xBVURFX1NZTkNfVEhJTktJTkcgPT09IFwidHJ1ZVwiLFxuICAgIH07XG4gIH1cblxuICAvLyBGYWxsIGJhY2sgdG8gY29uZmlnIGZpbGVcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhDT05GSUdfRklMRSkpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMoQ09ORklHX0ZJTEUsIFwidXRmLThcIik7XG4gICAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKGRhdGEpIGFzIENvbmZpZztcbiAgICAgIGNvbmZpZy5jb252ZXhVcmwgPSBub3JtYWxpemVDb252ZXhVcmwoY29uZmlnLmNvbnZleFVybCk7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgbG9hZGluZyBjb25maWc6XCIsIGVycm9yKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUNvbmZpZyhjb25maWc6IENvbmZpZyk6IHZvaWQge1xuICB0cnkge1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhDT05GSUdfRElSKSkge1xuICAgICAgZnMubWtkaXJTeW5jKENPTkZJR19ESVIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgICBmcy53cml0ZUZpbGVTeW5jKENPTkZJR19GSUxFLCBKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igc2F2aW5nIGNvbmZpZzpcIiwgZXJyb3IpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckNvbmZpZygpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhDT05GSUdfRklMRSkpIHtcbiAgICAgIGZzLnVubGlua1N5bmMoQ09ORklHX0ZJTEUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgY2xlYXJpbmcgY29uZmlnOlwiLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29udmV4VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQ29udmVydCAuY29udmV4LmNsb3VkIHRvIC5jb252ZXguc2l0ZSBmb3IgQVBJIGNhbGxzXG4gIHJldHVybiB1cmwucmVwbGFjZShcIi5jb252ZXguY2xvdWRcIiwgXCIuY29udmV4LnNpdGVcIik7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFN5bmMgQ2xpZW50XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjbGFzcyBTeW5jQ2xpZW50IHtcbiAgcHJpdmF0ZSBjb25maWc6IENvbmZpZztcbiAgcHJpdmF0ZSBzaXRlVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgc2Vzc2lvbkNhY2hlOiBNYXA8c3RyaW5nLCBQYXJ0aWFsPFNlc3Npb25EYXRhPj4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAvLyBOb3JtYWxpemUgVVJMIHRvIC5jb252ZXguc2l0ZSBmb3IgSFRUUCBlbmRwb2ludHNcbiAgICAvLyBTdXBwb3J0cyBib3RoIC5jb252ZXguY2xvdWQgYW5kIC5jb252ZXguc2l0ZSBpbnB1dCBVUkxzXG4gICAgdGhpcy5zaXRlVXJsID0gY29uZmlnLmNvbnZleFVybC5yZXBsYWNlKFwiLmNvbnZleC5jbG91ZFwiLCBcIi5jb252ZXguc2l0ZVwiKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdChlbmRwb2ludDogc3RyaW5nLCBkYXRhOiB1bmtub3duKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5zaXRlVXJsfSR7ZW5kcG9pbnR9YDtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuY29uZmlnLmFwaUtleX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgIH0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU3luYyBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfSAtICR7dGV4dH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICB9XG5cbiAgLy8gVHJhbnNmb3JtIHNlc3Npb24gZGF0YSB0byBiYWNrZW5kIGZvcm1hdFxuICBwcml2YXRlIHRyYW5zZm9ybVNlc3Npb24oc2Vzc2lvbjogU2Vzc2lvbkRhdGEpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBleHRlcm5hbElkOiBzZXNzaW9uLnNlc3Npb25JZCxcbiAgICAgIHNvdXJjZTogc2Vzc2lvbi5zb3VyY2UsXG4gICAgfTtcbiAgICBcbiAgICAvLyBPbmx5IGluY2x1ZGUgZmllbGRzIHRoYXQgYXJlIGRlZmluZWRcbiAgICBpZiAoc2Vzc2lvbi50aXRsZSAhPT0gdW5kZWZpbmVkKSBwYXlsb2FkLnRpdGxlID0gc2Vzc2lvbi50aXRsZTtcbiAgICBpZiAoc2Vzc2lvbi5wcm9qZWN0UGF0aCB8fCBzZXNzaW9uLmN3ZCkgcGF5bG9hZC5wcm9qZWN0UGF0aCA9IHNlc3Npb24ucHJvamVjdFBhdGggfHwgc2Vzc2lvbi5jd2Q7XG4gICAgaWYgKHNlc3Npb24ucHJvamVjdE5hbWUpIHBheWxvYWQucHJvamVjdE5hbWUgPSBzZXNzaW9uLnByb2plY3ROYW1lO1xuICAgIGlmIChzZXNzaW9uLm1vZGVsKSBwYXlsb2FkLm1vZGVsID0gc2Vzc2lvbi5tb2RlbDtcbiAgICBpZiAoc2Vzc2lvbi50b2tlblVzYWdlPy5pbnB1dCAhPT0gdW5kZWZpbmVkKSBwYXlsb2FkLnByb21wdFRva2VucyA9IHNlc3Npb24udG9rZW5Vc2FnZS5pbnB1dDtcbiAgICBpZiAoc2Vzc2lvbi50b2tlblVzYWdlPy5vdXRwdXQgIT09IHVuZGVmaW5lZCkgcGF5bG9hZC5jb21wbGV0aW9uVG9rZW5zID0gc2Vzc2lvbi50b2tlblVzYWdlLm91dHB1dDtcbiAgICBpZiAoc2Vzc2lvbi5jb3N0RXN0aW1hdGUgIT09IHVuZGVmaW5lZCkgcGF5bG9hZC5jb3N0ID0gc2Vzc2lvbi5jb3N0RXN0aW1hdGU7XG4gICAgaWYgKHNlc3Npb24ubWVzc2FnZUNvdW50ICE9PSB1bmRlZmluZWQpIHBheWxvYWQubWVzc2FnZUNvdW50ID0gc2Vzc2lvbi5tZXNzYWdlQ291bnQ7XG4gICAgaWYgKHNlc3Npb24udG9vbENhbGxDb3VudCAhPT0gdW5kZWZpbmVkKSBwYXlsb2FkLnRvb2xDYWxsQ291bnQgPSBzZXNzaW9uLnRvb2xDYWxsQ291bnQ7XG4gICAgaWYgKHNlc3Npb24uZW5kUmVhc29uKSBwYXlsb2FkLmVuZFJlYXNvbiA9IHNlc3Npb24uZW5kUmVhc29uO1xuICAgIFxuICAgIC8vIENhbGN1bGF0ZSBkdXJhdGlvbiBpZiBib3RoIHRpbWVzdGFtcHMgZXhpc3RcbiAgICBpZiAoc2Vzc2lvbi5lbmRlZEF0ICYmIHNlc3Npb24uc3RhcnRlZEF0KSB7XG4gICAgICBwYXlsb2FkLmR1cmF0aW9uTXMgPSBuZXcgRGF0ZShzZXNzaW9uLmVuZGVkQXQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKHNlc3Npb24uc3RhcnRlZEF0KS5nZXRUaW1lKCk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9XG5cbiAgLy8gVHJhbnNmb3JtIG1lc3NhZ2UgZGF0YSB0byBiYWNrZW5kIGZvcm1hdFxuICBwcml2YXRlIHRyYW5zZm9ybU1lc3NhZ2UobWVzc2FnZTogTWVzc2FnZURhdGEpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBzZXNzaW9uRXh0ZXJuYWxJZDogbWVzc2FnZS5zZXNzaW9uSWQsXG4gICAgICBleHRlcm5hbElkOiBtZXNzYWdlLm1lc3NhZ2VJZCxcbiAgICAgIHJvbGU6IG1lc3NhZ2Uucm9sZSxcbiAgICAgIHNvdXJjZTogbWVzc2FnZS5zb3VyY2UsXG4gICAgfTtcbiAgICBcbiAgICAvLyBTZXQgdGV4dENvbnRlbnQgZm9yIHVzZXIgcHJvbXB0cyBhbmQgYXNzaXN0YW50IHJlc3BvbnNlc1xuICAgIGlmIChtZXNzYWdlLmNvbnRlbnQpIHtcbiAgICAgIHBheWxvYWQudGV4dENvbnRlbnQgPSBtZXNzYWdlLmNvbnRlbnQ7XG4gICAgfSBlbHNlIGlmIChtZXNzYWdlLnRvb2xSZXN1bHQgJiYgIW1lc3NhZ2UudG9vbE5hbWUpIHtcbiAgICAgIC8vIE9ubHkgdXNlIHRvb2xSZXN1bHQgYXMgdGV4dENvbnRlbnQgaWYgbm8gdG9vbE5hbWUgKGZhbGxiYWNrKVxuICAgICAgcGF5bG9hZC50ZXh0Q29udGVudCA9IG1lc3NhZ2UudG9vbFJlc3VsdDtcbiAgICB9XG4gICAgXG4gICAgLy8gSW5jbHVkZSBkdXJhdGlvbiBpZiBhdmFpbGFibGVcbiAgICBpZiAobWVzc2FnZS5kdXJhdGlvbk1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBheWxvYWQuZHVyYXRpb25NcyA9IG1lc3NhZ2UuZHVyYXRpb25NcztcbiAgICB9XG4gICAgXG4gICAgLy8gSW5jbHVkZSB0b2tlbiBjb3VudCBpZiBhdmFpbGFibGVcbiAgICBpZiAobWVzc2FnZS50b2tlbkNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBheWxvYWQucHJvbXB0VG9rZW5zID0gbWVzc2FnZS50b2tlbkNvdW50O1xuICAgIH1cbiAgICBcbiAgICAvLyBUb29sIHVzZSBpbmZvIHN0b3JlZCBpbiBwYXJ0c1xuICAgIGlmIChtZXNzYWdlLnRvb2xOYW1lKSB7XG4gICAgICBwYXlsb2FkLnBhcnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0b29sLWNhbGxcIixcbiAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICB0b29sTmFtZTogbWVzc2FnZS50b29sTmFtZSxcbiAgICAgICAgICAgIGFyZ3M6IG1lc3NhZ2UudG9vbEFyZ3MsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICAvLyBBZGQgdG9vbCByZXN1bHQgYXMgc2VwYXJhdGUgcGFydFxuICAgICAgaWYgKG1lc3NhZ2UudG9vbFJlc3VsdCkge1xuICAgICAgICAocGF5bG9hZC5wYXJ0cyBhcyBBcnJheTx7IHR5cGU6IHN0cmluZzsgY29udGVudDogdW5rbm93biB9PikucHVzaCh7XG4gICAgICAgICAgdHlwZTogXCJ0b29sLXJlc3VsdFwiLFxuICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UudG9vbFJlc3VsdCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9XG5cbiAgYXN5bmMgc3luY1Nlc3Npb24oc2Vzc2lvbjogU2Vzc2lvbkRhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMudHJhbnNmb3JtU2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdChcIi9zeW5jL3Nlc3Npb25cIiwgcGF5bG9hZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gc3luYyBzZXNzaW9uOlwiLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzeW5jTWVzc2FnZShtZXNzYWdlOiBNZXNzYWdlRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy50cmFuc2Zvcm1NZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KFwiL3N5bmMvbWVzc2FnZVwiLCBwYXlsb2FkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBzeW5jIG1lc3NhZ2U6XCIsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN5bmNCYXRjaChcbiAgICBzZXNzaW9uczogU2Vzc2lvbkRhdGFbXSxcbiAgICBtZXNzYWdlczogTWVzc2FnZURhdGFbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWRTZXNzaW9ucyA9IHNlc3Npb25zLm1hcCgocykgPT4gdGhpcy50cmFuc2Zvcm1TZXNzaW9uKHMpKTtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkTWVzc2FnZXMgPSBtZXNzYWdlcy5tYXAoKG0pID0+IHRoaXMudHJhbnNmb3JtTWVzc2FnZShtKSk7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoXCIvc3luYy9iYXRjaFwiLCB7XG4gICAgICAgIHNlc3Npb25zOiB0cmFuc2Zvcm1lZFNlc3Npb25zLFxuICAgICAgICBtZXNzYWdlczogdHJhbnNmb3JtZWRNZXNzYWdlcyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHN5bmMgYmF0Y2g6XCIsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRlc3RDb25uZWN0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNpdGVVcmx9L2hlYWx0aGA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2Uub2s7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gU2Vzc2lvbiBzdGF0ZSBtYW5hZ2VtZW50XG4gIGdldFNlc3Npb25TdGF0ZShzZXNzaW9uSWQ6IHN0cmluZyk6IFBhcnRpYWw8U2Vzc2lvbkRhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25JZCkgfHwge307XG4gIH1cblxuICB1cGRhdGVTZXNzaW9uU3RhdGUoXG4gICAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgdXBkYXRlczogUGFydGlhbDxTZXNzaW9uRGF0YT5cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2Vzc2lvbkNhY2hlLmdldChzZXNzaW9uSWQpIHx8IHt9O1xuICAgIHRoaXMuc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uSWQsIHsgLi4uY3VycmVudCwgLi4udXBkYXRlcyB9KTtcbiAgfVxuXG4gIGNsZWFyU2Vzc2lvblN0YXRlKHNlc3Npb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZXNzaW9uQ2FjaGUuZGVsZXRlKHNlc3Npb25JZCk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUGx1Z2luIEV4cG9ydFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENsYXVkZSBDb2RlIFBsdWdpbiBFbnRyeSBQb2ludFxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IENsYXVkZSBDb2RlIHRvIHJlZ2lzdGVyIHRoZSBwbHVnaW4uXG4gKiBJdCByZXR1cm5zIGhvb2sgaGFuZGxlcnMgdGhhdCBmaXJlIGF0IGtleSBwb2ludHMgaW4gdGhlIHNlc3Npb24gbGlmZWN5Y2xlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGx1Z2luKCk6IENsYXVkZUNvZGVIb29rcyB8IG51bGwge1xuICBjb25zdCBjb25maWcgPSBsb2FkQ29uZmlnKCk7XG5cbiAgaWYgKCFjb25maWcpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIFwiW2NsYXVkZS1jb2RlLXN5bmNdIE5vdCBjb25maWd1cmVkLiBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIHRvIHNldCB1cC5cIlxuICAgICk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY29uZmlnLmF1dG9TeW5jID09PSBmYWxzZSkge1xuICAgIGNvbnNvbGUubG9nKFwiW2NsYXVkZS1jb2RlLXN5bmNdIEF1dG8tc3luYyBkaXNhYmxlZCBpbiBjb25maWcuXCIpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgbGV0IG1lc3NhZ2VDb3VudGVyID0gMDtcbiAgbGV0IHRvb2xDYWxsQ291bnRlciA9IDA7XG5cbiAgY29uc29sZS5sb2coXCJbY2xhdWRlLWNvZGUtc3luY10gUGx1Z2luIGxvYWRlZC4gU2Vzc2lvbnMgd2lsbCBzeW5jIHRvIE9wZW5TeW5jLlwiKTtcblxuICByZXR1cm4ge1xuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIGEgbmV3IHNlc3Npb24gc3RhcnRzXG4gICAgICovXG4gICAgU2Vzc2lvblN0YXJ0OiBhc3luYyAoZXZlbnQ6IFNlc3Npb25TdGFydEV2ZW50KSA9PiB7XG4gICAgICBtZXNzYWdlQ291bnRlciA9IDA7XG4gICAgICB0b29sQ2FsbENvdW50ZXIgPSAwO1xuXG4gICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgc2Vzc2lvbklkOiBldmVudC5zZXNzaW9uSWQsXG4gICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICBjd2Q6IGV2ZW50LmN3ZCxcbiAgICAgICAgbW9kZWw6IGV2ZW50Lm1vZGVsLFxuICAgICAgICBzdGFydFR5cGU6IGV2ZW50LnN0YXJ0VHlwZSxcbiAgICAgICAgdGhpbmtpbmdFbmFibGVkOiBldmVudC50aGlua2luZ0VuYWJsZWQsXG4gICAgICAgIHBlcm1pc3Npb25Nb2RlOiBldmVudC5wZXJtaXNzaW9uTW9kZSxcbiAgICAgICAgbWNwU2VydmVyczogZXZlbnQubWNwU2VydmVycyxcbiAgICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuXG4gICAgICAvLyBFeHRyYWN0IHByb2plY3QgaW5mbyBmcm9tIGN3ZFxuICAgICAgaWYgKGV2ZW50LmN3ZCkge1xuICAgICAgICBzZXNzaW9uLnByb2plY3RQYXRoID0gZXZlbnQuY3dkO1xuICAgICAgICBzZXNzaW9uLnByb2plY3ROYW1lID0gcGF0aC5iYXNlbmFtZShldmVudC5jd2QpO1xuXG4gICAgICAgIC8vIFRyeSB0byBnZXQgZ2l0IGluZm9cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBnaXREaXIgPSBwYXRoLmpvaW4oZXZlbnQuY3dkLCBcIi5naXRcIik7XG4gICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZ2l0RGlyKSkge1xuICAgICAgICAgICAgY29uc3QgaGVhZEZpbGUgPSBwYXRoLmpvaW4oZ2l0RGlyLCBcIkhFQURcIik7XG4gICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhoZWFkRmlsZSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgaGVhZCA9IGZzLnJlYWRGaWxlU3luYyhoZWFkRmlsZSwgXCJ1dGYtOFwiKS50cmltKCk7XG4gICAgICAgICAgICAgIGlmIChoZWFkLnN0YXJ0c1dpdGgoXCJyZWY6IHJlZnMvaGVhZHMvXCIpKSB7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5naXRCcmFuY2ggPSBoZWFkLnJlcGxhY2UoXCJyZWY6IHJlZnMvaGVhZHMvXCIsIFwiXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBJZ25vcmUgZ2l0IGVycm9yc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNsaWVudC51cGRhdGVTZXNzaW9uU3RhdGUoZXZlbnQuc2Vzc2lvbklkLCBzZXNzaW9uKTtcbiAgICAgIGF3YWl0IGNsaWVudC5zeW5jU2Vzc2lvbihzZXNzaW9uKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdXNlciBzdWJtaXRzIGEgcHJvbXB0XG4gICAgICovXG4gICAgVXNlclByb21wdFN1Ym1pdDogYXN5bmMgKGV2ZW50OiBVc2VyUHJvbXB0RXZlbnQpID0+IHtcbiAgICAgIG1lc3NhZ2VDb3VudGVyKys7XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2VEYXRhID0ge1xuICAgICAgICBzZXNzaW9uSWQ6IGV2ZW50LnNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBgJHtldmVudC5zZXNzaW9uSWR9LW1zZy0ke21lc3NhZ2VDb3VudGVyfWAsXG4gICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICByb2xlOiBcInVzZXJcIixcbiAgICAgICAgY29udGVudDogZXZlbnQucHJvbXB0LFxuICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBjbGllbnQuc3luY01lc3NhZ2UobWVzc2FnZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGxlZCBhZnRlciBlYWNoIHRvb2wgdXNlXG4gICAgICovXG4gICAgUG9zdFRvb2xVc2U6IGFzeW5jIChldmVudDogVG9vbFVzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWNvbmZpZy5zeW5jVG9vbENhbGxzKSByZXR1cm47XG5cbiAgICAgIHRvb2xDYWxsQ291bnRlcisrO1xuICAgICAgbWVzc2FnZUNvdW50ZXIrKztcblxuICAgICAgY29uc3QgbWVzc2FnZTogTWVzc2FnZURhdGEgPSB7XG4gICAgICAgIHNlc3Npb25JZDogZXZlbnQuc2Vzc2lvbklkLFxuICAgICAgICBtZXNzYWdlSWQ6IGAke2V2ZW50LnNlc3Npb25JZH0tdG9vbC0ke3Rvb2xDYWxsQ291bnRlcn1gLFxuICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgdG9vbE5hbWU6IGV2ZW50LnRvb2xOYW1lLFxuICAgICAgICB0b29sQXJnczogZXZlbnQuYXJncyxcbiAgICAgICAgdG9vbFJlc3VsdDogZXZlbnQucmVzdWx0LFxuICAgICAgICBkdXJhdGlvbk1zOiBldmVudC5kdXJhdGlvbk1zLFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gQ2xhdWRlIHN0b3BzIHJlc3BvbmRpbmdcbiAgICAgKi9cbiAgICBTdG9wOiBhc3luYyAoZXZlbnQ6IFN0b3BFdmVudCkgPT4ge1xuICAgICAgbWVzc2FnZUNvdW50ZXIrKztcblxuICAgICAgY29uc3QgbWVzc2FnZTogTWVzc2FnZURhdGEgPSB7XG4gICAgICAgIHNlc3Npb25JZDogZXZlbnQuc2Vzc2lvbklkLFxuICAgICAgICBtZXNzYWdlSWQ6IGAke2V2ZW50LnNlc3Npb25JZH0tbXNnLSR7bWVzc2FnZUNvdW50ZXJ9YCxcbiAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgIGNvbnRlbnQ6IGV2ZW50LnJlc3BvbnNlLFxuICAgICAgICB0b2tlbkNvdW50OiBldmVudC50b2tlblVzYWdlLmlucHV0ICsgZXZlbnQudG9rZW5Vc2FnZS5vdXRwdXQsXG4gICAgICAgIGR1cmF0aW9uTXM6IGV2ZW50LmR1cmF0aW9uTXMsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfTtcblxuICAgICAgLy8gVXBkYXRlIHNlc3Npb24gc3RhdGUgd2l0aCB0b2tlbiB1c2FnZVxuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gY2xpZW50LmdldFNlc3Npb25TdGF0ZShldmVudC5zZXNzaW9uSWQpO1xuICAgICAgY29uc3QgY3VycmVudFRva2VucyA9IGN1cnJlbnRTdGF0ZS50b2tlblVzYWdlIHx8IHsgaW5wdXQ6IDAsIG91dHB1dDogMCB9O1xuICAgICAgY2xpZW50LnVwZGF0ZVNlc3Npb25TdGF0ZShldmVudC5zZXNzaW9uSWQsIHtcbiAgICAgICAgdG9rZW5Vc2FnZToge1xuICAgICAgICAgIGlucHV0OiBjdXJyZW50VG9rZW5zLmlucHV0ICsgZXZlbnQudG9rZW5Vc2FnZS5pbnB1dCxcbiAgICAgICAgICBvdXRwdXQ6IGN1cnJlbnRUb2tlbnMub3V0cHV0ICsgZXZlbnQudG9rZW5Vc2FnZS5vdXRwdXQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgY2xpZW50LnN5bmNNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBzZXNzaW9uIGVuZHNcbiAgICAgKi9cbiAgICBTZXNzaW9uRW5kOiBhc3luYyAoZXZlbnQ6IFNlc3Npb25FbmRFdmVudCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gY2xpZW50LmdldFNlc3Npb25TdGF0ZShldmVudC5zZXNzaW9uSWQpO1xuXG4gICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgLi4uY3VycmVudFN0YXRlLFxuICAgICAgICBzZXNzaW9uSWQ6IGV2ZW50LnNlc3Npb25JZCxcbiAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgIGVuZFJlYXNvbjogZXZlbnQuZW5kUmVhc29uLFxuICAgICAgICBtZXNzYWdlQ291bnQ6IGV2ZW50Lm1lc3NhZ2VDb3VudCxcbiAgICAgICAgdG9vbENhbGxDb3VudDogZXZlbnQudG9vbENhbGxDb3VudCxcbiAgICAgICAgdG9rZW5Vc2FnZTogZXZlbnQudG90YWxUb2tlblVzYWdlLFxuICAgICAgICBjb3N0RXN0aW1hdGU6IGV2ZW50LmNvc3RFc3RpbWF0ZSxcbiAgICAgICAgZW5kZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgY2xpZW50LmNsZWFyU2Vzc2lvblN0YXRlKGV2ZW50LnNlc3Npb25JZCk7XG5cbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgW2NsYXVkZS1jb2RlLXN5bmNdIFNlc3Npb24gc3luY2VkOiAke2V2ZW50Lm1lc3NhZ2VDb3VudH0gbWVzc2FnZXMsICR7ZXZlbnQudG9vbENhbGxDb3VudH0gdG9vbCBjYWxsc2BcbiAgICAgICk7XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gRGVmYXVsdCBleHBvcnQgZm9yIENsYXVkZSBDb2RlIHBsdWdpbiBzeXN0ZW1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVBsdWdpbjtcbiJdfQ==
430
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxSUgsZ0NBNEJDO0FBRUQsZ0NBVUM7QUFFRCxrQ0FRQztBQXdNRCxvQ0FxS0M7QUFsaUJELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBMEh6QiwrRUFBK0U7QUFDL0UsZ0JBQWdCO0FBQ2hCLCtFQUErRTtBQUUvRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUMxRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUV6RCxTQUFnQixVQUFVO0lBQ3hCLG9DQUFvQztJQUNwQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDO0lBQ2xELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7SUFFL0MsSUFBSSxNQUFNLElBQUksTUFBTSxFQUFFLENBQUM7UUFDckIsT0FBTztZQUNMLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7WUFDckMsTUFBTSxFQUFFLE1BQU07WUFDZCxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsS0FBSyxPQUFPO1lBQ3ZELGFBQWEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixLQUFLLE9BQU87WUFDN0QsWUFBWSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEtBQUssTUFBTTtTQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUVELDJCQUEyQjtJQUMzQixJQUFJLENBQUM7UUFDSCxJQUFJLEVB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TSxFQUFFLGFBQWE7Z0JBQ3JCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDMUIsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO2dCQUNoQyxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7Z0JBQ2xDLFVBQVUsRUFBRSxLQUFLLENBQUMsZUFBZTtnQkFDakMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO2dCQUNoQyxPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDbEMsQ0FBQztZQUVGLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTFDLE9BQU8sQ0FBQyxHQUFHLENBQ1Qsc0NBQXNDLEtBQUssQ0FBQyxZQUFZLGNBQWMsS0FBSyxDQUFDLGFBQWEsYUFBYSxDQUN2RyxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsK0NBQStDO0FBQy9DLGtCQUFlLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhdWRlIENvZGUgU3luYyBQbHVnaW5cbiAqXG4gKiBTeW5jcyBDbGF1ZGUgQ29kZSBzZXNzaW9ucyB0byBPcGVuU3luYyBkYXNoYm9hcmQuXG4gKiBVc2VzIEFQSSBLZXkgYXV0aGVudGljYXRpb24gKG5vIGJyb3dzZXIgT0F1dGggcmVxdWlyZWQpLlxuICpcbiAqIEluc3RhbGw6IG5wbSBpbnN0YWxsIC1nIGNsYXVkZS1jb2RlLXN5bmNcbiAqIENvbmZpZ3VyZTogY2xhdWRlLWNvZGUtc3luYyBsb2dpblxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnIHtcbiAgY29udmV4VXJsOiBzdHJpbmc7XG4gIGFwaUtleTogc3RyaW5nO1xuICBhdXRvU3luYz86IGJvb2xlYW47XG4gIHN5bmNUb29sQ2FsbHM/OiBib29sZWFuO1xuICBzeW5jVGhpbmtpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25EYXRhIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiO1xuICB0aXRsZT86IHN0cmluZztcbiAgcHJvamVjdFBhdGg/OiBzdHJpbmc7XG4gIHByb2plY3ROYW1lPzogc3RyaW5nO1xuICBjd2Q/OiBzdHJpbmc7XG4gIGdpdEJyYW5jaD86IHN0cmluZztcbiAgZ2l0UmVwbz86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIHN0YXJ0VHlwZT86IFwibmV3XCIgfCBcInJlc3VtZVwiIHwgXCJjb250aW51ZVwiO1xuICBlbmRSZWFzb24/OiBcInVzZXJfc3RvcFwiIHwgXCJtYXhfdHVybnNcIiB8IFwiZXJyb3JcIiB8IFwiY29tcGxldGVkXCI7XG4gIHRoaW5raW5nRW5hYmxlZD86IGJvb2xlYW47XG4gIHBlcm1pc3Npb25Nb2RlPzogc3RyaW5nO1xuICBtY3BTZXJ2ZXJzPzogc3RyaW5nW107XG4gIG1lc3NhZ2VDb3VudD86IG51bWJlcjtcbiAgdG9vbENhbGxDb3VudD86IG51bWJlcjtcbiAgdG9rZW5Vc2FnZT86IHtcbiAgICBpbnB1dDogbnVtYmVyO1xuICAgIG91dHB1dDogbnVtYmVyO1xuICB9O1xuICBjb3N0RXN0aW1hdGU/OiBudW1iZXI7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgZW5kZWRBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlRGF0YSB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgc291cmNlOiBcImNsYXVkZS1jb2RlXCI7XG4gIHJvbGU6IFwidXNlclwiIHwgXCJhc3Npc3RhbnRcIiB8IFwic3lzdGVtXCI7XG4gIGNvbnRlbnQ/OiBzdHJpbmc7XG4gIHRoaW5raW5nQ29udGVudD86IHN0cmluZztcbiAgdG9vbE5hbWU/OiBzdHJpbmc7XG4gIHRvb2xBcmdzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHRvb2xSZXN1bHQ/OiBzdHJpbmc7XG4gIGR1cmF0aW9uTXM/OiBudW1iZXI7XG4gIHRva2VuQ291bnQ/OiBudW1iZXI7XG4gIHRpbWVzdGFtcD86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbFVzZURhdGEge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgdG9vbE5hbWU6IHN0cmluZztcbiAgdG9vbEFyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVzdWx0Pzogc3RyaW5nO1xuICBzdWNjZXNzPzogYm9vbGVhbjtcbiAgZHVyYXRpb25Ncz86IG51bWJlcjtcbiAgdGltZXN0YW1wPzogc3RyaW5nO1xufVxuXG4vLyBDbGF1ZGUgQ29kZSBIb29rIFR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIENsYXVkZUNvZGVIb29rcyB7XG4gIFNlc3Npb25TdGFydD86IChkYXRhOiBTZXNzaW9uU3RhcnRFdmVudCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIFVzZXJQcm9tcHRTdWJtaXQ/OiAoZGF0YTogVXNlclByb21wdEV2ZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgUG9zdFRvb2xVc2U/OiAoZGF0YTogVG9vbFVzZUV2ZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgU3RvcD86IChkYXRhOiBTdG9wRXZlbnQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBTZXNzaW9uRW5kPzogKGRhdGE6IFNlc3Npb25FbmRFdmVudCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblN0YXJ0RXZlbnQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgY3dkOiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIHN0YXJ0VHlwZTogXCJuZXdcIiB8IFwicmVzdW1lXCIgfCBcImNvbnRpbnVlXCI7XG4gIHRoaW5raW5nRW5hYmxlZD86IGJvb2xlYW47XG4gIHBlcm1pc3Npb25Nb2RlPzogc3RyaW5nO1xuICBtY3BTZXJ2ZXJzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclByb21wdEV2ZW50IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByb21wdDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb29sVXNlRXZlbnQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgdG9vbE5hbWU6IHN0cmluZztcbiAgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlc3VsdDogc3RyaW5nO1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBkdXJhdGlvbk1zOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcEV2ZW50IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHJlc3BvbnNlOiBzdHJpbmc7XG4gIHRva2VuVXNhZ2U6IHtcbiAgICBpbnB1dDogbnVtYmVyO1xuICAgIG91dHB1dDogbnVtYmVyO1xuICB9O1xuICBkdXJhdGlvbk1zOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkVuZEV2ZW50IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGVuZFJlYXNvbjogXCJ1c2VyX3N0b3BcIiB8IFwibWF4X3R1cm5zXCIgfCBcImVycm9yXCIgfCBcImNvbXBsZXRlZFwiO1xuICBtZXNzYWdlQ291bnQ6IG51bWJlcjtcbiAgdG9vbENhbGxDb3VudDogbnVtYmVyO1xuICB0b3RhbFRva2VuVXNhZ2U6IHtcbiAgICBpbnB1dDogbnVtYmVyO1xuICAgIG91dHB1dDogbnVtYmVyO1xuICB9O1xuICBjb3N0RXN0aW1hdGU6IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29uZmlndXJhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBDT05GSUdfRElSID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgXCIuY29uZmlnXCIsIFwiY2xhdWRlLWNvZGUtc3luY1wiKTtcbmNvbnN0IENPTkZJR19GSUxFID0gcGF0aC5qb2luKENPTkZJR19ESVIsIFwiY29uZmlnLmpzb25cIik7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29uZmlnKCk6IENvbmZpZyB8IG51bGwge1xuICAvLyBDaGVjayBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZmlyc3RcbiAgY29uc3QgZW52VXJsID0gcHJvY2Vzcy5lbnYuQ0xBVURFX1NZTkNfQ09OVkVYX1VSTDtcbiAgY29uc3QgZW52S2V5ID0gcHJvY2Vzcy5lbnYuQ0xBVURFX1NZTkNfQVBJX0tFWTtcblxuICBpZiAoZW52VXJsICYmIGVudktleSkge1xuICAgIHJldHVybiB7XG4gICAgICBjb252ZXhVcmw6IG5vcm1hbGl6ZUNvbnZleFVybChlbnZVcmwpLFxuICAgICAgYXBpS2V5OiBlbnZLZXksXG4gICAgICBhdXRvU3luYzogcHJvY2Vzcy5lbnYuQ0xBVURFX1NZTkNfQVVUT19TWU5DICE9PSBcImZhbHNlXCIsXG4gICAgICBzeW5jVG9vbENhbGxzOiBwcm9jZXNzLmVudi5DTEFVREVfU1lOQ19UT09MX0NBTExTICE9PSBcImZhbHNlXCIsXG4gICAgICBzeW5jVGhpbmtpbmc6IHByb2Nlc3MuZW52LkNMQVVERV9TWU5DX1RISU5LSU5HID09PSBcInRydWVcIixcbiAgICB9O1xuICB9XG5cbiAgLy8gRmFsbCBiYWNrIHRvIGNvbmZpZyBmaWxlXG4gIHRyeSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoQ09ORklHX0ZJTEUpKSB7XG4gICAgICBjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKENPTkZJR19GSUxFLCBcInV0Zi04XCIpO1xuICAgICAgY29uc3QgY29uZmlnID0gSlNPTi5wYXJzZShkYXRhKSBhcyBDb25maWc7XG4gICAgICBjb25maWcuY29udmV4VXJsID0gbm9ybWFsaXplQ29udmV4VXJsKGNvbmZpZy5jb252ZXhVcmwpO1xuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIGxvYWRpbmcgY29uZmlnOlwiLCBlcnJvcik7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVDb25maWcoY29uZmlnOiBDb25maWcpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoQ09ORklHX0RJUikpIHtcbiAgICAgIGZzLm1rZGlyU3luYyhDT05GSUdfRElSLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgZnMud3JpdGVGaWxlU3luYyhDT05GSUdfRklMRSwgSlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIHNhdmluZyBjb25maWc6XCIsIGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJDb25maWcoKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoQ09ORklHX0ZJTEUpKSB7XG4gICAgICBmcy51bmxpbmtTeW5jKENPTkZJR19GSUxFKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIGNsZWFyaW5nIGNvbmZpZzpcIiwgZXJyb3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbnZleFVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIENvbnZlcnQgLmNvbnZleC5jbG91ZCB0byAuY29udmV4LnNpdGUgZm9yIEFQSSBjYWxsc1xuICByZXR1cm4gdXJsLnJlcGxhY2UoXCIuY29udmV4LmNsb3VkXCIsIFwiLmNvbnZleC5zaXRlXCIpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTeW5jIENsaWVudFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY2xhc3MgU3luY0NsaWVudCB7XG4gIHByaXZhdGUgY29uZmlnOiBDb25maWc7XG4gIHByaXZhdGUgc2l0ZVVybDogc3RyaW5nO1xuICBwcml2YXRlIHNlc3Npb25DYWNoZTogTWFwPHN0cmluZywgUGFydGlhbDxTZXNzaW9uRGF0YT4+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgLy8gTm9ybWFsaXplIFVSTCB0byAuY29udmV4LnNpdGUgZm9yIEhUVFAgZW5kcG9pbnRzXG4gICAgLy8gU3VwcG9ydHMgYm90aCAuY29udmV4LmNsb3VkIGFuZCAuY29udmV4LnNpdGUgaW5wdXQgVVJMc1xuICAgIHRoaXMuc2l0ZVVybCA9IGNvbmZpZy5jb252ZXhVcmwucmVwbGFjZShcIi5jb252ZXguY2xvdWRcIiwgXCIuY29udmV4LnNpdGVcIik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlcXVlc3QoZW5kcG9pbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bik6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2l0ZVVybH0ke2VuZHBvaW50fWA7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmNvbmZpZy5hcGlLZXl9YCxcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSxcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFN5bmMgZmFpbGVkOiAke3Jlc3BvbnNlLnN0YXR1c30gLSAke3RleHR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgfVxuXG4gIC8vIFRyYW5zZm9ybSBzZXNzaW9uIGRhdGEgdG8gYmFja2VuZCBmb3JtYXRcbiAgcHJpdmF0ZSB0cmFuc2Zvcm1TZXNzaW9uKHNlc3Npb246IFNlc3Npb25EYXRhKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgZXh0ZXJuYWxJZDogc2Vzc2lvbi5zZXNzaW9uSWQsXG4gICAgICBzb3VyY2U6IHNlc3Npb24uc291cmNlLFxuICAgIH07XG4gICAgXG4gICAgLy8gT25seSBpbmNsdWRlIGZpZWxkcyB0aGF0IGFyZSBkZWZpbmVkXG4gICAgaWYgKHNlc3Npb24udGl0bGUgIT09IHVuZGVmaW5lZCkgcGF5bG9hZC50aXRsZSA9IHNlc3Npb24udGl0bGU7XG4gICAgaWYgKHNlc3Npb24ucHJvamVjdFBhdGggfHwgc2Vzc2lvbi5jd2QpIHBheWxvYWQucHJvamVjdFBhdGggPSBzZXNzaW9uLnByb2plY3RQYXRoIHx8IHNlc3Npb24uY3dkO1xuICAgIGlmIChzZXNzaW9uLnByb2plY3ROYW1lKSBwYXlsb2FkLnByb2plY3ROYW1lID0gc2Vzc2lvbi5wcm9qZWN0TmFtZTtcbiAgICBpZiAoc2Vzc2lvbi5tb2RlbCkgcGF5bG9hZC5tb2RlbCA9IHNlc3Npb24ubW9kZWw7XG4gICAgaWYgKHNlc3Npb24udG9rZW5Vc2FnZT8uaW5wdXQgIT09IHVuZGVmaW5lZCkgcGF5bG9hZC5wcm9tcHRUb2tlbnMgPSBzZXNzaW9uLnRva2VuVXNhZ2UuaW5wdXQ7XG4gICAgaWYgKHNlc3Npb24udG9rZW5Vc2FnZT8ub3V0cHV0ICE9PSB1bmRlZmluZWQpIHBheWxvYWQuY29tcGxldGlvblRva2VucyA9IHNlc3Npb24udG9rZW5Vc2FnZS5vdXRwdXQ7XG4gICAgaWYgKHNlc3Npb24uY29zdEVzdGltYXRlICE9PSB1bmRlZmluZWQpIHBheWxvYWQuY29zdCA9IHNlc3Npb24uY29zdEVzdGltYXRlO1xuICAgIGlmIChzZXNzaW9uLm1lc3NhZ2VDb3VudCAhPT0gdW5kZWZpbmVkKSBwYXlsb2FkLm1lc3NhZ2VDb3VudCA9IHNlc3Npb24ubWVzc2FnZUNvdW50O1xuICAgIGlmIChzZXNzaW9uLnRvb2xDYWxsQ291bnQgIT09IHVuZGVmaW5lZCkgcGF5bG9hZC50b29sQ2FsbENvdW50ID0gc2Vzc2lvbi50b29sQ2FsbENvdW50O1xuICAgIGlmIChzZXNzaW9uLmVuZFJlYXNvbikgcGF5bG9hZC5lbmRSZWFzb24gPSBzZXNzaW9uLmVuZFJlYXNvbjtcbiAgICBcbiAgICAvLyBDYWxjdWxhdGUgZHVyYXRpb24gaWYgYm90aCB0aW1lc3RhbXBzIGV4aXN0XG4gICAgaWYgKHNlc3Npb24uZW5kZWRBdCAmJiBzZXNzaW9uLnN0YXJ0ZWRBdCkge1xuICAgICAgcGF5bG9hZC5kdXJhdGlvbk1zID0gbmV3IERhdGUoc2Vzc2lvbi5lbmRlZEF0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShzZXNzaW9uLnN0YXJ0ZWRBdCkuZ2V0VGltZSgpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gcGF5bG9hZDtcbiAgfVxuXG4gIC8vIFRyYW5zZm9ybSBtZXNzYWdlIGRhdGEgdG8gYmFja2VuZCBmb3JtYXRcbiAgcHJpdmF0ZSB0cmFuc2Zvcm1NZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2VEYXRhKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgc2Vzc2lvbkV4dGVybmFsSWQ6IG1lc3NhZ2Uuc2Vzc2lvbklkLFxuICAgICAgZXh0ZXJuYWxJZDogbWVzc2FnZS5tZXNzYWdlSWQsXG4gICAgICByb2xlOiBtZXNzYWdlLnJvbGUsXG4gICAgICBzb3VyY2U6IG1lc3NhZ2Uuc291cmNlLFxuICAgIH07XG4gICAgXG4gICAgLy8gU2V0IHRleHRDb250ZW50IGZvciB1c2VyIHByb21wdHMgYW5kIGFzc2lzdGFudCByZXNwb25zZXNcbiAgICBpZiAobWVzc2FnZS5jb250ZW50KSB7XG4gICAgICBwYXlsb2FkLnRleHRDb250ZW50ID0gbWVzc2FnZS5jb250ZW50O1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZS50b29sUmVzdWx0ICYmICFtZXNzYWdlLnRvb2xOYW1lKSB7XG4gICAgICAvLyBPbmx5IHVzZSB0b29sUmVzdWx0IGFzIHRleHRDb250ZW50IGlmIG5vIHRvb2xOYW1lIChmYWxsYmFjaylcbiAgICAgIHBheWxvYWQudGV4dENvbnRlbnQgPSBtZXNzYWdlLnRvb2xSZXN1bHQ7XG4gICAgfVxuICAgIFxuICAgIC8vIEluY2x1ZGUgZHVyYXRpb24gaWYgYXZhaWxhYmxlXG4gICAgaWYgKG1lc3NhZ2UuZHVyYXRpb25NcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXlsb2FkLmR1cmF0aW9uTXMgPSBtZXNzYWdlLmR1cmF0aW9uTXM7XG4gICAgfVxuICAgIFxuICAgIC8vIEluY2x1ZGUgdG9rZW4gY291bnQgaWYgYXZhaWxhYmxlXG4gICAgaWYgKG1lc3NhZ2UudG9rZW5Db3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXlsb2FkLnByb21wdFRva2VucyA9IG1lc3NhZ2UudG9rZW5Db3VudDtcbiAgICB9XG4gICAgXG4gICAgLy8gSW5jbHVkZSBtb2RlbCBpZiBhdmFpbGFibGVcbiAgICBpZiAobWVzc2FnZS5tb2RlbCkge1xuICAgICAgcGF5bG9hZC5tb2RlbCA9IG1lc3NhZ2UubW9kZWw7XG4gICAgfVxuICAgIFxuICAgIC8vIFRvb2wgdXNlIGluZm8gc3RvcmVkIGluIHBhcnRzXG4gICAgaWYgKG1lc3NhZ2UudG9vbE5hbWUpIHtcbiAgICAgIHBheWxvYWQucGFydHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRvb2wtY2FsbFwiLFxuICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgIHRvb2xOYW1lOiBtZXNzYWdlLnRvb2xOYW1lLFxuICAgICAgICAgICAgYXJnczogbWVzc2FnZS50b29sQXJncyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIC8vIEFkZCB0b29sIHJlc3VsdCBhcyBzZXBhcmF0ZSBwYXJ0XG4gICAgICBpZiAobWVzc2FnZS50b29sUmVzdWx0KSB7XG4gICAgICAgIChwYXlsb2FkLnBhcnRzIGFzIEFycmF5PHsgdHlwZTogc3RyaW5nOyBjb250ZW50OiB1bmtub3duIH0+KS5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBcInRvb2wtcmVzdWx0XCIsXG4gICAgICAgICAgY29udGVudDogbWVzc2FnZS50b29sUmVzdWx0LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHBheWxvYWQ7XG4gIH1cblxuICBhc3luYyBzeW5jU2Vzc2lvbihzZXNzaW9uOiBTZXNzaW9uRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy50cmFuc2Zvcm1TZXNzaW9uKHNlc3Npb24pO1xuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KFwiL3N5bmMvc2Vzc2lvblwiLCBwYXlsb2FkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBzeW5jIHNlc3Npb246XCIsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN5bmNNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2VEYXRhKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLnRyYW5zZm9ybU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoXCIvc3luYy9tZXNzYWdlXCIsIHBheWxvYWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHN5bmMgbWVzc2FnZTpcIiwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3luY0JhdGNoKFxuICAgIHNlc3Npb25zOiBTZXNzaW9uRGF0YVtdLFxuICAgIG1lc3NhZ2VzOiBNZXNzYWdlRGF0YVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZFNlc3Npb25zID0gc2Vzc2lvbnMubWFwKChzKSA9PiB0aGlzLnRyYW5zZm9ybVNlc3Npb24ocykpO1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWRNZXNzYWdlcyA9IG1lc3NhZ2VzLm1hcCgobSkgPT4gdGhpcy50cmFuc2Zvcm1NZXNzYWdlKG0pKTtcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdChcIi9zeW5jL2JhdGNoXCIsIHtcbiAgICAgICAgc2Vzc2lvbnM6IHRyYW5zZm9ybWVkU2Vzc2lvbnMsXG4gICAgICAgIG1lc3NhZ2VzOiB0cmFuc2Zvcm1lZE1lc3NhZ2VzLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gc3luYyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdGVzdENvbm5lY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2l0ZVVybH0vaGVhbHRoYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5vaztcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXNzaW9uIHN0YXRlIG1hbmFnZW1lbnRcbiAgZ2V0U2Vzc2lvblN0YXRlKHNlc3Npb25JZDogc3RyaW5nKTogUGFydGlhbDxTZXNzaW9uRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbklkKSB8fCB7fTtcbiAgfVxuXG4gIHVwZGF0ZVNlc3Npb25TdGF0ZShcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPFNlc3Npb25EYXRhPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25JZCkgfHwge307XG4gICAgdGhpcy5zZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25JZCwgeyAuLi5jdXJyZW50LCAuLi51cGRhdGVzIH0pO1xuICB9XG5cbiAgY2xlYXJTZXNzaW9uU3RhdGUoc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlc3Npb25DYWNoZS5kZWxldGUoc2Vzc2lvbklkKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQbHVnaW4gRXhwb3J0XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ2xhdWRlIENvZGUgUGx1Z2luIEVudHJ5IFBvaW50XG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgQ2xhdWRlIENvZGUgdG8gcmVnaXN0ZXIgdGhlIHBsdWdpbi5cbiAqIEl0IHJldHVybnMgaG9vayBoYW5kbGVycyB0aGF0IGZpcmUgYXQga2V5IHBvaW50cyBpbiB0aGUgc2Vzc2lvbiBsaWZlY3ljbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQbHVnaW4oKTogQ2xhdWRlQ29kZUhvb2tzIHwgbnVsbCB7XG4gIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICBpZiAoIWNvbmZpZykge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgXCJbY2xhdWRlLWNvZGUtc3luY10gTm90IGNvbmZpZ3VyZWQuIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBsb2dpbicgdG8gc2V0IHVwLlwiXG4gICAgKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb25maWcuYXV0b1N5bmMgPT09IGZhbHNlKSB7XG4gICAgY29uc29sZS5sb2coXCJbY2xhdWRlLWNvZGUtc3luY10gQXV0by1zeW5jIGRpc2FibGVkIGluIGNvbmZpZy5cIik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICBsZXQgbWVzc2FnZUNvdW50ZXIgPSAwO1xuICBsZXQgdG9vbENhbGxDb3VudGVyID0gMDtcblxuICBjb25zb2xlLmxvZyhcIltjbGF1ZGUtY29kZS1zeW5jXSBQbHVnaW4gbG9hZGVkLiBTZXNzaW9ucyB3aWxsIHN5bmMgdG8gT3BlblN5bmMuXCIpO1xuXG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gYSBuZXcgc2Vzc2lvbiBzdGFydHNcbiAgICAgKi9cbiAgICBTZXNzaW9uU3RhcnQ6IGFzeW5jIChldmVudDogU2Vzc2lvblN0YXJ0RXZlbnQpID0+IHtcbiAgICAgIG1lc3NhZ2VDb3VudGVyID0gMDtcbiAgICAgIHRvb2xDYWxsQ291bnRlciA9IDA7XG5cbiAgICAgIGNvbnN0IHNlc3Npb246IFNlc3Npb25EYXRhID0ge1xuICAgICAgICBzZXNzaW9uSWQ6IGV2ZW50LnNlc3Npb25JZCxcbiAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgIGN3ZDogZXZlbnQuY3dkLFxuICAgICAgICBtb2RlbDogZXZlbnQubW9kZWwsXG4gICAgICAgIHN0YXJ0VHlwZTogZXZlbnQuc3RhcnRUeXBlLFxuICAgICAgICB0aGlua2luZ0VuYWJsZWQ6IGV2ZW50LnRoaW5raW5nRW5hYmxlZCxcbiAgICAgICAgcGVybWlzc2lvbk1vZGU6IGV2ZW50LnBlcm1pc3Npb25Nb2RlLFxuICAgICAgICBtY3BTZXJ2ZXJzOiBldmVudC5tY3BTZXJ2ZXJzLFxuICAgICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG5cbiAgICAgIC8vIEV4dHJhY3QgcHJvamVjdCBpbmZvIGZyb20gY3dkXG4gICAgICBpZiAoZXZlbnQuY3dkKSB7XG4gICAgICAgIHNlc3Npb24ucHJvamVjdFBhdGggPSBldmVudC5jd2Q7XG4gICAgICAgIHNlc3Npb24ucHJvamVjdE5hbWUgPSBwYXRoLmJhc2VuYW1lKGV2ZW50LmN3ZCk7XG5cbiAgICAgICAgLy8gVHJ5IHRvIGdldCBnaXQgaW5mb1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGdpdERpciA9IHBhdGguam9pbihldmVudC5jd2QsIFwiLmdpdFwiKTtcbiAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhnaXREaXIpKSB7XG4gICAgICAgICAgICBjb25zdCBoZWFkRmlsZSA9IHBhdGguam9pbihnaXREaXIsIFwiSEVBRFwiKTtcbiAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGhlYWRGaWxlKSkge1xuICAgICAgICAgICAgICBjb25zdCBoZWFkID0gZnMucmVhZEZpbGVTeW5jKGhlYWRGaWxlLCBcInV0Zi04XCIpLnRyaW0oKTtcbiAgICAgICAgICAgICAgaWYgKGhlYWQuc3RhcnRzV2l0aChcInJlZjogcmVmcy9oZWFkcy9cIikpIHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uLmdpdEJyYW5jaCA9IGhlYWQucmVwbGFjZShcInJlZjogcmVmcy9oZWFkcy9cIiwgXCJcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIElnbm9yZSBnaXQgZXJyb3JzXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2xpZW50LnVwZGF0ZVNlc3Npb25TdGF0ZShldmVudC5zZXNzaW9uSWQsIHNlc3Npb24pO1xuICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHNlc3Npb24pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB1c2VyIHN1Ym1pdHMgYSBwcm9tcHRcbiAgICAgKi9cbiAgICBVc2VyUHJvbXB0U3VibWl0OiBhc3luYyAoZXZlbnQ6IFVzZXJQcm9tcHRFdmVudCkgPT4ge1xuICAgICAgbWVzc2FnZUNvdW50ZXIrKztcblxuICAgICAgY29uc3QgbWVzc2FnZTogTWVzc2FnZURhdGEgPSB7XG4gICAgICAgIHNlc3Npb25JZDogZXZlbnQuc2Vzc2lvbklkLFxuICAgICAgICBtZXNzYWdlSWQ6IGAke2V2ZW50LnNlc3Npb25JZH0tbXNnLSR7bWVzc2FnZUNvdW50ZXJ9YCxcbiAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgIHJvbGU6IFwidXNlclwiLFxuICAgICAgICBjb250ZW50OiBldmVudC5wcm9tcHQsXG4gICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGFmdGVyIGVhY2ggdG9vbCB1c2VcbiAgICAgKi9cbiAgICBQb3N0VG9vbFVzZTogYXN5bmMgKGV2ZW50OiBUb29sVXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghY29uZmlnLnN5bmNUb29sQ2FsbHMpIHJldHVybjtcblxuICAgICAgdG9vbENhbGxDb3VudGVyKys7XG4gICAgICBtZXNzYWdlQ291bnRlcisrO1xuXG4gICAgICBjb25zdCBtZXNzYWdlOiBNZXNzYWdlRGF0YSA9IHtcbiAgICAgICAgc2Vzc2lvbklkOiBldmVudC5zZXNzaW9uSWQsXG4gICAgICAgIG1lc3NhZ2VJZDogYCR7ZXZlbnQuc2Vzc2lvbklkfS10b29sLSR7dG9vbENhbGxDb3VudGVyfWAsXG4gICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICB0b29sTmFtZTogZXZlbnQudG9vbE5hbWUsXG4gICAgICAgIHRvb2xBcmdzOiBldmVudC5hcmdzLFxuICAgICAgICB0b29sUmVzdWx0OiBldmVudC5yZXN1bHQsXG4gICAgICAgIGR1cmF0aW9uTXM6IGV2ZW50LmR1cmF0aW9uTXMsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgY2xpZW50LnN5bmNNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBDbGF1ZGUgc3RvcHMgcmVzcG9uZGluZ1xuICAgICAqL1xuICAgIFN0b3A6IGFzeW5jIChldmVudDogU3RvcEV2ZW50KSA9PiB7XG4gICAgICBtZXNzYWdlQ291bnRlcisrO1xuXG4gICAgICBjb25zdCBtZXNzYWdlOiBNZXNzYWdlRGF0YSA9IHtcbiAgICAgICAgc2Vzc2lvbklkOiBldmVudC5zZXNzaW9uSWQsXG4gICAgICAgIG1lc3NhZ2VJZDogYCR7ZXZlbnQuc2Vzc2lvbklkfS1tc2ctJHttZXNzYWdlQ291bnRlcn1gLFxuICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgY29udGVudDogZXZlbnQucmVzcG9uc2UsXG4gICAgICAgIHRva2VuQ291bnQ6IGV2ZW50LnRva2VuVXNhZ2UuaW5wdXQgKyBldmVudC50b2tlblVzYWdlLm91dHB1dCxcbiAgICAgICAgZHVyYXRpb25NczogZXZlbnQuZHVyYXRpb25NcyxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuXG4gICAgICAvLyBVcGRhdGUgc2Vzc2lvbiBzdGF0ZSB3aXRoIHRva2VuIHVzYWdlXG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBjbGllbnQuZ2V0U2Vzc2lvblN0YXRlKGV2ZW50LnNlc3Npb25JZCk7XG4gICAgICBjb25zdCBjdXJyZW50VG9rZW5zID0gY3VycmVudFN0YXRlLnRva2VuVXNhZ2UgfHwgeyBpbnB1dDogMCwgb3V0cHV0OiAwIH07XG4gICAgICBjbGllbnQudXBkYXRlU2Vzc2lvblN0YXRlKGV2ZW50LnNlc3Npb25JZCwge1xuICAgICAgICB0b2tlblVzYWdlOiB7XG4gICAgICAgICAgaW5wdXQ6IGN1cnJlbnRUb2tlbnMuaW5wdXQgKyBldmVudC50b2tlblVzYWdlLmlucHV0LFxuICAgICAgICAgIG91dHB1dDogY3VycmVudFRva2Vucy5vdXRwdXQgKyBldmVudC50b2tlblVzYWdlLm91dHB1dCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBjbGllbnQuc3luY01lc3NhZ2UobWVzc2FnZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHNlc3Npb24gZW5kc1xuICAgICAqL1xuICAgIFNlc3Npb25FbmQ6IGFzeW5jIChldmVudDogU2Vzc2lvbkVuZEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBjbGllbnQuZ2V0U2Vzc2lvblN0YXRlKGV2ZW50LnNlc3Npb25JZCk7XG5cbiAgICAgIGNvbnN0IHNlc3Npb246IFNlc3Npb25EYXRhID0ge1xuICAgICAgICAuLi5jdXJyZW50U3RhdGUsXG4gICAgICAgIHNlc3Npb25JZDogZXZlbnQuc2Vzc2lvbklkLFxuICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgZW5kUmVhc29uOiBldmVudC5lbmRSZWFzb24sXG4gICAgICAgIG1lc3NhZ2VDb3VudDogZXZlbnQubWVzc2FnZUNvdW50LFxuICAgICAgICB0b29sQ2FsbENvdW50OiBldmVudC50b29sQ2FsbENvdW50LFxuICAgICAgICB0b2tlblVzYWdlOiBldmVudC50b3RhbFRva2VuVXNhZ2UsXG4gICAgICAgIGNvc3RFc3RpbWF0ZTogZXZlbnQuY29zdEVzdGltYXRlLFxuICAgICAgICBlbmRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBjbGllbnQuc3luY1Nlc3Npb24oc2Vzc2lvbik7XG4gICAgICBjbGllbnQuY2xlYXJTZXNzaW9uU3RhdGUoZXZlbnQuc2Vzc2lvbklkKTtcblxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBbY2xhdWRlLWNvZGUtc3luY10gU2Vzc2lvbiBzeW5jZWQ6ICR7ZXZlbnQubWVzc2FnZUNvdW50fSBtZXNzYWdlcywgJHtldmVudC50b29sQ2FsbENvdW50fSB0b29sIGNhbGxzYFxuICAgICAgKTtcbiAgICB9LFxuICB9O1xufVxuXG4vLyBEZWZhdWx0IGV4cG9ydCBmb3IgQ2xhdWRlIENvZGUgcGx1Z2luIHN5c3RlbVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlUGx1Z2luO1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-code-sync",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
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",