genassist-chat-react 1.0.8 → 1.0.10

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.
@@ -57,7 +57,7 @@ var ChatService = /** @class */ (function () {
57
57
  this.takeoverHandler = null;
58
58
  this.finalizedHandler = null;
59
59
  this.connectionStateHandler = null;
60
- this.storageKey = "genassist_conversation";
60
+ this.storageKeyBase = "genassist_conversation";
61
61
  this.possibleQueries = [];
62
62
  this.welcomeData = {};
63
63
  this.thinkingConfig = { phrases: [], delayMs: 1000 };
@@ -66,9 +66,13 @@ var ChatService = /** @class */ (function () {
66
66
  this.apiKey = apiKey;
67
67
  this.metadata = metadata;
68
68
  this.tenant = tenant;
69
- // Try to load a saved conversation ID from localStorage
69
+ // Try to load a saved conversation for this apiKey from localStorage
70
70
  this.loadSavedConversation();
71
71
  }
72
+ ChatService.prototype.getStorageKey = function () {
73
+ // Pointer to current conversation metadata for this apiKey
74
+ return "".concat(this.storageKeyBase, ":").concat(this.apiKey);
75
+ };
72
76
  ChatService.prototype.setMessageHandler = function (handler) {
73
77
  this.messageHandler = handler;
74
78
  };
@@ -95,7 +99,11 @@ var ChatService = /** @class */ (function () {
95
99
  */
96
100
  ChatService.prototype.loadSavedConversation = function () {
97
101
  try {
98
- var savedConversation = localStorage.getItem(this.storageKey);
102
+ var savedConversation = localStorage.getItem(this.getStorageKey());
103
+ // Backward-compat: check old unscoped key if scoped one missing
104
+ if (!savedConversation) {
105
+ savedConversation = localStorage.getItem(this.storageKeyBase);
106
+ }
99
107
  if (savedConversation) {
100
108
  var _a = JSON.parse(savedConversation), conversationId = _a.conversationId, createTime = _a.createTime, isFinalized = _a.isFinalized;
101
109
  this.conversationId = conversationId;
@@ -119,7 +127,7 @@ var ChatService = /** @class */ (function () {
119
127
  createTime: this.conversationCreateTime,
120
128
  isFinalized: this.isFinalized,
121
129
  };
122
- localStorage.setItem(this.storageKey, JSON.stringify(conversationData));
130
+ localStorage.setItem(this.getStorageKey(), JSON.stringify(conversationData));
123
131
  console.log("Saved conversation:", this.conversationId);
124
132
  }
125
133
  }
@@ -153,7 +161,7 @@ var ChatService = /** @class */ (function () {
153
161
  }
154
162
  // Remove from local storage
155
163
  try {
156
- localStorage.removeItem(this.storageKey);
164
+ localStorage.removeItem(this.getStorageKey());
157
165
  }
158
166
  catch (error) {
159
167
  console.error("Error removing conversation from storage:", error);
@@ -519,4 +527,4 @@ var ChatService = /** @class */ (function () {
519
527
  return ChatService;
520
528
  }());
521
529
  export { ChatService };
522
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvY2hhdFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUNMLFlBQVksSUFBSSxTQUFTLEdBRzFCLE1BQU0sV0FBVyxDQUFDO0FBU25CO0lBcUJFLHFCQUNFLE9BQWUsRUFDZixNQUFjLEVBQ2QsUUFBOEIsRUFDOUIsTUFBZTtRQXJCVCxtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFDckMsMkJBQXNCLEdBQWtCLElBQUksQ0FBQyxDQUFDLGdDQUFnQztRQUM5RSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixjQUFTLEdBQXFCLElBQUksQ0FBQztRQUNuQyxtQkFBYyxHQUE0QyxJQUFJLENBQUM7UUFDL0Qsb0JBQWUsR0FBd0IsSUFBSSxDQUFDO1FBQzVDLHFCQUFnQixHQUF3QixJQUFJLENBQUM7UUFDN0MsMkJBQXNCLEdBRW5CLElBQUksQ0FBQztRQUNSLGVBQVUsR0FBRyx3QkFBd0IsQ0FBQztRQUN0QyxvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQUMvQixnQkFBVyxHQUFxQixFQUFFLENBQUM7UUFDbkMsbUJBQWMsR0FBd0IsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNyRSxxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDLENBQUMscUJBQXFCO1FBU25FLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxNQUFNLEdB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WUFDakMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUVELDZCQUNLLE9BQU8sS0FDVixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQzVELFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsSUFDeEQ7SUFDSixDQUFDO0lBQ0gsa0JBQUM7QUFBRCxDQUFDLEFBN2hCRCxJQTZoQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQge1xuICB3M2N3ZWJzb2NrZXQgYXMgV2ViU29ja2V0LFxuICBJTWVzc2FnZUV2ZW50LFxuICBJQ2xvc2VFdmVudCxcbn0gZnJvbSBcIndlYnNvY2tldFwiO1xuaW1wb3J0IHtcbiAgQ2hhdE1lc3NhZ2UsXG4gIFN0YXJ0Q29udmVyc2F0aW9uUmVzcG9uc2UsXG4gIEF0dGFjaG1lbnQsXG4gIEFnZW50VGhpbmtpbmdDb25maWcsXG4gIEFnZW50V2VsY29tZURhdGEsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuXG5leHBvcnQgY2xhc3MgQ2hhdFNlcnZpY2Uge1xuICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSBhcGlLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBjb252ZXJzYXRpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY29udmVyc2F0aW9uQ3JlYXRlVGltZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7IC8vIFRyYWNrIGNvbnZlcnNhdGlvbiBzdGFydCB0aW1lXG4gIHByaXZhdGUgaXNGaW5hbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSB3ZWJTb2NrZXQ6IFdlYlNvY2tldCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1lc3NhZ2VIYW5kbGVyOiAoKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHRha2VvdmVySGFuZGxlcjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZmluYWxpemVkSGFuZGxlcjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY29ubmVjdGlvblN0YXRlSGFuZGxlcjpcbiAgICB8ICgoc3RhdGU6IFwiY29ubmVjdGluZ1wiIHwgXCJjb25uZWN0ZWRcIiB8IFwiZGlzY29ubmVjdGVkXCIpID0+IHZvaWQpXG4gICAgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdG9yYWdlS2V5ID0gXCJnZW5hc3Npc3RfY29udmVyc2F0aW9uXCI7XG4gIHByaXZhdGUgcG9zc2libGVRdWVyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHdlbGNvbWVEYXRhOiBBZ2VudFdlbGNvbWVEYXRhID0ge307XG4gIHByaXZhdGUgdGhpbmtpbmdDb25maWc6IEFnZW50VGhpbmtpbmdDb25maWcgPSB7IHBocmFzZXM6IFtdLCBkZWxheU1zOiAxMDAwIH07XG4gIHByaXZhdGUgd2VsY29tZU9iamVjdFVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIHRvIHJldm9rZSBvbiByZXNldFxuICBwcml2YXRlIHRlbmFudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICBhcGlLZXk6IHN0cmluZyxcbiAgICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgdGVuYW50Pzogc3RyaW5nXG4gICkge1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwuZW5kc1dpdGgoXCIvXCIpID8gYmFzZVVybC5zbGljZSgwLCAtMSkgOiBiYXNlVXJsO1xuICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICB0aGlzLnRlbmFudCA9IHRlbmFudDtcbiAgICAvLyBUcnkgdG8gbG9hZCBhIHNhdmVkIGNvbnZlcnNhdGlvbiBJRCBmcm9tIGxvY2FsU3RvcmFnZVxuICAgIHRoaXMubG9hZFNhdmVkQ29udmVyc2F0aW9uKCk7XG4gIH1cblxuICBzZXRNZXNzYWdlSGFuZGxlcihoYW5kbGVyOiAobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHZvaWQpIHtcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNldFRha2VvdmVySGFuZGxlcihoYW5kbGVyOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy50YWtlb3ZlckhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgc2V0RmluYWxpemVkSGFuZGxlcihoYW5kbGVyOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5maW5hbGl6ZWRIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNldENvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoXG4gICAgaGFuZGxlcjogKHN0YXRlOiBcImNvbm5lY3RpbmdcIiB8IFwiY29ubmVjdGVkXCIgfCBcImRpc2Nvbm5lY3RlZFwiKSA9PiB2b2lkXG4gICkge1xuICAgIHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXRQb3NzaWJsZVF1ZXJpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnBvc3NpYmxlUXVlcmllcztcbiAgfVxuXG4gIGdldFdlbGNvbWVEYXRhKCk6IEFnZW50V2VsY29tZURhdGEge1xuICAgIHJldHVybiB0aGlzLndlbGNvbWVEYXRhO1xuICB9XG5cbiAgZ2V0VGhpbmtpbmdDb25maWcoKTogQWdlbnRUaGlua2luZ0NvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMudGhpbmtpbmdDb25maWc7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBhIHNhdmVkIGNvbnZlcnNhdGlvbiBJRCBmcm9tIGxvY2FsU3RvcmFnZVxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkU2F2ZWRDb252ZXJzYXRpb24oKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhdmVkQ29udmVyc2F0aW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KTtcbiAgICAgIGlmIChzYXZlZENvbnZlcnNhdGlvbikge1xuICAgICAgICBjb25zdCB7IGNvbnZlcnNhdGlvbklkLCBjcmVhdGVUaW1lLCBpc0ZpbmFsaXplZCB9ID1cbiAgICAgICAgICBKU09OLnBhcnNlKHNhdmVkQ29udmVyc2F0aW9uKTtcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IGNvbnZlcnNhdGlvbklkO1xuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgPSBjcmVhdGVUaW1lO1xuICAgICAgICB0aGlzLmlzRmluYWxpemVkID0gaXNGaW5hbGl6ZWQgfHwgZmFsc2U7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIFwiTG9hZGVkIHNhdmVkIGNvbnZlcnNhdGlvbjpcIixcbiAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgIFwiRmluYWxpemVkOlwiLFxuICAgICAgICAgIHRoaXMuaXNGaW5hbGl6ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGxvYWRpbmcgc2F2ZWQgY29udmVyc2F0aW9uOlwiLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIElEIHRvIGxvY2FsU3RvcmFnZVxuICAgKi9cbiAgcHJpdmF0ZSBzYXZlQ29udmVyc2F0aW9uKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5jb252ZXJzYXRpb25JZCAmJiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUpIHtcbiAgICAgICAgY29uc3QgY29udmVyc2F0aW9uRGF0YSA9IHtcbiAgICAgICAgICBjb252ZXJzYXRpb25JZDogdGhpcy5jb252ZXJzYXRpb25JZCxcbiAgICAgICAgICBjcmVhdGVUaW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsXG4gICAgICAgICAgaXNGaW5hbGl6ZWQ6IHRoaXMuaXNGaW5hbGl6ZWQsXG4gICAgICAgIH07XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkoY29udmVyc2F0aW9uRGF0YSkpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNhdmVkIGNvbnZlcnNhdGlvbjpcIiwgdGhpcy5jb252ZXJzYXRpb25JZCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzYXZpbmcgY29udmVyc2F0aW9uOlwiLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBieSBjbGVhcmluZyB0aGUgSUQgYW5kIHdlYnNvY2tldFxuICAgKi9cbiAgcmVzZXRDb252ZXJzYXRpb24oKTogdm9pZCB7XG4gICAgLy8gQ2xvc2UgdGhlIGN1cnJlbnQgd2Vic29ja2V0IGNvbm5lY3Rpb24gaWYgaXQgZXhpc3RzXG4gICAgaWYgKHRoaXMud2ViU29ja2V0KSB7XG4gICAgICB0aGlzLndlYlNvY2tldC5jbG9zZSgpO1xuICAgICAgdGhpcy53ZWJTb2NrZXQgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIENsZWFyIHRoZSBjb252ZXJzYXRpb24gSURcbiAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gbnVsbDtcbiAgICB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgPSBudWxsO1xuICAgIHRoaXMuaXNGaW5hbGl6ZWQgPSBmYWxzZTtcblxuICAgIC8vIENsZWFyIHBvc3NpYmxlIHF1ZXJpZXNcbiAgICB0aGlzLnBvc3NpYmxlUXVlcmllcyA9IFtdO1xuICAgIHRoaXMud2VsY29tZURhdGEgPSB7fTtcbiAgICB0aGlzLnRoaW5raW5nQ29uZmlnID0geyBwaHJhc2VzOiBbXSwgZGVsYXlNczogMTAwMCB9O1xuICAgIGlmICh0aGlzLndlbGNvbWVPYmplY3RVcmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodGhpcy53ZWxjb21lT2JqZWN0VXJsKTtcbiAgICAgIH0gY2F0Y2gge31cbiAgICAgIHRoaXMud2VsY29tZU9iamVjdFVybCA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGZyb20gbG9jYWwgc3RvcmFnZVxuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnN0b3JhZ2VLZXkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVtb3ZpbmcgY29udmVyc2F0aW9uIGZyb20gc3RvcmFnZTpcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGVyZSdzIGEgY3VycmVudCBjb252ZXJzYXRpb25cbiAgICovXG4gIGhhc0FjdGl2ZUNvbnZlcnNhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbnZlcnNhdGlvbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBjb252ZXJzYXRpb24gSURcbiAgICovXG4gIGdldENvbnZlcnNhdGlvbklkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnNhdGlvbklkO1xuICB9XG5cbiAgaXNDb252ZXJzYXRpb25GaW5hbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNGaW5hbGl6ZWQ7XG4gIH1cblxuICBhc3luYyBzdGFydENvbnZlcnNhdGlvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgICBtZXNzYWdlczogW10sXG4gICAgICAgIHJlY29yZGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGRhdGFfc291cmNlX2lkOiBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0YWRhdGEpIHtcbiAgICAgICAgcmVxdWVzdEJvZHkubWV0YWRhdGEgPSB0aGlzLm1ldGFkYXRhO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3Q8U3RhcnRDb252ZXJzYXRpb25SZXNwb25zZT4oXG4gICAgICAgIGAke3RoaXMuYmFzZVVybH0vYXBpL2NvbnZlcnNhdGlvbnMvaW4tcHJvZ3Jlc3Mvc3RhcnRgLFxuICAgICAgICByZXF1ZXN0Qm9keSxcbiAgICAgICAge1xuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIFwieC1hcGkta2V5XCI6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAuLi4odGhpcy50ZW5hbnQgPyB7IFwiWC1UZW5hbnQtSWRcIjogdGhpcy50ZW5hbnQgfSA6IHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gcmVzcG9uc2UuZGF0YS5jb252ZXJzYXRpb25faWQ7XG4gICAgICAvLyBTdG9yZSBjb252ZXJzYXRpb24gY3JlYXRlIHRpbWUgKHVzZSBmcm9tIHJlc3BvbnNlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGN1cnJlbnQgdGltZSlcbiAgICAgIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSA9IHJlc3BvbnNlLmRhdGEuY3JlYXRlX3RpbWVcbiAgICAgICAgPyByZXNwb25zZS5kYXRhLmNyZWF0ZV90aW1lIC8gMTAwMFxuICAgICAgICA6IERhdGUubm93KCkgLyAxMDAwO1xuICAgICAgdGhpcy5pc0ZpbmFsaXplZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zYXZlQ29udmVyc2F0aW9uKCk7XG4gICAgICB0aGlzLmNvbm5lY3RXZWJTb2NrZXQoKTtcblxuICAgICAgLy8gU3RvcmUgcG9zc2libGUgcXVlcmllcyBpZiBhdmFpbGFibGVcbiAgICAgIGlmIChcbiAgICAgICAgcmVzcG9uc2UuZGF0YS5hZ2VudF9wb3NzaWJsZV9xdWVyaWVzICYmXG4gICAgICAgIHJlc3BvbnNlLmRhdGEuYWdlbnRfcG9zc2libGVfcXVlcmllcy5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5wb3NzaWJsZVF1ZXJpZXMgPSByZXNwb25zZS5kYXRhLmFnZW50X3Bvc3NpYmxlX3F1ZXJpZXM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFueURhdGE6IGFueSA9IHJlc3BvbnNlLmRhdGEgYXMgYW55O1xuICAgICAgY29uc3QgYWdlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gYW55RGF0YS5hZ2VudF9pZDtcbiAgICAgIGNvbnN0IHdlbGNvbWVUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gYW55RGF0YS5hZ2VudF93ZWxjb21lX3RpdGxlO1xuICAgICAgY29uc3Qgd2VsY29tZUltYWdlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgICBhbnlEYXRhLmFnZW50X3dlbGNvbWVfaW1hZ2VfdXJsO1xuICAgICAgY29uc3QgdGhpbmtpbmdQaHJhc2VzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9XG4gICAgICAgIGFueURhdGEuYWdlbnRfdGhpbmtpbmdfcGhyYXNlcztcbiAgICAgIGNvbnN0IHRoaW5raW5nRGVsYXlTZWM6IG51bWJlciB8IHVuZGVmaW5lZCA9XG4gICAgICAgIGFueURhdGEuYWdlbnRfdGhpbmtpbmdfcGhyYXNlX2RlbGF5O1xuXG4gICAgICB0aGlzLndlbGNvbWVEYXRhID0ge1xuICAgICAgICB0aXRsZTogd2VsY29tZVRpdGxlIHx8IG51bGwsXG4gICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgIGltYWdlVXJsOiB3ZWxjb21lSW1hZ2VVcmwgfHwgbnVsbCxcbiAgICAgICAgcG9zc2libGVRdWVyaWVzOiB0aGlzLnBvc3NpYmxlUXVlcmllcyxcbiAgICAgIH07XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaW5raW5nUGhyYXNlcykgJiYgdGhpbmtpbmdQaHJhc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy50aGlua2luZ0NvbmZpZy5waHJhc2VzID0gdGhpbmtpbmdQaHJhc2VzO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB0aGlua2luZ0RlbGF5U2VjID09PSBcIm51bWJlclwiICYmIHRoaW5raW5nRGVsYXlTZWMgPj0gMCkge1xuICAgICAgICB0aGlzLnRoaW5raW5nQ29uZmlnLmRlbGF5TXMgPSBNYXRoLm1heChcbiAgICAgICAgICAyNTAsXG4gICAgICAgICAgTWF0aC5yb3VuZCh0aGlua2luZ0RlbGF5U2VjICogMTAwMClcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLndlbGNvbWVEYXRhLmltYWdlVXJsICYmIGFnZW50SWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBpbWFnZVJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS9hcGkvZ2VuYWdlbnQvYWdlbnRzL2NvbmZpZ3MvJHthZ2VudElkfS93ZWxjb21lLWltYWdlYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIFwieC1hcGkta2V5XCI6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgIC4uLih0aGlzLnRlbmFudCA/IHsgXCJYLVRlbmFudC1JZFwiOiB0aGlzLnRlbmFudCB9IDoge30pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoaW1hZ2VSZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICB0aGlzLndlbGNvbWVPYmplY3RVcmwgPSBibG9iVXJsO1xuICAgICAgICAgIHRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwgPSBibG9iVXJsO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIk5vIHdlbGNvbWUgaW1hZ2UgYXZhaWxhYmxlIG9yIGZhaWxlZCB0byBsb2FkLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzIGFnZW50IHdlbGNvbWUgbWVzc2FnZSBpZiBhdmFpbGFibGVcbiAgICAgIGlmIChyZXNwb25zZS5kYXRhLmFnZW50X3dlbGNvbWVfbWVzc2FnZSAmJiB0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCkgLyAxMDAwO1xuICAgICAgICBjb25zdCB3ZWxjb21lTWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgICAgICBzdGFydF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsIC8vIFJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICAgICAgICAgIGVuZF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgKyAwLjAxLCAvLyBSZWxhdGl2ZSB0byBjb252ZXJzYXRpb24gc3RhcnRcbiAgICAgICAgICBzcGVha2VyOiBcImFnZW50XCIsXG4gICAgICAgICAgdGV4dDogcmVzcG9uc2UuZGF0YS5hZ2VudF93ZWxjb21lX21lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMud2VsY29tZURhdGEubWVzc2FnZSA9IHJlc3BvbnNlLmRhdGEuYWdlbnRfd2VsY29tZV9tZXNzYWdlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKHdlbGNvbWVNZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmNvbnZlcnNhdGlvbl9pZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHN0YXJ0aW5nIGNvbnZlcnNhdGlvbjpcIiwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudFtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jb252ZXJzYXRpb25JZCB8fCAhdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb252ZXJzYXRpb24gbm90IHN0YXJ0ZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgY29uc3QgY2hhdE1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgIHN0YXJ0X3RpbWU6IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSwgLy8gUmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gICAgICBlbmRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMSwgLy8gUmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gICAgICBzcGVha2VyOiBcImN1c3RvbWVyXCIsXG4gICAgICB0ZXh0OiBtZXNzYWdlLFxuICAgICAgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcihjaGF0TWVzc2FnZSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RCb2R5OiBhbnkgPSB7XG4gICAgICAgIG1lc3NhZ2VzOiBbY2hhdE1lc3NhZ2VdLFxuICAgICAgICByZWNvcmRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfTtcblxuICAgICAgLy8gSW5jbHVkZSBtZXRhZGF0YVxuICAgICAgaWYgKHRoaXMubWV0YWRhdGEpIHtcbiAgICAgICAgcmVxdWVzdEJvZHkubWV0YWRhdGEgPSB0aGlzLm1ldGFkYXRhO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBheGlvcy5wYXRjaChcbiAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS9hcGkvY29udmVyc2F0aW9ucy9pbi1wcm9ncmVzcy91cGRhdGUvJHt0aGlzLmNvbnZlcnNhdGlvbklkfWAsXG4gICAgICAgIHJlcXVlc3RCb2R5LFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgXCJ4LWFwaS1rZXlcIjogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgIC4uLih0aGlzLnRlbmFudCA/IHsgXCJYLVRlbmFudC1JZFwiOiB0aGlzLnRlbmFudCB9IDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHNlbmRpbmcgbWVzc2FnZTpcIiwgZXJyb3IpO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIHRoZSBhZ2VudCBpbmFjdGl2ZSBlcnJvclxuICAgICAgaWYgKFxuICAgICAgICBlcnJvci5yZXNwb25zZSAmJlxuICAgICAgICBlcnJvci5yZXNwb25zZS5kYXRhICYmXG4gICAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3Jfa2V5ID09PSBcIkFHRU5UX0lOQUNUSVZFXCJcbiAgICAgICkge1xuICAgICAgICAvLyBDcmVhdGUgYSBjdXN0b20gbWVzc2FnZSBmb3IgdGhlIGFnZW50IGluYWN0aXZlIGVycm9yXG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICAgICAgICBzdGFydF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsXG4gICAgICAgICAgICBlbmRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMSxcbiAgICAgICAgICAgIHNwZWFrZXI6IFwic3BlY2lhbFwiLFxuICAgICAgICAgICAgdGV4dDogXCJUaGUgYWdlbnQgaXMgY3VycmVudGx5IG9mZmxpbmUsIHBsZWFzZSBjaGVjayBiYWNrIGxhdGVyLiBUaGFuayB5b3UhXCIsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG9uJ3QgdGhyb3cgdGhlIGVycm9yIHNpbmNlIHdlIGhhbmRsZWQgaXQgd2l0aCBhIG1lc3NhZ2VcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlKGNoYXRJZDogc3RyaW5nLCBmaWxlOiBGaWxlKTogUHJvbWlzZTx7IGZpbGVVcmw6IHN0cmluZyB9PiB7XG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb252ZXJzYXRpb24gbm90IHN0YXJ0ZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoXCJjaGF0X2lkXCIsIGNoYXRJZCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKFwiZmlsZVwiLCBmaWxlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3Q8eyBmaWxlVXJsOiBzdHJpbmcgfT4oXG4gICAgICAgIGAke3RoaXMuYmFzZVVybH0vYXBpL2dlbmFnZW50L2tub3dsZWRnZS91cGxvYWQtY2hhdC1maWxlYCxcbiAgICAgICAgZm9ybURhdGEsXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIngtYXBpLWtleVwiOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLFxuICAgICAgICAgICAgLi4uKHRoaXMudGVuYW50ID8geyBcIlgtVGVuYW50LUlkXCI6IHRoaXMudGVuYW50IH0gOiB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgdXBsb2FkaW5nIGZpbGU6XCIsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbm5lY3RXZWJTb2NrZXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud2ViU29ja2V0KSB7XG4gICAgICB0aGlzLndlYlNvY2tldC5jbG9zZSgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb252ZXJzYXRpb25JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udmVyc2F0aW9uIElEIGlzIHJlcXVpcmVkIGZvciBXZWJTb2NrZXQgY29ubmVjdGlvblwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKSB0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoXCJjb25uZWN0aW5nXCIpO1xuICAgIGxldCB3c1VybCA9IGAke3RoaXMuYmFzZVVybC5yZXBsYWNlKFwiaHR0cFwiLCBcIndzXCIpfS9hcGkvY29udmVyc2F0aW9ucy93cy8ke1xuICAgICAgdGhpcy5jb252ZXJzYXRpb25JZFxuICAgIH0/YXBpX2tleT0ke1xuICAgICAgdGhpcy5hcGlLZXlcbiAgICB9Jmxhbmc9ZW4mdG9waWNzPW1lc3NhZ2UmdG9waWNzPXRha2VvdmVyJnRvcGljcz1maW5hbGl6ZWA7XG4gICAgXG4gICAgLy8gQWRkIHRlbmFudCBhcyBxdWVyeSBwYXJhbWV0ZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy50ZW5hbnQpIHtcbiAgICAgIHdzVXJsICs9IGAmWC1UZW5hbnQtSWQ9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy50ZW5hbnQpfWA7XG4gICAgfVxuICAgIFxuICAgIC8vIEFsc28gdHJ5IHRvIHBhc3MgdGVuYW50IGFzIGhlYWRlciAoZm9yIE5vZGUuanMgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBpdClcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy50ZW5hbnQgPyB7IFwiWC1UZW5hbnQtSWRcIjogdGhpcy50ZW5hbnQgfSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLndlYlNvY2tldCA9IG5ldyBXZWJTb2NrZXQod3NVcmwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoZWFkZXJzKTtcblxuXG4gICAgdGhpcy53ZWJTb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJXZWJTb2NrZXQgY29ubmVjdGVkXCIpO1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcikgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiY29ubmVjdGVkXCIpO1xuICAgIH07XG5cbiAgICB0aGlzLndlYlNvY2tldC5vbm1lc3NhZ2UgPSAoZXZlbnQ6IElNZXNzYWdlRXZlbnQpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwiV2ViU29ja2V0IG1lc3NhZ2U6XCIsIGV2ZW50LmRhdGEpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSBhcyBzdHJpbmcpO1xuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBcIm1lc3NhZ2VcIiAmJiB0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5wYXlsb2FkKSkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBkYXRhLnBheWxvYWQgYXMgQ2hhdE1lc3NhZ2VbXTtcbiAgICAgICAgICAgIC8vIEFkanVzdCB0aW1lc3RhbXBzIHRvIGJlIHJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWRNZXNzYWdlcyA9IG1lc3NhZ2VzXG4gICAgICAgICAgICAgIC5tYXAoKG1zZykgPT4gdGhpcy5hZGp1c3RNZXNzYWdlVGltZXN0YW1wcyhtc2cpKVxuICAgICAgICAgICAgICAuZmlsdGVyKChtc2cpID0+IG1zZy5zcGVha2VyICE9PSBcImN1c3RvbWVyXCIpO1xuICAgICAgICAgICAgYWRqdXN0ZWRNZXNzYWdlcy5mb3JFYWNoKHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhZGp1c3RlZE1lc3NhZ2UgPSB0aGlzLmFkanVzdE1lc3NhZ2VUaW1lc3RhbXBzKFxuICAgICAgICAgICAgICBkYXRhLnBheWxvYWQgYXMgQ2hhdE1lc3NhZ2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoYWRqdXN0ZWRNZXNzYWdlLnNwZWFrZXIgIT09IFwiY3VzdG9tZXJcIikge1xuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKGFkanVzdGVkTWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gXCJ0YWtlb3ZlclwiKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIHRha2VvdmVyIGV2ZW50XG4gICAgICAgICAgY29uc29sZS5sb2coXCJUYWtlb3ZlciBldmVudCByZWNlaXZlZFwiKTtcblxuICAgICAgICAgIC8vIENyZWF0ZSBzcGVjaWFsIG1lc3NhZ2UgZm9yIHRoZSB0YWtlb3ZlciBpbmRpY2F0b3JcbiAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgICAgICAgICBjb25zdCB0YWtlb3Zlck1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgICAgICBzdGFydF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICA/IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgZW5kX3RpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgID8gbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMVxuICAgICAgICAgICAgICAgIDogMC4wMSxcbiAgICAgICAgICAgICAgc3BlYWtlcjogXCJzcGVjaWFsXCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiU3VwZXJ2aXNvciB0b29rIG92ZXJcIixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKHRha2VvdmVyTWVzc2FnZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2FsbCB0aGUgdGFrZW92ZXIgaGFuZGxlciBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmICh0aGlzLnRha2VvdmVySGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy50YWtlb3ZlckhhbmRsZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSBcImZpbmFsaXplXCIpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgZmluYWxpemVkIGV2ZW50XG4gICAgICAgICAgY29uc29sZS5sb2coXCJGaW5hbGl6ZWQgZXZlbnQgcmVjZWl2ZWRcIik7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgc3BlY2lhbCBtZXNzYWdlIGZvciB0aGUgZmluYWxpemVkIGluZGljYXRvclxuICAgICAgICAgIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpIC8gMTAwMDtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsaXplZE1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgICAgICBzdGFydF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICA/IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgZW5kX3RpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgID8gbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMVxuICAgICAgICAgICAgICAgIDogMC4wMSxcbiAgICAgICAgICAgICAgc3BlYWtlcjogXCJzcGVjaWFsXCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiQ29udmVyc2F0aW9uIEZpbmFsaXplZFwiLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIoZmluYWxpemVkTWVzc2FnZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2FsbCB0aGUgZmluYWxpemVkIGhhbmRsZXIgaWYgcHJvdmlkZWRcbiAgICAgICAgICBpZiAodGhpcy5maW5hbGl6ZWRIYW5kbGVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpbmFsaXplZEhhbmRsZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pc0ZpbmFsaXplZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zYXZlQ29udmVyc2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIFdlYlNvY2tldCBtZXNzYWdlOlwiLCBlcnJvcik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMud2ViU29ja2V0Lm9uZXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiV2ViU29ja2V0IGVycm9yOlwiLCBlcnJvcik7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKVxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoXCJkaXNjb25uZWN0ZWRcIik7XG4gICAgfTtcblxuICAgIHRoaXMud2ViU29ja2V0Lm9uY2xvc2UgPSAoZXZlbnQ6IElDbG9zZUV2ZW50KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcIldlYlNvY2tldCBjbG9zZWQ6XCIsIGV2ZW50LmNvZGUsIGV2ZW50LnJlYXNvbik7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKVxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoXCJkaXNjb25uZWN0ZWRcIik7XG4gICAgfTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud2ViU29ja2V0KSB7XG4gICAgICB0aGlzLndlYlNvY2tldC5jbG9zZSgpO1xuICAgICAgdGhpcy53ZWJTb2NrZXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBmZWVkYmFjayB0byBhIHNwZWNpZmljIGFnZW50IG1lc3NhZ2UgaW4gdGhlIGNvbnZlcnNhdGlvblxuICBhc3luYyBhZGRGZWVkYmFjayhcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICBmZWVkYmFjazogXCJnb29kXCIgfCBcImJhZFwiLFxuICAgIGZlZWRiYWNrX21lc3NhZ2U/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb252ZXJzYXRpb24gbm90IHN0YXJ0ZWRcIik7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGF4aW9zLnBhdGNoKFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9L2FwaS9jb252ZXJzYXRpb25zL21lc3NhZ2UvYWRkLWZlZWRiYWNrLyR7dGhpcy5jb252ZXJzYXRpb25JZH1gLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZV9pZDogbWVzc2FnZUlkLFxuICAgICAgICAgIGZlZWRiYWNrLFxuICAgICAgICAgIGZlZWRiYWNrX21lc3NhZ2UsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIngtYXBpLWtleVwiOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgLi4uKHRoaXMudGVuYW50ID8geyBcIlgtVGVuYW50LUlkXCI6IHRoaXMudGVuYW50IH0gOiB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGFkZGluZyBtZXNzYWdlIGZlZWRiYWNrOlwiLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGFkanVzdCBtZXNzYWdlIHRpbWVzdGFtcHMgcmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gIHByaXZhdGUgYWRqdXN0TWVzc2FnZVRpbWVzdGFtcHMobWVzc2FnZTogQ2hhdE1lc3NhZ2UpOiBDaGF0TWVzc2FnZSB7XG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5tZXNzYWdlLFxuICAgICAgc3RhcnRfdGltZTogbWVzc2FnZS5zdGFydF90aW1lIC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lLFxuICAgICAgZW5kX3RpbWU6IG1lc3NhZ2UuZW5kX3RpbWUgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsXG4gICAgfTtcbiAgfVxufVxuIl19
530
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvY2hhdFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUNMLFlBQVksSUFBSSxTQUFTLEdBRzFCLE1BQU0sV0FBVyxDQUFDO0FBU25CO0lBcUJFLHFCQUNFLE9BQWUsRUFDZixNQUFjLEVBQ2QsUUFBOEIsRUFDOUIsTUFBZTtRQXJCVCxtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFDckMsMkJBQXNCLEdBQWtCLElBQUksQ0FBQyxDQUFDLGdDQUFnQztRQUM5RSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixjQUFTLEdBQXFCLElBQUksQ0FBQztRQUNuQyxtQkFBYyxHQUE0QyxJQUFJLENBQUM7UUFDL0Qsb0JBQWUsR0FBd0IsSUFBSSxDQUFDO1FBQzVDLHFCQUFnQixHQUF3QixJQUFJLENBQUM7UUFDN0MsMkJBQXNCLEdBRW5CLElBQUksQ0FBQztRQUNSLG1CQUFjLEdBQUcsd0JBQXdCLENBQUM7UUFDMUMsb0JBQWUsR0FBYSxFQUFFLENBQUM7UUFDL0IsZ0JBQVcsR0FBcUIsRUFBRSxDQUFDO1FBQ25DLG1CQUFjLEdBQXdCLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDckUscUJBQWdCLEdBQWtCLElBQUksQ0FBQyxDQUFDLHFCQUFxQjtRQVNuRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN0RSxJQUFJLENBQUMsTUFBTSxH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Q0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ3ZEOzZCQUNGLENBQ0YsRUFBQTs7d0JBZEQsU0FjQyxDQUFDOzs7O3dCQUVGLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsT0FBSyxDQUFDLENBQUM7d0JBQ3ZELE1BQU0sT0FBSyxDQUFDOzs7OztLQUVmO0lBRUQsNEVBQTRFO0lBQ3BFLDZDQUF1QixHQUEvQixVQUFnQyxPQUFvQjtRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDakMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUVELDZCQUNLLE9BQU8sS0FDVixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQzVELFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsSUFDeEQ7SUFDSixDQUFDO0lBQ0gsa0JBQUM7QUFBRCxDQUFDLEFBdGlCRCxJQXNpQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQge1xuICB3M2N3ZWJzb2NrZXQgYXMgV2ViU29ja2V0LFxuICBJTWVzc2FnZUV2ZW50LFxuICBJQ2xvc2VFdmVudCxcbn0gZnJvbSBcIndlYnNvY2tldFwiO1xuaW1wb3J0IHtcbiAgQ2hhdE1lc3NhZ2UsXG4gIFN0YXJ0Q29udmVyc2F0aW9uUmVzcG9uc2UsXG4gIEF0dGFjaG1lbnQsXG4gIEFnZW50VGhpbmtpbmdDb25maWcsXG4gIEFnZW50V2VsY29tZURhdGEsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuXG5leHBvcnQgY2xhc3MgQ2hhdFNlcnZpY2Uge1xuICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSBhcGlLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBjb252ZXJzYXRpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY29udmVyc2F0aW9uQ3JlYXRlVGltZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7IC8vIFRyYWNrIGNvbnZlcnNhdGlvbiBzdGFydCB0aW1lXG4gIHByaXZhdGUgaXNGaW5hbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSB3ZWJTb2NrZXQ6IFdlYlNvY2tldCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1lc3NhZ2VIYW5kbGVyOiAoKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHRha2VvdmVySGFuZGxlcjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZmluYWxpemVkSGFuZGxlcjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY29ubmVjdGlvblN0YXRlSGFuZGxlcjpcbiAgICB8ICgoc3RhdGU6IFwiY29ubmVjdGluZ1wiIHwgXCJjb25uZWN0ZWRcIiB8IFwiZGlzY29ubmVjdGVkXCIpID0+IHZvaWQpXG4gICAgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdG9yYWdlS2V5QmFzZSA9IFwiZ2VuYXNzaXN0X2NvbnZlcnNhdGlvblwiO1xuICBwcml2YXRlIHBvc3NpYmxlUXVlcmllczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSB3ZWxjb21lRGF0YTogQWdlbnRXZWxjb21lRGF0YSA9IHt9O1xuICBwcml2YXRlIHRoaW5raW5nQ29uZmlnOiBBZ2VudFRoaW5raW5nQ29uZmlnID0geyBwaHJhc2VzOiBbXSwgZGVsYXlNczogMTAwMCB9O1xuICBwcml2YXRlIHdlbGNvbWVPYmplY3RVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyB0byByZXZva2Ugb24gcmVzZXRcbiAgcHJpdmF0ZSB0ZW5hbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBiYXNlVXJsOiBzdHJpbmcsXG4gICAgYXBpS2V5OiBzdHJpbmcsXG4gICAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHRlbmFudD86IHN0cmluZ1xuICApIHtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsLmVuZHNXaXRoKFwiL1wiKSA/IGJhc2VVcmwuc2xpY2UoMCwgLTEpIDogYmFzZVVybDtcbiAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGE7XG4gICAgdGhpcy50ZW5hbnQgPSB0ZW5hbnQ7XG4gICAgLy8gVHJ5IHRvIGxvYWQgYSBzYXZlZCBjb252ZXJzYXRpb24gZm9yIHRoaXMgYXBpS2V5IGZyb20gbG9jYWxTdG9yYWdlXG4gICAgdGhpcy5sb2FkU2F2ZWRDb252ZXJzYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RvcmFnZUtleSgpOiBzdHJpbmcge1xuICAgIC8vIFBvaW50ZXIgdG8gY3VycmVudCBjb252ZXJzYXRpb24gbWV0YWRhdGEgZm9yIHRoaXMgYXBpS2V5XG4gICAgcmV0dXJuIGAke3RoaXMuc3RvcmFnZUtleUJhc2V9OiR7dGhpcy5hcGlLZXl9YDtcbiAgfVxuXG4gIHNldE1lc3NhZ2VIYW5kbGVyKGhhbmRsZXI6IChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4gdm9pZCkge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgc2V0VGFrZW92ZXJIYW5kbGVyKGhhbmRsZXI6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnRha2VvdmVySGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBzZXRGaW5hbGl6ZWRIYW5kbGVyKGhhbmRsZXI6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLmZpbmFsaXplZEhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgc2V0Q29ubmVjdGlvblN0YXRlSGFuZGxlcihcbiAgICBoYW5kbGVyOiAoc3RhdGU6IFwiY29ubmVjdGluZ1wiIHwgXCJjb25uZWN0ZWRcIiB8IFwiZGlzY29ubmVjdGVkXCIpID0+IHZvaWRcbiAgKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldFBvc3NpYmxlUXVlcmllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucG9zc2libGVRdWVyaWVzO1xuICB9XG5cbiAgZ2V0V2VsY29tZURhdGEoKTogQWdlbnRXZWxjb21lRGF0YSB7XG4gICAgcmV0dXJuIHRoaXMud2VsY29tZURhdGE7XG4gIH1cblxuICBnZXRUaGlua2luZ0NvbmZpZygpOiBBZ2VudFRoaW5raW5nQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy50aGlua2luZ0NvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGEgc2F2ZWQgY29udmVyc2F0aW9uIElEIGZyb20gbG9jYWxTdG9yYWdlXG4gICAqL1xuICBwcml2YXRlIGxvYWRTYXZlZENvbnZlcnNhdGlvbigpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbGV0IHNhdmVkQ29udmVyc2F0aW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5nZXRTdG9yYWdlS2V5KCkpO1xuICAgICAgLy8gQmFja3dhcmQtY29tcGF0OiBjaGVjayBvbGQgdW5zY29wZWQga2V5IGlmIHNjb3BlZCBvbmUgbWlzc2luZ1xuICAgICAgaWYgKCFzYXZlZENvbnZlcnNhdGlvbikge1xuICAgICAgICBzYXZlZENvbnZlcnNhdGlvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleUJhc2UpO1xuICAgICAgfVxuICAgICAgaWYgKHNhdmVkQ29udmVyc2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IHsgY29udmVyc2F0aW9uSWQsIGNyZWF0ZVRpbWUsIGlzRmluYWxpemVkIH0gPVxuICAgICAgICAgIEpTT04ucGFyc2Uoc2F2ZWRDb252ZXJzYXRpb24pO1xuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gY29udmVyc2F0aW9uSWQ7XG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSA9IGNyZWF0ZVRpbWU7XG4gICAgICAgIHRoaXMuaXNGaW5hbGl6ZWQgPSBpc0ZpbmFsaXplZCB8fCBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgXCJMb2FkZWQgc2F2ZWQgY29udmVyc2F0aW9uOlwiLFxuICAgICAgICAgIHRoaXMuY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgXCJGaW5hbGl6ZWQ6XCIsXG4gICAgICAgICAgdGhpcy5pc0ZpbmFsaXplZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgbG9hZGluZyBzYXZlZCBjb252ZXJzYXRpb246XCIsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSB0aGUgY3VycmVudCBjb252ZXJzYXRpb24gSUQgdG8gbG9jYWxTdG9yYWdlXG4gICAqL1xuICBwcml2YXRlIHNhdmVDb252ZXJzYXRpb24oKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmNvbnZlcnNhdGlvbklkICYmIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSkge1xuICAgICAgICBjb25zdCBjb252ZXJzYXRpb25EYXRhID0ge1xuICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgIGNyZWF0ZVRpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSxcbiAgICAgICAgICBpc0ZpbmFsaXplZDogdGhpcy5pc0ZpbmFsaXplZCxcbiAgICAgICAgfTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5nZXRTdG9yYWdlS2V5KCksIEpTT04uc3RyaW5naWZ5KGNvbnZlcnNhdGlvbkRhdGEpKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJTYXZlZCBjb252ZXJzYXRpb246XCIsIHRoaXMuY29udmVyc2F0aW9uSWQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igc2F2aW5nIGNvbnZlcnNhdGlvbjpcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgY3VycmVudCBjb252ZXJzYXRpb24gYnkgY2xlYXJpbmcgdGhlIElEIGFuZCB3ZWJzb2NrZXRcbiAgICovXG4gIHJlc2V0Q29udmVyc2F0aW9uKCk6IHZvaWQge1xuICAgIC8vIENsb3NlIHRoZSBjdXJyZW50IHdlYnNvY2tldCBjb25uZWN0aW9uIGlmIGl0IGV4aXN0c1xuICAgIGlmICh0aGlzLndlYlNvY2tldCkge1xuICAgICAgdGhpcy53ZWJTb2NrZXQuY2xvc2UoKTtcbiAgICAgIHRoaXMud2ViU29ja2V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDbGVhciB0aGUgY29udmVyc2F0aW9uIElEXG4gICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IG51bGw7XG4gICAgdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lID0gbnVsbDtcbiAgICB0aGlzLmlzRmluYWxpemVkID0gZmFsc2U7XG5cbiAgICAvLyBDbGVhciBwb3NzaWJsZSBxdWVyaWVzXG4gICAgdGhpcy5wb3NzaWJsZVF1ZXJpZXMgPSBbXTtcbiAgICB0aGlzLndlbGNvbWVEYXRhID0ge307XG4gICAgdGhpcy50aGlua2luZ0NvbmZpZyA9IHsgcGhyYXNlczogW10sIGRlbGF5TXM6IDEwMDAgfTtcbiAgICBpZiAodGhpcy53ZWxjb21lT2JqZWN0VXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMud2VsY29tZU9iamVjdFVybCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICB0aGlzLndlbGNvbWVPYmplY3RVcmwgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5nZXRTdG9yYWdlS2V5KCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVtb3ZpbmcgY29udmVyc2F0aW9uIGZyb20gc3RvcmFnZTpcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGVyZSdzIGEgY3VycmVudCBjb252ZXJzYXRpb25cbiAgICovXG4gIGhhc0FjdGl2ZUNvbnZlcnNhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbnZlcnNhdGlvbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBjb252ZXJzYXRpb24gSURcbiAgICovXG4gIGdldENvbnZlcnNhdGlvbklkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnNhdGlvbklkO1xuICB9XG5cbiAgaXNDb252ZXJzYXRpb25GaW5hbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNGaW5hbGl6ZWQ7XG4gIH1cblxuICBhc3luYyBzdGFydENvbnZlcnNhdGlvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgICBtZXNzYWdlczogW10sXG4gICAgICAgIHJlY29yZGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGRhdGFfc291cmNlX2lkOiBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0YWRhdGEpIHtcbiAgICAgICAgcmVxdWVzdEJvZHkubWV0YWRhdGEgPSB0aGlzLm1ldGFkYXRhO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3Q8U3RhcnRDb252ZXJzYXRpb25SZXNwb25zZT4oXG4gICAgICAgIGAke3RoaXMuYmFzZVVybH0vYXBpL2NvbnZlcnNhdGlvbnMvaW4tcHJvZ3Jlc3Mvc3RhcnRgLFxuICAgICAgICByZXF1ZXN0Qm9keSxcbiAgICAgICAge1xuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIFwieC1hcGkta2V5XCI6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAuLi4odGhpcy50ZW5hbnQgPyB7IFwiWC1UZW5hbnQtSWRcIjogdGhpcy50ZW5hbnQgfSA6IHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gcmVzcG9uc2UuZGF0YS5jb252ZXJzYXRpb25faWQ7XG4gICAgICAvLyBTdG9yZSBjb252ZXJzYXRpb24gY3JlYXRlIHRpbWUgKHVzZSBmcm9tIHJlc3BvbnNlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGN1cnJlbnQgdGltZSlcbiAgICAgIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSA9IHJlc3BvbnNlLmRhdGEuY3JlYXRlX3RpbWVcbiAgICAgICAgPyByZXNwb25zZS5kYXRhLmNyZWF0ZV90aW1lIC8gMTAwMFxuICAgICAgICA6IERhdGUubm93KCkgLyAxMDAwO1xuICAgICAgdGhpcy5pc0ZpbmFsaXplZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zYXZlQ29udmVyc2F0aW9uKCk7XG4gICAgICB0aGlzLmNvbm5lY3RXZWJTb2NrZXQoKTtcblxuICAgICAgLy8gU3RvcmUgcG9zc2libGUgcXVlcmllcyBpZiBhdmFpbGFibGVcbiAgICAgIGlmIChcbiAgICAgICAgcmVzcG9uc2UuZGF0YS5hZ2VudF9wb3NzaWJsZV9xdWVyaWVzICYmXG4gICAgICAgIHJlc3BvbnNlLmRhdGEuYWdlbnRfcG9zc2libGVfcXVlcmllcy5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5wb3NzaWJsZVF1ZXJpZXMgPSByZXNwb25zZS5kYXRhLmFnZW50X3Bvc3NpYmxlX3F1ZXJpZXM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFueURhdGE6IGFueSA9IHJlc3BvbnNlLmRhdGEgYXMgYW55O1xuICAgICAgY29uc3QgYWdlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gYW55RGF0YS5hZ2VudF9pZDtcbiAgICAgIGNvbnN0IHdlbGNvbWVUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gYW55RGF0YS5hZ2VudF93ZWxjb21lX3RpdGxlO1xuICAgICAgY29uc3Qgd2VsY29tZUltYWdlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgICBhbnlEYXRhLmFnZW50X3dlbGNvbWVfaW1hZ2VfdXJsO1xuICAgICAgY29uc3QgdGhpbmtpbmdQaHJhc2VzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9XG4gICAgICAgIGFueURhdGEuYWdlbnRfdGhpbmtpbmdfcGhyYXNlcztcbiAgICAgIGNvbnN0IHRoaW5raW5nRGVsYXlTZWM6IG51bWJlciB8IHVuZGVmaW5lZCA9XG4gICAgICAgIGFueURhdGEuYWdlbnRfdGhpbmtpbmdfcGhyYXNlX2RlbGF5O1xuXG4gICAgICB0aGlzLndlbGNvbWVEYXRhID0ge1xuICAgICAgICB0aXRsZTogd2VsY29tZVRpdGxlIHx8IG51bGwsXG4gICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgIGltYWdlVXJsOiB3ZWxjb21lSW1hZ2VVcmwgfHwgbnVsbCxcbiAgICAgICAgcG9zc2libGVRdWVyaWVzOiB0aGlzLnBvc3NpYmxlUXVlcmllcyxcbiAgICAgIH07XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaW5raW5nUGhyYXNlcykgJiYgdGhpbmtpbmdQaHJhc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy50aGlua2luZ0NvbmZpZy5waHJhc2VzID0gdGhpbmtpbmdQaHJhc2VzO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB0aGlua2luZ0RlbGF5U2VjID09PSBcIm51bWJlclwiICYmIHRoaW5raW5nRGVsYXlTZWMgPj0gMCkge1xuICAgICAgICB0aGlzLnRoaW5raW5nQ29uZmlnLmRlbGF5TXMgPSBNYXRoLm1heChcbiAgICAgICAgICAyNTAsXG4gICAgICAgICAgTWF0aC5yb3VuZCh0aGlua2luZ0RlbGF5U2VjICogMTAwMClcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLndlbGNvbWVEYXRhLmltYWdlVXJsICYmIGFnZW50SWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBpbWFnZVJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS9hcGkvZ2VuYWdlbnQvYWdlbnRzL2NvbmZpZ3MvJHthZ2VudElkfS93ZWxjb21lLWltYWdlYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIFwieC1hcGkta2V5XCI6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgIC4uLih0aGlzLnRlbmFudCA/IHsgXCJYLVRlbmFudC1JZFwiOiB0aGlzLnRlbmFudCB9IDoge30pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoaW1hZ2VSZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICB0aGlzLndlbGNvbWVPYmplY3RVcmwgPSBibG9iVXJsO1xuICAgICAgICAgIHRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwgPSBibG9iVXJsO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIk5vIHdlbGNvbWUgaW1hZ2UgYXZhaWxhYmxlIG9yIGZhaWxlZCB0byBsb2FkLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzIGFnZW50IHdlbGNvbWUgbWVzc2FnZSBpZiBhdmFpbGFibGVcbiAgICAgIGlmIChyZXNwb25zZS5kYXRhLmFnZW50X3dlbGNvbWVfbWVzc2FnZSAmJiB0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCkgLyAxMDAwO1xuICAgICAgICBjb25zdCB3ZWxjb21lTWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgICAgICBzdGFydF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsIC8vIFJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICAgICAgICAgIGVuZF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgKyAwLjAxLCAvLyBSZWxhdGl2ZSB0byBjb252ZXJzYXRpb24gc3RhcnRcbiAgICAgICAgICBzcGVha2VyOiBcImFnZW50XCIsXG4gICAgICAgICAgdGV4dDogcmVzcG9uc2UuZGF0YS5hZ2VudF93ZWxjb21lX21lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMud2VsY29tZURhdGEubWVzc2FnZSA9IHJlc3BvbnNlLmRhdGEuYWdlbnRfd2VsY29tZV9tZXNzYWdlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKHdlbGNvbWVNZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmNvbnZlcnNhdGlvbl9pZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHN0YXJ0aW5nIGNvbnZlcnNhdGlvbjpcIiwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudFtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jb252ZXJzYXRpb25JZCB8fCAhdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb252ZXJzYXRpb24gbm90IHN0YXJ0ZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgY29uc3QgY2hhdE1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgIHN0YXJ0X3RpbWU6IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSwgLy8gUmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gICAgICBlbmRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMSwgLy8gUmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gICAgICBzcGVha2VyOiBcImN1c3RvbWVyXCIsXG4gICAgICB0ZXh0OiBtZXNzYWdlLFxuICAgICAgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcihjaGF0TWVzc2FnZSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RCb2R5OiBhbnkgPSB7XG4gICAgICAgIG1lc3NhZ2VzOiBbY2hhdE1lc3NhZ2VdLFxuICAgICAgICByZWNvcmRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfTtcblxuICAgICAgLy8gSW5jbHVkZSBtZXRhZGF0YVxuICAgICAgaWYgKHRoaXMubWV0YWRhdGEpIHtcbiAgICAgICAgcmVxdWVzdEJvZHkubWV0YWRhdGEgPSB0aGlzLm1ldGFkYXRhO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBheGlvcy5wYXRjaChcbiAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS9hcGkvY29udmVyc2F0aW9ucy9pbi1wcm9ncmVzcy91cGRhdGUvJHt0aGlzLmNvbnZlcnNhdGlvbklkfWAsXG4gICAgICAgIHJlcXVlc3RCb2R5LFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgXCJ4LWFwaS1rZXlcIjogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgIC4uLih0aGlzLnRlbmFudCA/IHsgXCJYLVRlbmFudC1JZFwiOiB0aGlzLnRlbmFudCB9IDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHNlbmRpbmcgbWVzc2FnZTpcIiwgZXJyb3IpO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIHRoZSBhZ2VudCBpbmFjdGl2ZSBlcnJvclxuICAgICAgaWYgKFxuICAgICAgICBlcnJvci5yZXNwb25zZSAmJlxuICAgICAgICBlcnJvci5yZXNwb25zZS5kYXRhICYmXG4gICAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3Jfa2V5ID09PSBcIkFHRU5UX0lOQUNUSVZFXCJcbiAgICAgICkge1xuICAgICAgICAvLyBDcmVhdGUgYSBjdXN0b20gbWVzc2FnZSBmb3IgdGhlIGFnZW50IGluYWN0aXZlIGVycm9yXG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICAgICAgICBzdGFydF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsXG4gICAgICAgICAgICBlbmRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMSxcbiAgICAgICAgICAgIHNwZWFrZXI6IFwic3BlY2lhbFwiLFxuICAgICAgICAgICAgdGV4dDogXCJUaGUgYWdlbnQgaXMgY3VycmVudGx5IG9mZmxpbmUsIHBsZWFzZSBjaGVjayBiYWNrIGxhdGVyLiBUaGFuayB5b3UhXCIsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG9uJ3QgdGhyb3cgdGhlIGVycm9yIHNpbmNlIHdlIGhhbmRsZWQgaXQgd2l0aCBhIG1lc3NhZ2VcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlKGNoYXRJZDogc3RyaW5nLCBmaWxlOiBGaWxlKTogUHJvbWlzZTx7IGZpbGVVcmw6IHN0cmluZyB9PiB7XG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb252ZXJzYXRpb24gbm90IHN0YXJ0ZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoXCJjaGF0X2lkXCIsIGNoYXRJZCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKFwiZmlsZVwiLCBmaWxlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3Q8eyBmaWxlVXJsOiBzdHJpbmcgfT4oXG4gICAgICAgIGAke3RoaXMuYmFzZVVybH0vYXBpL2dlbmFnZW50L2tub3dsZWRnZS91cGxvYWQtY2hhdC1maWxlYCxcbiAgICAgICAgZm9ybURhdGEsXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIngtYXBpLWtleVwiOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLFxuICAgICAgICAgICAgLi4uKHRoaXMudGVuYW50ID8geyBcIlgtVGVuYW50LUlkXCI6IHRoaXMudGVuYW50IH0gOiB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgdXBsb2FkaW5nIGZpbGU6XCIsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbm5lY3RXZWJTb2NrZXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud2ViU29ja2V0KSB7XG4gICAgICB0aGlzLndlYlNvY2tldC5jbG9zZSgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb252ZXJzYXRpb25JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udmVyc2F0aW9uIElEIGlzIHJlcXVpcmVkIGZvciBXZWJTb2NrZXQgY29ubmVjdGlvblwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKSB0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoXCJjb25uZWN0aW5nXCIpO1xuICAgIGxldCB3c1VybCA9IGAke3RoaXMuYmFzZVVybC5yZXBsYWNlKFwiaHR0cFwiLCBcIndzXCIpfS9hcGkvY29udmVyc2F0aW9ucy93cy8ke1xuICAgICAgdGhpcy5jb252ZXJzYXRpb25JZFxuICAgIH0/YXBpX2tleT0ke1xuICAgICAgdGhpcy5hcGlLZXlcbiAgICB9Jmxhbmc9ZW4mdG9waWNzPW1lc3NhZ2UmdG9waWNzPXRha2VvdmVyJnRvcGljcz1maW5hbGl6ZWA7XG4gICAgXG4gICAgLy8gQWRkIHRlbmFudCBhcyBxdWVyeSBwYXJhbWV0ZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy50ZW5hbnQpIHtcbiAgICAgIHdzVXJsICs9IGAmWC1UZW5hbnQtSWQ9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy50ZW5hbnQpfWA7XG4gICAgfVxuICAgIFxuICAgIC8vIEFsc28gdHJ5IHRvIHBhc3MgdGVuYW50IGFzIGhlYWRlciAoZm9yIE5vZGUuanMgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBpdClcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy50ZW5hbnQgPyB7IFwiWC1UZW5hbnQtSWRcIjogdGhpcy50ZW5hbnQgfSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLndlYlNvY2tldCA9IG5ldyBXZWJTb2NrZXQod3NVcmwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoZWFkZXJzKTtcblxuXG4gICAgdGhpcy53ZWJTb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJXZWJTb2NrZXQgY29ubmVjdGVkXCIpO1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcikgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiY29ubmVjdGVkXCIpO1xuICAgIH07XG5cbiAgICB0aGlzLndlYlNvY2tldC5vbm1lc3NhZ2UgPSAoZXZlbnQ6IElNZXNzYWdlRXZlbnQpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwiV2ViU29ja2V0IG1lc3NhZ2U6XCIsIGV2ZW50LmRhdGEpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSBhcyBzdHJpbmcpO1xuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBcIm1lc3NhZ2VcIiAmJiB0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5wYXlsb2FkKSkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBkYXRhLnBheWxvYWQgYXMgQ2hhdE1lc3NhZ2VbXTtcbiAgICAgICAgICAgIC8vIEFkanVzdCB0aW1lc3RhbXBzIHRvIGJlIHJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWRNZXNzYWdlcyA9IG1lc3NhZ2VzXG4gICAgICAgICAgICAgIC5tYXAoKG1zZykgPT4gdGhpcy5hZGp1c3RNZXNzYWdlVGltZXN0YW1wcyhtc2cpKVxuICAgICAgICAgICAgICAuZmlsdGVyKChtc2cpID0+IG1zZy5zcGVha2VyICE9PSBcImN1c3RvbWVyXCIpO1xuICAgICAgICAgICAgYWRqdXN0ZWRNZXNzYWdlcy5mb3JFYWNoKHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhZGp1c3RlZE1lc3NhZ2UgPSB0aGlzLmFkanVzdE1lc3NhZ2VUaW1lc3RhbXBzKFxuICAgICAgICAgICAgICBkYXRhLnBheWxvYWQgYXMgQ2hhdE1lc3NhZ2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoYWRqdXN0ZWRNZXNzYWdlLnNwZWFrZXIgIT09IFwiY3VzdG9tZXJcIikge1xuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKGFkanVzdGVkTWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gXCJ0YWtlb3ZlclwiKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIHRha2VvdmVyIGV2ZW50XG4gICAgICAgICAgY29uc29sZS5sb2coXCJUYWtlb3ZlciBldmVudCByZWNlaXZlZFwiKTtcblxuICAgICAgICAgIC8vIENyZWF0ZSBzcGVjaWFsIG1lc3NhZ2UgZm9yIHRoZSB0YWtlb3ZlciBpbmRpY2F0b3JcbiAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgICAgICAgICBjb25zdCB0YWtlb3Zlck1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgICAgICBzdGFydF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICA/IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgZW5kX3RpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgID8gbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMVxuICAgICAgICAgICAgICAgIDogMC4wMSxcbiAgICAgICAgICAgICAgc3BlYWtlcjogXCJzcGVjaWFsXCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiU3VwZXJ2aXNvciB0b29rIG92ZXJcIixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKHRha2VvdmVyTWVzc2FnZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2FsbCB0aGUgdGFrZW92ZXIgaGFuZGxlciBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmICh0aGlzLnRha2VvdmVySGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy50YWtlb3ZlckhhbmRsZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSBcImZpbmFsaXplXCIpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgZmluYWxpemVkIGV2ZW50XG4gICAgICAgICAgY29uc29sZS5sb2coXCJGaW5hbGl6ZWQgZXZlbnQgcmVjZWl2ZWRcIik7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgc3BlY2lhbCBtZXNzYWdlIGZvciB0aGUgZmluYWxpemVkIGluZGljYXRvclxuICAgICAgICAgIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpIC8gMTAwMDtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsaXplZE1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgICAgICBzdGFydF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICA/IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgZW5kX3RpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgID8gbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMVxuICAgICAgICAgICAgICAgIDogMC4wMSxcbiAgICAgICAgICAgICAgc3BlYWtlcjogXCJzcGVjaWFsXCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiQ29udmVyc2F0aW9uIEZpbmFsaXplZFwiLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIoZmluYWxpemVkTWVzc2FnZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2FsbCB0aGUgZmluYWxpemVkIGhhbmRsZXIgaWYgcHJvdmlkZWRcbiAgICAgICAgICBpZiAodGhpcy5maW5hbGl6ZWRIYW5kbGVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpbmFsaXplZEhhbmRsZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pc0ZpbmFsaXplZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zYXZlQ29udmVyc2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIFdlYlNvY2tldCBtZXNzYWdlOlwiLCBlcnJvcik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMud2ViU29ja2V0Lm9uZXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiV2ViU29ja2V0IGVycm9yOlwiLCBlcnJvcik7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKVxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoXCJkaXNjb25uZWN0ZWRcIik7XG4gICAgfTtcblxuICAgIHRoaXMud2ViU29ja2V0Lm9uY2xvc2UgPSAoZXZlbnQ6IElDbG9zZUV2ZW50KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcIldlYlNvY2tldCBjbG9zZWQ6XCIsIGV2ZW50LmNvZGUsIGV2ZW50LnJlYXNvbik7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKVxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoXCJkaXNjb25uZWN0ZWRcIik7XG4gICAgfTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud2ViU29ja2V0KSB7XG4gICAgICB0aGlzLndlYlNvY2tldC5jbG9zZSgpO1xuICAgICAgdGhpcy53ZWJTb2NrZXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBmZWVkYmFjayB0byBhIHNwZWNpZmljIGFnZW50IG1lc3NhZ2UgaW4gdGhlIGNvbnZlcnNhdGlvblxuICBhc3luYyBhZGRGZWVkYmFjayhcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICBmZWVkYmFjazogXCJnb29kXCIgfCBcImJhZFwiLFxuICAgIGZlZWRiYWNrX21lc3NhZ2U/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb252ZXJzYXRpb24gbm90IHN0YXJ0ZWRcIik7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGF4aW9zLnBhdGNoKFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9L2FwaS9jb252ZXJzYXRpb25zL21lc3NhZ2UvYWRkLWZlZWRiYWNrLyR7dGhpcy5jb252ZXJzYXRpb25JZH1gLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZV9pZDogbWVzc2FnZUlkLFxuICAgICAgICAgIGZlZWRiYWNrLFxuICAgICAgICAgIGZlZWRiYWNrX21lc3NhZ2UsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIngtYXBpLWtleVwiOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgLi4uKHRoaXMudGVuYW50ID8geyBcIlgtVGVuYW50LUlkXCI6IHRoaXMudGVuYW50IH0gOiB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGFkZGluZyBtZXNzYWdlIGZlZWRiYWNrOlwiLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGFkanVzdCBtZXNzYWdlIHRpbWVzdGFtcHMgcmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gIHByaXZhdGUgYWRqdXN0TWVzc2FnZVRpbWVzdGFtcHMobWVzc2FnZTogQ2hhdE1lc3NhZ2UpOiBDaGF0TWVzc2FnZSB7XG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5tZXNzYWdlLFxuICAgICAgc3RhcnRfdGltZTogbWVzc2FnZS5zdGFydF90aW1lIC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lLFxuICAgICAgZW5kX3RpbWU6IG1lc3NhZ2UuZW5kX3RpbWUgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Return an icon for a given MIME type.
3
+ */
4
+ export declare function getFileIcon(type: string): JSX.Element;
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { FileText, FileJson, FileImage } from 'lucide-react';
3
+ /**
4
+ * Return an icon for a given MIME type.
5
+ */
6
+ export function getFileIcon(type) {
7
+ if (type.startsWith('image/'))
8
+ return _jsx(FileImage, { size: 24, color: "#6D28D9" });
9
+ if (type === 'application/pdf')
10
+ return _jsx(FileText, { size: 24, color: "#B91C1C" });
11
+ if (type === 'application/json')
12
+ return _jsx(FileJson, { size: 24, color: "#1D4ED8" });
13
+ return _jsx(FileText, { size: 24, color: "#4B5563" });
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZUljb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2ZpbGVJY29ucy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3RDs7R0FFRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBWTtJQUN0QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQUUsT0FBTyxLQUFDLFNBQVMsSUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBQyxTQUFTLEdBQUcsQ0FBQztJQUM5RSxJQUFJLElBQUksS0FBSyxpQkFBaUI7UUFBRSxPQUFPLEtBQUMsUUFBUSxJQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFDLFNBQVMsR0FBRyxDQUFDO0lBQzlFLElBQUksSUFBSSxLQUFLLGtCQUFrQjtRQUFFLE9BQU8sS0FBQyxRQUFRLElBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUMsU0FBUyxHQUFHLENBQUM7SUFDL0UsT0FBTyxLQUFDLFFBQVEsSUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBQyxTQUFTLEdBQUcsQ0FBQztBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZpbGVUZXh0LCBGaWxlSnNvbiwgRmlsZUltYWdlIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcblxuLyoqXG4gKiBSZXR1cm4gYW4gaWNvbiBmb3IgYSBnaXZlbiBNSU1FIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlSWNvbih0eXBlOiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XG4gIGlmICh0eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSByZXR1cm4gPEZpbGVJbWFnZSBzaXplPXsyNH0gY29sb3I9XCIjNkQyOEQ5XCIgLz47XG4gIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24vcGRmJykgcmV0dXJuIDxGaWxlVGV4dCBzaXplPXsyNH0gY29sb3I9XCIjQjkxQzFDXCIgLz47XG4gIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24vanNvbicpIHJldHVybiA8RmlsZUpzb24gc2l6ZT17MjR9IGNvbG9yPVwiIzFENEVEOFwiIC8+O1xuICByZXR1cm4gPEZpbGVUZXh0IHNpemU9ezI0fSBjb2xvcj1cIiM0QjU1NjNcIiAvPjtcbn1cblxuIl19
@@ -0,0 +1 @@
1
+ export declare const formatTimestamp: (timestamp: number) => string;
@@ -0,0 +1,32 @@
1
+ export var formatTimestamp = function (timestamp) {
2
+ try {
3
+ if (!timestamp || isNaN(timestamp)) {
4
+ return 'Just now';
5
+ }
6
+ var timestampMs = timestamp < 1000000000000 ? timestamp * 1000 : timestamp;
7
+ var date = new Date(timestampMs);
8
+ if (isNaN(date.getTime())) {
9
+ return 'Just now';
10
+ }
11
+ var today = new Date();
12
+ var yesterday = new Date(today);
13
+ yesterday.setDate(yesterday.getDate() - 1);
14
+ var timeOptions = { hour: 'numeric', minute: '2-digit', hour12: true };
15
+ var timeStr = date.toLocaleTimeString(undefined, timeOptions);
16
+ if (date.toDateString() === today.toDateString()) {
17
+ return "Today, ".concat(timeStr);
18
+ }
19
+ else if (date.toDateString() === yesterday.toDateString()) {
20
+ return "Yesterday, ".concat(timeStr);
21
+ }
22
+ else {
23
+ var dateOptions = { month: 'short', day: 'numeric', year: 'numeric' };
24
+ var dateStr = date.toLocaleDateString(undefined, dateOptions);
25
+ return "".concat(dateStr, ", ").concat(timeStr);
26
+ }
27
+ }
28
+ catch (_a) {
29
+ return 'Just now';
30
+ }
31
+ };
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxJQUFNLGVBQWUsR0FBRyxVQUFDLFNBQWlCO0lBQy9DLElBQUksQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUNELElBQU0sV0FBVyxHQUFHLFNBQVMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUM3RSxJQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxJQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQU0sV0FBVyxHQUErQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDckcsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNoRSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxLQUFLLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztZQUNqRCxPQUFPLGlCQUFVLE9BQU8sQ0FBRSxDQUFDO1FBQzdCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztZQUM1RCxPQUFPLHFCQUFjLE9BQU8sQ0FBRSxDQUFDO1FBQ2pDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBTSxXQUFXLEdBQStCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUNwRyxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sVUFBRyxPQUFPLGVBQUssT0FBTyxDQUFFLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFBQyxXQUFNLENBQUM7UUFDUCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGZvcm1hdFRpbWVzdGFtcCA9ICh0aW1lc3RhbXA6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKCF0aW1lc3RhbXAgfHwgaXNOYU4odGltZXN0YW1wKSkge1xuICAgICAgcmV0dXJuICdKdXN0IG5vdyc7XG4gICAgfVxuICAgIGNvbnN0IHRpbWVzdGFtcE1zID0gdGltZXN0YW1wIDwgMTAwMDAwMDAwMDAwMCA/IHRpbWVzdGFtcCAqIDEwMDAgOiB0aW1lc3RhbXA7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcE1zKTtcbiAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gJ0p1c3Qgbm93JztcbiAgICB9XG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHllc3RlcmRheSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICB5ZXN0ZXJkYXkuc2V0RGF0ZSh5ZXN0ZXJkYXkuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgY29uc3QgdGltZU9wdGlvbnM6IEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zID0geyBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJzItZGlnaXQnLCBob3VyMTI6IHRydWUgfTtcbiAgICBjb25zdCB0aW1lU3RyID0gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcodW5kZWZpbmVkLCB0aW1lT3B0aW9ucyk7XG4gICAgaWYgKGRhdGUudG9EYXRlU3RyaW5nKCkgPT09IHRvZGF5LnRvRGF0ZVN0cmluZygpKSB7XG4gICAgICByZXR1cm4gYFRvZGF5LCAke3RpbWVTdHJ9YDtcbiAgICB9IGVsc2UgaWYgKGRhdGUudG9EYXRlU3RyaW5nKCkgPT09IHllc3RlcmRheS50b0RhdGVTdHJpbmcoKSkge1xuICAgICAgcmV0dXJuIGBZZXN0ZXJkYXksICR7dGltZVN0cn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRlT3B0aW9uczogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMgPSB7IG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgeWVhcjogJ251bWVyaWMnIH07XG4gICAgICBjb25zdCBkYXRlU3RyID0gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcodW5kZWZpbmVkLCBkYXRlT3B0aW9ucyk7XG4gICAgICByZXR1cm4gYCR7ZGF0ZVN0cn0sICR7dGltZVN0cn1gO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICdKdXN0IG5vdyc7XG4gIH1cbn07XG5cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "genassist-chat-react",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "React chat component for GenAssist",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",