genassist-chat-react 1.0.15 → 1.0.16
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/dist/components/ChatMessage.d.ts +4 -1
- package/dist/components/ChatMessage.js +35 -10
- package/dist/components/GenAgentChat.js +129 -25
- package/dist/components/GenAgentConfigPanel.d.ts +2 -0
- package/dist/components/GenAgentConfigPanel.js +4 -2
- package/dist/components/LanguageSelector.d.ts +19 -0
- package/dist/components/LanguageSelector.js +54 -0
- package/dist/hooks/useChat.js +154 -87
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/services/chatService.js +37 -16
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.js +1 -1
- package/dist/utils/de.json +90 -0
- package/dist/utils/en.json +90 -0
- package/dist/utils/es.json +90 -0
- package/dist/utils/fr.json +90 -0
- package/dist/utils/i18n.d.ts +90 -0
- package/dist/utils/i18n.js +138 -0
- package/dist/utils/it.json +90 -0
- package/dist/utils/pt.json +90 -0
- package/dist/utils/time.d.ts +6 -1
- package/dist/utils/time.js +19 -9
- package/package.json +13 -4
package/dist/hooks/useChat.js
CHANGED
|
@@ -54,7 +54,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
54
54
|
}
|
|
55
55
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
56
56
|
};
|
|
57
|
-
import { useState, useEffect, useCallback, useRef } from 'react';
|
|
57
|
+
import { useState, useEffect, useCallback, useRef, useMemo } from 'react';
|
|
58
58
|
import { ChatService } from '../services/chatService';
|
|
59
59
|
export var useChat = function (_a) {
|
|
60
60
|
var baseUrl = _a.baseUrl, apiKey = _a.apiKey, tenant = _a.tenant, metadata = _a.metadata, onError = _a.onError, onTakeover = _a.onTakeover, onFinalize = _a.onFinalize;
|
|
@@ -79,86 +79,146 @@ export var useChat = function (_a) {
|
|
|
79
79
|
return null;
|
|
80
80
|
return "genassist_conversation_messages:".concat(apiKeyVal, ":").concat(convId);
|
|
81
81
|
}, []);
|
|
82
|
-
//
|
|
82
|
+
// Deep compare metadata to prevent unnecessary re-initializations
|
|
83
|
+
// Only re-initialize if metadata actually changes (by value, not reference)
|
|
84
|
+
var metadataString = useMemo(function () { return JSON.stringify(metadata || {}); }, [metadata]);
|
|
85
|
+
var metadataRef = useRef(metadataString);
|
|
86
|
+
var prevBaseUrlRef = useRef(baseUrl);
|
|
87
|
+
var prevApiKeyRef = useRef(apiKey);
|
|
88
|
+
var prevTenantRef = useRef(tenant);
|
|
89
|
+
// Store callbacks in refs so they don't trigger re-initialization
|
|
90
|
+
var onErrorRef = useRef(onError);
|
|
91
|
+
var onTakeoverRef = useRef(onTakeover);
|
|
92
|
+
var onFinalizeRef = useRef(onFinalize);
|
|
93
|
+
// Update callback refs when they change
|
|
94
|
+
useEffect(function () {
|
|
95
|
+
onErrorRef.current = onError;
|
|
96
|
+
}, [onError]);
|
|
97
|
+
useEffect(function () {
|
|
98
|
+
onTakeoverRef.current = onTakeover;
|
|
99
|
+
}, [onTakeover]);
|
|
100
|
+
useEffect(function () {
|
|
101
|
+
onFinalizeRef.current = onFinalize;
|
|
102
|
+
}, [onFinalize]);
|
|
103
|
+
// Initialize chat service - only when baseUrl, apiKey, tenant, or metadata actually change
|
|
83
104
|
useEffect(function () {
|
|
84
105
|
var _a, _b, _c, _d, _e, _f;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
//
|
|
92
|
-
if (
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
setIsFinalized(true);
|
|
105
|
-
setIsAgentTyping(false);
|
|
106
|
-
if (onFinalize) {
|
|
107
|
-
onFinalize();
|
|
106
|
+
var metadataChanged = metadataRef.current !== metadataString;
|
|
107
|
+
var baseUrlChanged = prevBaseUrlRef.current !== baseUrl;
|
|
108
|
+
var apiKeyChanged = prevApiKeyRef.current !== apiKey;
|
|
109
|
+
var tenantChanged = prevTenantRef.current !== tenant;
|
|
110
|
+
var needsReinit = !chatServiceRef.current || baseUrlChanged || apiKeyChanged || tenantChanged || metadataChanged;
|
|
111
|
+
if (needsReinit) {
|
|
112
|
+
// Update refs
|
|
113
|
+
if (metadataChanged)
|
|
114
|
+
metadataRef.current = metadataString;
|
|
115
|
+
if (baseUrlChanged)
|
|
116
|
+
prevBaseUrlRef.current = baseUrl;
|
|
117
|
+
if (apiKeyChanged)
|
|
118
|
+
prevApiKeyRef.current = apiKey;
|
|
119
|
+
if (tenantChanged)
|
|
120
|
+
prevTenantRef.current = tenant;
|
|
121
|
+
// Clean up existing service if it exists
|
|
122
|
+
if (chatServiceRef.current) {
|
|
123
|
+
chatServiceRef.current.disconnect();
|
|
124
|
+
chatServiceRef.current.setWelcomeDataHandler(null);
|
|
108
125
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
126
|
+
chatServiceRef.current = new ChatService(baseUrl, apiKey, metadata, tenant);
|
|
127
|
+
// Set up handlers
|
|
128
|
+
chatServiceRef.current.setMessageHandler(function (message) {
|
|
129
|
+
var normalizedMessage = __assign(__assign({}, message), { create_time: (!message.create_time || isNaN(message.create_time))
|
|
130
|
+
? Math.floor(Date.now() / 1000)
|
|
131
|
+
: message.create_time });
|
|
132
|
+
setMessages(function (prevMessages) { return __spreadArray(__spreadArray([], prevMessages, true), [normalizedMessage], false); });
|
|
133
|
+
// Stop typing animation when agent or system message arrives
|
|
134
|
+
if (normalizedMessage.speaker === 'agent' || normalizedMessage.speaker === 'special') {
|
|
135
|
+
setIsAgentTyping(false);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
chatServiceRef.current.setTakeoverHandler(function () {
|
|
139
|
+
setIsTakenOver(true);
|
|
114
140
|
setIsAgentTyping(false);
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
setWelcomeImageUrl((_b = data.imageUrl) !== null && _b !== void 0 ? _b : null);
|
|
121
|
-
setWelcomeMessage((_c = data.message) !== null && _c !== void 0 ? _c : null);
|
|
122
|
-
if (data.possibleQueries && data.possibleQueries.length > 0) {
|
|
123
|
-
setPossibleQueries(data.possibleQueries);
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
// Check for a saved conversation and connect to it
|
|
127
|
-
var convId = chatServiceRef.current.getConversationId();
|
|
128
|
-
if (convId) {
|
|
129
|
-
setConversationId(convId);
|
|
130
|
-
if (chatServiceRef.current.isConversationFinalized()) {
|
|
141
|
+
if (onTakeoverRef.current) {
|
|
142
|
+
onTakeoverRef.current();
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
chatServiceRef.current.setFinalizedHandler(function () {
|
|
131
146
|
setIsFinalized(true);
|
|
147
|
+
setIsAgentTyping(false);
|
|
148
|
+
if (onFinalizeRef.current) {
|
|
149
|
+
onFinalizeRef.current();
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
chatServiceRef.current.setConnectionStateHandler(function (state) {
|
|
153
|
+
setConnectionState(state);
|
|
154
|
+
if (state !== 'connected') {
|
|
155
|
+
setIsAgentTyping(false);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
chatServiceRef.current.setWelcomeDataHandler(function (data) {
|
|
159
|
+
var _a, _b, _c;
|
|
160
|
+
setWelcomeTitle((_a = data.title) !== null && _a !== void 0 ? _a : null);
|
|
161
|
+
setWelcomeImageUrl((_b = data.imageUrl) !== null && _b !== void 0 ? _b : null);
|
|
162
|
+
setWelcomeMessage((_c = data.message) !== null && _c !== void 0 ? _c : null);
|
|
163
|
+
if (data.possibleQueries && data.possibleQueries.length > 0) {
|
|
164
|
+
setPossibleQueries(data.possibleQueries);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
// Check for a saved conversation and connect to it
|
|
168
|
+
var convId = chatServiceRef.current.getConversationId();
|
|
169
|
+
if (convId) {
|
|
170
|
+
setConversationId(convId);
|
|
171
|
+
if (chatServiceRef.current.isConversationFinalized()) {
|
|
172
|
+
setIsFinalized(true);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
chatServiceRef.current.connectWebSocket();
|
|
176
|
+
}
|
|
132
177
|
}
|
|
133
|
-
|
|
134
|
-
|
|
178
|
+
// Pull initial static data
|
|
179
|
+
if (chatServiceRef.current) {
|
|
180
|
+
var queries = ((_b = (_a = chatServiceRef.current).getPossibleQueries) === null || _b === void 0 ? void 0 : _b.call(_a)) || [];
|
|
181
|
+
if (queries.length)
|
|
182
|
+
setPossibleQueries(queries);
|
|
183
|
+
var welcome = (_d = (_c = chatServiceRef.current).getWelcomeData) === null || _d === void 0 ? void 0 : _d.call(_c);
|
|
184
|
+
if (welcome) {
|
|
185
|
+
setWelcomeTitle(welcome.title || null);
|
|
186
|
+
setWelcomeImageUrl(welcome.imageUrl || null);
|
|
187
|
+
setWelcomeMessage(welcome.message || null);
|
|
188
|
+
}
|
|
189
|
+
var thinking = (_f = (_e = chatServiceRef.current).getThinkingConfig) === null || _f === void 0 ? void 0 : _f.call(_e);
|
|
190
|
+
if (thinking) {
|
|
191
|
+
setThinkingPhrases(thinking.phrases || []);
|
|
192
|
+
setThinkingDelayMs(thinking.delayMs || 1000);
|
|
193
|
+
}
|
|
135
194
|
}
|
|
136
195
|
}
|
|
137
|
-
|
|
196
|
+
else if (chatServiceRef.current && metadata) {
|
|
197
|
+
// Just update metadata without re-initializing
|
|
198
|
+
chatServiceRef.current.metadata = metadata;
|
|
199
|
+
}
|
|
200
|
+
// Always update handlers when callbacks change (without re-initializing)
|
|
138
201
|
if (chatServiceRef.current) {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
202
|
+
chatServiceRef.current.setTakeoverHandler(function () {
|
|
203
|
+
setIsTakenOver(true);
|
|
204
|
+
setIsAgentTyping(false);
|
|
205
|
+
if (onTakeoverRef.current) {
|
|
206
|
+
onTakeoverRef.current();
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
chatServiceRef.current.setFinalizedHandler(function () {
|
|
210
|
+
setIsFinalized(true);
|
|
211
|
+
setIsAgentTyping(false);
|
|
212
|
+
if (onFinalizeRef.current) {
|
|
213
|
+
onFinalizeRef.current();
|
|
214
|
+
}
|
|
215
|
+
});
|
|
153
216
|
}
|
|
154
|
-
// Cleanup
|
|
217
|
+
// Cleanup only on unmount
|
|
155
218
|
return function () {
|
|
156
|
-
|
|
157
|
-
chatServiceRef.current.disconnect();
|
|
158
|
-
chatServiceRef.current.setWelcomeDataHandler(null);
|
|
159
|
-
}
|
|
219
|
+
// Only cleanup on unmount, not on every dependency change
|
|
160
220
|
};
|
|
161
|
-
}, [baseUrl, apiKey,
|
|
221
|
+
}, [baseUrl, apiKey, tenant, metadataString]);
|
|
162
222
|
// Load messages for current pair when available
|
|
163
223
|
useEffect(function () {
|
|
164
224
|
var key = buildMessagesKey(apiKey, conversationId);
|
|
@@ -245,8 +305,8 @@ export var useChat = function (_a) {
|
|
|
245
305
|
error_1 = _a.sent();
|
|
246
306
|
setConnectionState('disconnected');
|
|
247
307
|
setIsAgentTyping(false);
|
|
248
|
-
if (
|
|
249
|
-
|
|
308
|
+
if (onErrorRef.current && error_1 instanceof Error) {
|
|
309
|
+
onErrorRef.current(error_1);
|
|
250
310
|
}
|
|
251
311
|
else {
|
|
252
312
|
// ignore
|
|
@@ -258,7 +318,7 @@ export var useChat = function (_a) {
|
|
|
258
318
|
case 5: return [2 /*return*/];
|
|
259
319
|
}
|
|
260
320
|
});
|
|
261
|
-
}); }, [
|
|
321
|
+
}); }, []);
|
|
262
322
|
var uploadFile = useCallback(function (file) { return __awaiter(void 0, void 0, void 0, function () {
|
|
263
323
|
var fileUrl, attachment_1, error_2;
|
|
264
324
|
return __generator(this, function (_a) {
|
|
@@ -283,14 +343,14 @@ export var useChat = function (_a) {
|
|
|
283
343
|
return [2 /*return*/, attachment_1];
|
|
284
344
|
case 3:
|
|
285
345
|
error_2 = _a.sent();
|
|
286
|
-
if (
|
|
287
|
-
|
|
346
|
+
if (onErrorRef.current) {
|
|
347
|
+
onErrorRef.current(error_2);
|
|
288
348
|
}
|
|
289
349
|
return [2 /*return*/, null];
|
|
290
350
|
case 4: return [2 /*return*/];
|
|
291
351
|
}
|
|
292
352
|
});
|
|
293
|
-
}); }, [
|
|
353
|
+
}); }, []);
|
|
294
354
|
// Send message
|
|
295
355
|
var sendMessage = useCallback(function (text_1) {
|
|
296
356
|
var args_1 = [];
|
|
@@ -327,8 +387,8 @@ export var useChat = function (_a) {
|
|
|
327
387
|
case 3:
|
|
328
388
|
error_3 = _a.sent();
|
|
329
389
|
setIsAgentTyping(false);
|
|
330
|
-
if (
|
|
331
|
-
|
|
390
|
+
if (onErrorRef.current && error_3 instanceof Error) {
|
|
391
|
+
onErrorRef.current(error_3);
|
|
332
392
|
}
|
|
333
393
|
else {
|
|
334
394
|
// ignore
|
|
@@ -341,7 +401,7 @@ export var useChat = function (_a) {
|
|
|
341
401
|
}
|
|
342
402
|
});
|
|
343
403
|
});
|
|
344
|
-
}, [
|
|
404
|
+
}, [preloadedAttachments, isTakenOver]);
|
|
345
405
|
var startConversation = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
346
406
|
var key, convId, queries, welcome, thinking, error_4;
|
|
347
407
|
return __generator(this, function (_a) {
|
|
@@ -393,8 +453,8 @@ export var useChat = function (_a) {
|
|
|
393
453
|
error_4 = _a.sent();
|
|
394
454
|
setConnectionState('disconnected');
|
|
395
455
|
setIsAgentTyping(false);
|
|
396
|
-
if (
|
|
397
|
-
|
|
456
|
+
if (onErrorRef.current && error_4 instanceof Error) {
|
|
457
|
+
onErrorRef.current(error_4);
|
|
398
458
|
}
|
|
399
459
|
else {
|
|
400
460
|
// ignore
|
|
@@ -406,14 +466,19 @@ export var useChat = function (_a) {
|
|
|
406
466
|
case 5: return [2 /*return*/];
|
|
407
467
|
}
|
|
408
468
|
});
|
|
409
|
-
}); }, [
|
|
469
|
+
}); }, []);
|
|
410
470
|
// Add feedback to an agent message
|
|
411
471
|
var addFeedback = useCallback(function (messageId, value, feedbackMessage) { return __awaiter(void 0, void 0, void 0, function () {
|
|
412
472
|
var newFeedback_1, error_5;
|
|
413
473
|
return __generator(this, function (_a) {
|
|
414
474
|
switch (_a.label) {
|
|
415
475
|
case 0:
|
|
416
|
-
if (!chatServiceRef.current
|
|
476
|
+
if (!chatServiceRef.current) {
|
|
477
|
+
console.error('Cannot send feedback: ChatService not initialized');
|
|
478
|
+
return [2 /*return*/];
|
|
479
|
+
}
|
|
480
|
+
if (!messageId) {
|
|
481
|
+
console.error('Cannot send feedback: messageId is required');
|
|
417
482
|
return [2 /*return*/];
|
|
418
483
|
}
|
|
419
484
|
_a.label = 1;
|
|
@@ -429,21 +494,23 @@ export var useChat = function (_a) {
|
|
|
429
494
|
};
|
|
430
495
|
setMessages(function (prev) {
|
|
431
496
|
return prev.map(function (m) {
|
|
432
|
-
|
|
497
|
+
// Match by message_id or id field
|
|
498
|
+
var msgId = m.message_id || m.id;
|
|
499
|
+
return msgId === messageId
|
|
433
500
|
? __assign(__assign({}, m), { feedback: __spreadArray(__spreadArray([], (m.feedback || []), true), [newFeedback_1], false) }) : m;
|
|
434
501
|
});
|
|
435
502
|
});
|
|
436
503
|
return [3 /*break*/, 4];
|
|
437
504
|
case 3:
|
|
438
505
|
error_5 = _a.sent();
|
|
439
|
-
if (
|
|
440
|
-
|
|
506
|
+
if (onErrorRef.current) {
|
|
507
|
+
onErrorRef.current(error_5);
|
|
441
508
|
}
|
|
442
509
|
return [3 /*break*/, 4];
|
|
443
510
|
case 4: return [2 /*return*/];
|
|
444
511
|
}
|
|
445
512
|
});
|
|
446
|
-
}); }, [
|
|
513
|
+
}); }, []);
|
|
447
514
|
return {
|
|
448
515
|
messages: messages,
|
|
449
516
|
isLoading: isLoading,
|
|
@@ -465,4 +532,4 @@ export var useChat = function (_a) {
|
|
|
465
532
|
thinkingDelayMs: thinkingDelayMs,
|
|
466
533
|
};
|
|
467
534
|
};
|
|
468
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlQ2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFhdEQsTUFBTSxDQUFDLElBQU0sT0FBTyxHQUFHLFVBQUMsRUFBb0Y7UUFBbEYsT0FBTyxhQUFBLEVBQUUsTUFBTSxZQUFBLEVBQUUsTUFBTSxZQUFBLEVBQUUsUUFBUSxjQUFBLEVBQUUsT0FBTyxhQUFBLEVBQUUsVUFBVSxnQkFBQSxFQUFFLFVBQVUsZ0JBQUE7SUFDcEYsSUFBQSxLQUEwQixRQUFRLENBQWdCLEVBQUUsQ0FBQyxFQUFwRCxRQUFRLFFBQUEsRUFBRSxXQUFXLFFBQStCLENBQUM7SUFDdEQsSUFBQSxLQUE0QixRQUFRLENBQVUsS0FBSyxDQUFDLEVBQW5ELFNBQVMsUUFBQSxFQUFFLFlBQVksUUFBNEIsQ0FBQztJQUNyRCxJQUFBLEtBQWtELFFBQVEsQ0FBZSxFQUFFLENBQUMsRUFBM0Usb0JBQW9CLFFBQUEsRUFBRSx1QkFBdUIsUUFBOEIsQ0FBQztJQUM3RSxJQUFBLEtBQXdDLFFBQVEsQ0FBOEMsY0FBYyxDQUFDLEVBQTVHLGVBQWUsUUFBQSxFQUFFLGtCQUFrQixRQUF5RSxDQUFDO0lBQzlHLElBQUEsS0FBb0MsUUFBUSxDQUFVLEtBQUssQ0FBQyxFQUEzRCxhQUFhLFFBQUEsRUFBRSxnQkFBZ0IsUUFBNEIsQ0FBQztJQUNuRSxJQUFNLGNBQWMsR0FBRyxNQUFNLENBQXFCLElBQUksQ0FBQyxDQUFDO0lBQ2xELElBQUEsS0FBc0MsUUFBUSxDQUFnQixJQUFJLENBQUMsRUFB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Y2ssIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY2hhdFNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIEF0dGFjaG1lbnQsIE1lc3NhZ2VGZWVkYmFjayB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VDaGF0UHJvcHMge1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIGFwaUtleTogc3RyaW5nO1xuICB0ZW5hbnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgb25FcnJvcj86IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG4gIG9uVGFrZW92ZXI/OiAoKSA9PiB2b2lkO1xuICBvbkZpbmFsaXplPzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNoYXQgPSAoeyBiYXNlVXJsLCBhcGlLZXksIHRlbmFudCwgbWV0YWRhdGEsIG9uRXJyb3IsIG9uVGFrZW92ZXIsIG9uRmluYWxpemUgfTogVXNlQ2hhdFByb3BzKSA9PiB7XG4gIGNvbnN0IFttZXNzYWdlcywgc2V0TWVzc2FnZXNdID0gdXNlU3RhdGU8Q2hhdE1lc3NhZ2VbXT4oW10pO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbcHJlbG9hZGVkQXR0YWNobWVudHMsIHNldFByZWxvYWRlZEF0dGFjaG1lbnRzXSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRbXT4oW10pO1xuICBjb25zdCBbY29ubmVjdGlvblN0YXRlLCBzZXRDb25uZWN0aW9uU3RhdGVdID0gdXNlU3RhdGU8J2Nvbm5lY3RpbmcnIHwgJ2Nvbm5lY3RlZCcgfCAnZGlzY29ubmVjdGVkJz4oJ2Rpc2Nvbm5lY3RlZCcpO1xuICBjb25zdCBbaXNBZ2VudFR5cGluZywgc2V0SXNBZ2VudFR5cGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IGNoYXRTZXJ2aWNlUmVmID0gdXNlUmVmPENoYXRTZXJ2aWNlIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtjb252ZXJzYXRpb25JZCwgc2V0Q29udmVyc2F0aW9uSWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtwb3NzaWJsZVF1ZXJpZXMsIHNldFBvc3NpYmxlUXVlcmllc10gPSB1c2VTdGF0ZTxzdHJpbmdbXT4oW10pO1xuICBjb25zdCBbd2VsY29tZVRpdGxlLCBzZXRXZWxjb21lVGl0bGVdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFt3ZWxjb21lSW1hZ2VVcmwsIHNldFdlbGNvbWVJbWFnZVVybF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3dlbGNvbWVNZXNzYWdlLCBzZXRXZWxjb21lTWVzc2FnZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3RoaW5raW5nUGhyYXNlcywgc2V0VGhpbmtpbmdQaHJhc2VzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSk7XG4gIGNvbnN0IFt0aGlua2luZ0RlbGF5TXMsIHNldFRoaW5raW5nRGVsYXlNc10gPSB1c2VTdGF0ZTxudW1iZXI+KDEwMDApO1xuICBjb25zdCBbaXNUYWtlbk92ZXIsIHNldElzVGFrZW5PdmVyXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW2lzRmluYWxpemVkLCBzZXRJc0ZpbmFsaXplZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG5cbiAgLy8gU2NvcGVkIG1lc3NhZ2VzIGtleSBmb3IgYXBpS2V5LCBjb252ZXJzYXRpb0lkXG4gIGNvbnN0IGJ1aWxkTWVzc2FnZXNLZXkgPSB1c2VDYWxsYmFjaygoYXBpS2V5VmFsOiBzdHJpbmcsIGNvbnZJZDogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgIGlmICghY29udklkKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gYGdlbmFzc2lzdF9jb252ZXJzYXRpb25fbWVzc2FnZXM6JHthcGlLZXlWYWx9OiR7Y29udklkfWA7XG4gIH0sIFtdKTtcblxuICAvLyBJbml0aWFsaXplIGNoYXQgc2VydmljZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQgPSBuZXcgQ2hhdFNlcnZpY2UoYmFzZVVybCwgYXBpS2V5LCBtZXRhZGF0YSwgdGVuYW50KTtcbiAgICBcbiAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldE1lc3NhZ2VIYW5kbGVyKChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZE1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAuLi5tZXNzYWdlLFxuICAgICAgICBjcmVhdGVfdGltZTogKCFtZXNzYWdlLmNyZWF0ZV90aW1lIHx8IGlzTmFOKG1lc3NhZ2UuY3JlYXRlX3RpbWUpKVxuICAgICAgICAgID8gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMClcbiAgICAgICAgICA6IG1lc3NhZ2UuY3JlYXRlX3RpbWUsXG4gICAgICB9O1xuXG4gICAgICBzZXRNZXNzYWdlcyhwcmV2TWVzc2FnZXMgPT4gWy4uLnByZXZNZXNzYWdlcywgbm9ybWFsaXplZE1lc3NhZ2VdKTtcbiAgICAgIC8vIFN0b3AgdHlwaW5nIGFuaW1hdGlvbiB3aGVuIGFnZW50IG9yIHN5c3RlbSBtZXNzYWdlIGFycml2ZXNcbiAgICAgIGlmIChub3JtYWxpemVkTWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnIHx8IG5vcm1hbGl6ZWRNZXNzYWdlLnNwZWFrZXIgPT09ICdzcGVjaWFsJykge1xuICAgICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0VGFrZW92ZXJIYW5kbGVyKCgpID0+IHtcbiAgICAgIHNldElzVGFrZW5PdmVyKHRydWUpO1xuICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICBpZiAob25UYWtlb3Zlcikge1xuICAgICAgICBvblRha2VvdmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldEZpbmFsaXplZEhhbmRsZXIoKCkgPT4ge1xuICAgICAgc2V0SXNGaW5hbGl6ZWQodHJ1ZSk7XG4gICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIGlmIChvbkZpbmFsaXplKSB7XG4gICAgICAgIG9uRmluYWxpemUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIENsZWFyIHR5cGluZyBhbmltYXRpb24gaWYgYWdlbnQgaXMgbm90IGNvbm5lY3RlZFxuICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0Q29ubmVjdGlvblN0YXRlSGFuZGxlcigoc3RhdGUpID0+IHtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZShzdGF0ZSk7XG4gICAgICBpZiAoc3RhdGUgIT09ICdjb25uZWN0ZWQnKSB7XG4gICAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRXZWxjb21lRGF0YUhhbmRsZXIoKGRhdGEpID0+IHtcbiAgICAgIHNldFdlbGNvbWVUaXRsZShkYXRhLnRpdGxlID8/IG51bGwpO1xuICAgICAgc2V0V2VsY29tZUltYWdlVXJsKGRhdGEuaW1hZ2VVcmwgPz8gbnVsbCk7XG4gICAgICBzZXRXZWxjb21lTWVzc2FnZShkYXRhLm1lc3NhZ2UgPz8gbnVsbCk7XG4gICAgICBpZiAoZGF0YS5wb3NzaWJsZVF1ZXJpZXMgJiYgZGF0YS5wb3NzaWJsZVF1ZXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBzZXRQb3NzaWJsZVF1ZXJpZXMoZGF0YS5wb3NzaWJsZVF1ZXJpZXMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2hlY2sgZm9yIGEgc2F2ZWQgY29udmVyc2F0aW9uIGFuZCBjb25uZWN0IHRvIGl0XG4gICAgY29uc3QgY29udklkID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRDb252ZXJzYXRpb25JZCgpO1xuICAgIGlmIChjb252SWQpIHtcbiAgICAgIHNldENvbnZlcnNhdGlvbklkKGNvbnZJZCk7XG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5pc0NvbnZlcnNhdGlvbkZpbmFsaXplZCgpKSB7XG4gICAgICAgIHNldElzRmluYWxpemVkKHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5jb25uZWN0V2ViU29ja2V0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFB1bGwgaW5pdGlhbCBzdGF0aWMgZGF0YVxuICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBxdWVyaWVzID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRQb3NzaWJsZVF1ZXJpZXM/LigpIHx8IFtdO1xuICAgICAgaWYgKHF1ZXJpZXMubGVuZ3RoKSBzZXRQb3NzaWJsZVF1ZXJpZXMocXVlcmllcyk7XG4gICAgICBjb25zdCB3ZWxjb21lID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRXZWxjb21lRGF0YT8uKCk7XG4gICAgICBpZiAod2VsY29tZSkge1xuICAgICAgICBzZXRXZWxjb21lVGl0bGUod2VsY29tZS50aXRsZSB8fCBudWxsKTtcbiAgICAgICAgc2V0V2VsY29tZUltYWdlVXJsKHdlbGNvbWUuaW1hZ2VVcmwgfHwgbnVsbCk7XG4gICAgICAgIHNldFdlbGNvbWVNZXNzYWdlKHdlbGNvbWUubWVzc2FnZSB8fCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRoaW5raW5nID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRUaGlua2luZ0NvbmZpZz8uKCk7XG4gICAgICBpZiAodGhpbmtpbmcpIHtcbiAgICAgICAgc2V0VGhpbmtpbmdQaHJhc2VzKHRoaW5raW5nLnBocmFzZXMgfHwgW10pO1xuICAgICAgICBzZXRUaGlua2luZ0RlbGF5TXModGhpbmtpbmcuZGVsYXlNcyB8fCAxMDAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGVhbnVwXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZGlzY29ubmVjdCgpO1xuICAgICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldFdlbGNvbWVEYXRhSGFuZGxlcihudWxsKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbYmFzZVVybCwgYXBpS2V5LCBtZXRhZGF0YSwgb25FcnJvciwgb25UYWtlb3Zlciwgb25GaW5hbGl6ZV0pO1xuXG4gIC8vIExvYWQgbWVzc2FnZXMgZm9yIGN1cnJlbnQgcGFpciB3aGVuIGF2YWlsYWJsZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGJ1aWxkTWVzc2FnZXNLZXkoYXBpS2V5LCBjb252ZXJzYXRpb25JZCk7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHNldE1lc3NhZ2VzKFtdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICBzZXRNZXNzYWdlcyhzdG9yZWQgPyBKU09OLnBhcnNlKHN0b3JlZCkgOiBbXSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldE1lc3NhZ2VzKFtdKTtcbiAgICB9XG4gIH0sIFthcGlLZXksIGNvbnZlcnNhdGlvbklkLCBidWlsZE1lc3NhZ2VzS2V5XSk7XG5cbiAgLy8gUGVyc2lzdCBtZXNzYWdlcyBmb3IgY3VycmVudCBwYWlyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYnVpbGRNZXNzYWdlc0tleShhcGlLZXksIGNvbnZlcnNhdGlvbklkKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VzKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfSwgW21lc3NhZ2VzLCBhcGlLZXksIGNvbnZlcnNhdGlvbklkLCBidWlsZE1lc3NhZ2VzS2V5XSk7XG5cbiAgLy8gUmVzZXQgY29udmVyc2F0aW9uXG4gIGNvbnN0IHJlc2V0Q29udmVyc2F0aW9uID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBzZXRDb25uZWN0aW9uU3RhdGUoJ2Nvbm5lY3RpbmcnKTtcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgc2V0TWVzc2FnZXMoW10pO1xuICAgIHNldFBvc3NpYmxlUXVlcmllcyhbXSk7XG4gICAgc2V0V2VsY29tZVRpdGxlKG51bGwpO1xuICAgIHNldFdlbGNvbWVJbWFnZVVybChudWxsKTtcbiAgICBzZXRXZWxjb21lTWVzc2FnZShudWxsKTtcbiAgICBzZXRUaGlua2luZ1BocmFzZXMoW10pO1xuICAgIHNldFRoaW5raW5nRGVsYXlNcygxMDAwKTtcbiAgICBjb25zdCBrZXkgPSBidWlsZE1lc3NhZ2VzS2V5KGFwaUtleSwgY29udmVyc2F0aW9uSWQpO1xuICAgIGlmIChrZXkpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgfVxuICAgIHNldElzRmluYWxpemVkKGZhbHNlKTtcbiAgICBzZXRJc1Rha2VuT3ZlcihmYWxzZSk7XG4gICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlc2V0IHRoZSBjb252ZXJzYXRpb24gaW4gdGhlIGNoYXQgc2VydmljZVxuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5yZXNldENvbnZlcnNhdGlvbigpO1xuICAgICAgXG4gICAgICAvLyBTdGFydCBhIG5ldyBjb252ZXJzYXRpb25cbiAgICAgIGNvbnN0IGNvbnZJZCA9IGF3YWl0IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc3RhcnRDb252ZXJzYXRpb24oKTtcbiAgICAgIHNldENvbnZlcnNhdGlvbklkKGNvbnZJZCk7XG4gICAgICBzZXRDb25uZWN0aW9uU3RhdGUoJ2Nvbm5lY3RlZCcpO1xuXG4gICAgICAvLyBHZXQgcG9zc2libGUgcXVlcmllcyBmcm9tIEFQSSByZXNwb25zZVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFBvc3NpYmxlUXVlcmllcygpO1xuICAgICAgICBpZiAocXVlcmllcyAmJiBxdWVyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZXRQb3NzaWJsZVF1ZXJpZXMocXVlcmllcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHdlbGNvbWUgYW5kIHRoaW5raW5nIGRhdGFcbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFdlbGNvbWVEYXRhKSB7XG4gICAgICAgIGNvbnN0IHdlbGNvbWUgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFdlbGNvbWVEYXRhKCk7XG4gICAgICAgIHNldFdlbGNvbWVUaXRsZSh3ZWxjb21lLnRpdGxlIHx8IG51bGwpO1xuICAgICAgICBzZXRXZWxjb21lSW1hZ2VVcmwod2VsY29tZS5pbWFnZVVybCB8fCBudWxsKTtcbiAgICAgICAgc2V0V2VsY29tZU1lc3NhZ2Uod2VsY29tZS5tZXNzYWdlIHx8IG51bGwpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0VGhpbmtpbmdDb25maWcpIHtcbiAgICAgICAgY29uc3QgdGhpbmtpbmcgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFRoaW5raW5nQ29uZmlnKCk7XG4gICAgICAgIHNldFRoaW5raW5nUGhyYXNlcyh0aGlua2luZy5waHJhc2VzIHx8IFtdKTtcbiAgICAgICAgc2V0VGhpbmtpbmdEZWxheU1zKHRoaW5raW5nLmRlbGF5TXMgfHwgMTAwMCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnZGlzY29ubmVjdGVkJyk7XG4gICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIGlmIChvbkVycm9yICYmIGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgb25FcnJvcihlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtvbkVycm9yXSk7XG5cbiAgY29uc3QgdXBsb2FkRmlsZSA9IHVzZUNhbGxiYWNrKGFzeW5jIChmaWxlOiBGaWxlKTogUHJvbWlzZTxBdHRhY2htZW50IHwgbnVsbD4gPT4ge1xuICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCB8fCAhY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRDb252ZXJzYXRpb25JZCgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBmaWxlVXJsIH0gPSBhd2FpdCBjaGF0U2VydmljZVJlZi5jdXJyZW50LnVwbG9hZEZpbGUoXG4gICAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0Q29udmVyc2F0aW9uSWQoKSBhcyBzdHJpbmcsXG4gICAgICAgIGZpbGVcbiAgICAgICk7XG4gICAgICBcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQgPSB7XG4gICAgICAgIG5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgdHlwZTogZmlsZS50eXBlLFxuICAgICAgICBzaXplOiBmaWxlLnNpemUsXG4gICAgICAgIHVybDogZmlsZVVybCxcbiAgICAgIH07XG5cbiAgICAgIHNldFByZWxvYWRlZEF0dGFjaG1lbnRzKHByZXYgPT4gWy4uLnByZXYsIGF0dGFjaG1lbnRdKTtcbiAgICAgIHJldHVybiBhdHRhY2htZW50O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAob25FcnJvcikge1xuICAgICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSwgW29uRXJyb3JdKTtcblxuICAvLyBTZW5kIG1lc3NhZ2VcbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhhc3luYyAodGV4dDogc3RyaW5nLCBmaWxlczogRmlsZVtdID0gW10sIGV4dHJhTWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB7XG4gICAgaWYgKCFjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYXQgc2VydmljZSBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuXG4gICAgICBjb25zdCBuZXdBdHRhY2htZW50czogQXR0YWNobWVudFtdID0gW107XG4gICAgICBcbiAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHVwbG9hZGVkRmlsZXMgPSBmaWxlcy5tYXAoZiA9PiBwcmVsb2FkZWRBdHRhY2htZW50cy5maW5kKHBhID0+IHBhLm5hbWUgPT09IGYubmFtZSAmJiBwYS5zaXplID09PSBmLnNpemUpKS5maWx0ZXIoQm9vbGVhbikgYXMgQXR0YWNobWVudFtdO1xuICAgICAgICBuZXdBdHRhY2htZW50cy5wdXNoKC4uLnVwbG9hZGVkRmlsZXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdGFydCB0eXBpbmcgaW1tZWRpYXRlbHkgd2hlbiB1c2VyIHNlbmRzLCB1bmxlc3MgY29udmVyc2F0aW9uIGlzIHRha2VuIG92ZXIgYnkgYSBodW1hblxuICAgICAgaWYgKCFpc1Rha2VuT3Zlcikge1xuICAgICAgICBzZXRJc0FnZW50VHlwaW5nKHRydWUpO1xuICAgICAgfVxuICAgICAgYXdhaXQgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZW5kTWVzc2FnZSh0ZXh0LCBuZXdBdHRhY2htZW50cywgZXh0cmFNZXRhZGF0YSk7XG5cbiAgICAgIHNldFByZWxvYWRlZEF0dGFjaG1lbnRzKFtdKTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIGlmIChvbkVycm9yICYmIGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgb25FcnJvcihlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtvbkVycm9yLCBwcmVsb2FkZWRBdHRhY2htZW50cywgaXNUYWtlbk92ZXJdKTtcblxuICBjb25zdCBzdGFydENvbnZlcnNhdGlvbiA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnY29ubmVjdGluZycpO1xuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgICAgXG4gICAgICAvLyBSZXNldCBzdGF0ZSBmb3IgbmV3IGNvbnZlcnNhdGlvblxuICAgICAgc2V0TWVzc2FnZXMoW10pO1xuICAgICAgc2V0UG9zc2libGVRdWVyaWVzKFtdKTtcbiAgICAgIGNvbnN0IGtleSA9IGJ1aWxkTWVzc2FnZXNLZXkoYXBpS2V5LCBjb252ZXJzYXRpb25JZCk7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgICB9XG4gICAgICBzZXRJc0ZpbmFsaXplZChmYWxzZSk7XG4gICAgICBzZXRJc1Rha2VuT3ZlcihmYWxzZSk7XG4gICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQucmVzZXRDb252ZXJzYXRpb24oKTtcblxuICAgICAgY29uc3QgY29udklkID0gYXdhaXQgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zdGFydENvbnZlcnNhdGlvbigpO1xuICAgICAgc2V0Q29udmVyc2F0aW9uSWQoY29udklkKTtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnY29ubmVjdGVkJyk7XG5cbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFBvc3NpYmxlUXVlcmllcykge1xuICAgICAgICBjb25zdCBxdWVyaWVzID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRQb3NzaWJsZVF1ZXJpZXMoKTtcbiAgICAgICAgaWYgKHF1ZXJpZXMgJiYgcXVlcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2V0UG9zc2libGVRdWVyaWVzKHF1ZXJpZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRXZWxjb21lRGF0YSkge1xuICAgICAgICBjb25zdCB3ZWxjb21lID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRXZWxjb21lRGF0YSgpO1xuICAgICAgICBzZXRXZWxjb21lVGl0bGUod2VsY29tZS50aXRsZSB8fCBudWxsKTtcbiAgICAgICAgc2V0V2VsY29tZUltYWdlVXJsKHdlbGNvbWUuaW1hZ2VVcmwgfHwgbnVsbCk7XG4gICAgICAgIHNldFdlbGNvbWVNZXNzYWdlKHdlbGNvbWUubWVzc2FnZSB8fCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFRoaW5raW5nQ29uZmlnKSB7XG4gICAgICAgIGNvbnN0IHRoaW5raW5nID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRUaGlua2luZ0NvbmZpZygpO1xuICAgICAgICBzZXRUaGlua2luZ1BocmFzZXModGhpbmtpbmcucGhyYXNlcyB8fCBbXSk7XG4gICAgICAgIHNldFRoaW5raW5nRGVsYXlNcyh0aGlua2luZy5kZWxheU1zIHx8IDEwMDApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzZXRDb25uZWN0aW9uU3RhdGUoJ2Rpc2Nvbm5lY3RlZCcpO1xuICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICBpZiAob25FcnJvciAmJiBlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIG9uRXJyb3IoZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9LCBbb25FcnJvcl0pO1xuXG4gIC8vIEFkZCBmZWVkYmFjayB0byBhbiBhZ2VudCBtZXNzYWdlXG4gIGNvbnN0IGFkZEZlZWRiYWNrID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKG1lc3NhZ2VJZDogc3RyaW5nLCB2YWx1ZTogJ2dvb2QnIHwgJ2JhZCcsIGZlZWRiYWNrTWVzc2FnZT86IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFjaGF0U2VydmljZVJlZi5jdXJyZW50IHx8ICFjb252ZXJzYXRpb25JZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjaGF0U2VydmljZVJlZi5jdXJyZW50LmFkZEZlZWRiYWNrKG1lc3NhZ2VJZCwgdmFsdWUsIGZlZWRiYWNrTWVzc2FnZSk7XG5cbiAgICAgICAgY29uc3QgbmV3RmVlZGJhY2s6IE1lc3NhZ2VGZWVkYmFjayA9IHtcbiAgICAgICAgICBmZWVkYmFjazogdmFsdWUsXG4gICAgICAgICAgZmVlZGJhY2tfbWVzc2FnZTogZmVlZGJhY2tNZXNzYWdlLFxuICAgICAgICAgIGZlZWRiYWNrX3RpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9O1xuXG4gICAgICAgIHNldE1lc3NhZ2VzKHByZXYgPT5cbiAgICAgICAgICBwcmV2Lm1hcChtID0+XG4gICAgICAgICAgICBtLm1lc3NhZ2VfaWQgPT09IG1lc3NhZ2VJZFxuICAgICAgICAgICAgICA/IHsgLi4ubSwgZmVlZGJhY2s6IFsuLi4obS5mZWVkYmFjayB8fCBbXSksIG5ld0ZlZWRiYWNrXSB9XG4gICAgICAgICAgICAgIDogbVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtjb252ZXJzYXRpb25JZCwgb25FcnJvcl1cbiAgKTtcblxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICB1cGxvYWRGaWxlLFxuICAgIHJlc2V0Q29udmVyc2F0aW9uLFxuICAgIHN0YXJ0Q29udmVyc2F0aW9uLFxuICAgIGNvbm5lY3Rpb25TdGF0ZSxcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBwb3NzaWJsZVF1ZXJpZXMsXG4gICAgaXNUYWtlbk92ZXIsXG4gICAgaXNGaW5hbGl6ZWQsXG4gICAgaXNBZ2VudFR5cGluZyxcbiAgICBhZGRGZWVkYmFjayxcbiAgICB3ZWxjb21lVGl0bGUsXG4gICAgd2VsY29tZUltYWdlVXJsLFxuICAgIHdlbGNvbWVNZXNzYWdlLFxuICAgIHRoaW5raW5nUGhyYXNlcyxcbiAgICB0aGlua2luZ0RlbGF5TXMsXG4gIH07XG59O1xuIl19
|
|
535
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlQ2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDMUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBYXRELE1BQU0sQ0FBQyxJQUFNLE9BQU8sR0FBRyxVQUFDLEVBQW9GO1FBQWxGLE9BQU8sYUFBQSxFQUFFLE1BQU0sWUFBQSxFQUFFLE1BQU0sWUFBQSxFQUFFLFFBQVEsY0FBQSxFQUFFLE9BQU8sYUFBQSxFQUFFLFVBQVUsZ0JBQUEsRUFBRSxVQUFVLGdCQUFBO0lBQ3BGLElBQUEsS0FBMEIsUUFBUSxDQUFnQixFQUFFLENBQUMsRUFBcEQsUUFBUSxRQUFBLEVBQUUsV0FBVyxRQUErQixDQUFDO0lBQ3RELElBQUEsS0FBNEIsUUFBUSxDQUFVLEtBQUssQ0FBQyxFQUFuRCxTQUFTLFFBQUEsRUFBRSxZQUFZLFFBQTRCLENBQUM7SUFDckQsSUFBQSxLQUFrRCxRQUFRLENBQWUsRUFBRSxDQUFDLEVBQTNFLG9CQUFvQixRQUFBLEVBQUUsdUJBQXVCLFFBQThCLENBQUM7SUFDN0UsSUFBQSxLQUF3QyxRQUFRLENBQThDLGNBQWMsQ0FBQyxFQUE1RyxlQUFlLFFBQUEsRUFBRSxrQkFBa0IsUUFBeUUsQ0FBQztJQUM5RyxJQUFBLEtBQW9DLFFBQVEsQ0FBVSxLQUFLLENBQUMsRUFBM0QsYUFBYSxRQUFBLEVBQUUsZ0JBQWdCLFFBQTRCLENBQUM7SUFDbkUsSUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFxQixJQUFJLENBQUMsQ0FBQztJQUNsRCxJQUFBLEtBQXNDLFFBQVEsQ0FBZ0IsSUFB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QWMsQ0FBQyxDQUFDO29CQUNyQyxDQUFDOzs7OztTQUVKLEVBQ0QsRUFBRSxDQUNILENBQUM7SUFFRixPQUFPO1FBQ0wsUUFBUSxVQUFBO1FBQ1IsU0FBUyxXQUFBO1FBQ1QsV0FBVyxhQUFBO1FBQ1gsVUFBVSxZQUFBO1FBQ1YsaUJBQWlCLG1CQUFBO1FBQ2pCLGlCQUFpQixtQkFBQTtRQUNqQixlQUFlLGlCQUFBO1FBQ2YsY0FBYyxnQkFBQTtRQUNkLGVBQWUsaUJBQUE7UUFDZixXQUFXLGFBQUE7UUFDWCxXQUFXLGFBQUE7UUFDWCxhQUFhLGVBQUE7UUFDYixXQUFXLGFBQUE7UUFDWCxZQUFZLGNBQUE7UUFDWixlQUFlLGlCQUFBO1FBQ2YsY0FBYyxnQkFBQTtRQUNkLGVBQWUsaUJBQUE7UUFDZixlQUFlLGlCQUFBO0tBQ2hCLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jaGF0U2VydmljZSc7XG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQXR0YWNobWVudCwgTWVzc2FnZUZlZWRiYWNrIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUNoYXRQcm9wcyB7XG4gIGJhc2VVcmw6IHN0cmluZztcbiAgYXBpS2V5OiBzdHJpbmc7XG4gIHRlbmFudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBvbkVycm9yPzogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgb25UYWtlb3Zlcj86ICgpID0+IHZvaWQ7XG4gIG9uRmluYWxpemU/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdCA9ICh7IGJhc2VVcmwsIGFwaUtleSwgdGVuYW50LCBtZXRhZGF0YSwgb25FcnJvciwgb25UYWtlb3Zlciwgb25GaW5hbGl6ZSB9OiBVc2VDaGF0UHJvcHMpID0+IHtcbiAgY29uc3QgW21lc3NhZ2VzLCBzZXRNZXNzYWdlc10gPSB1c2VTdGF0ZTxDaGF0TWVzc2FnZVtdPihbXSk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtwcmVsb2FkZWRBdHRhY2htZW50cywgc2V0UHJlbG9hZGVkQXR0YWNobWVudHNdID0gdXNlU3RhdGU8QXR0YWNobWVudFtdPihbXSk7XG4gIGNvbnN0IFtjb25uZWN0aW9uU3RhdGUsIHNldENvbm5lY3Rpb25TdGF0ZV0gPSB1c2VTdGF0ZTwnY29ubmVjdGluZycgfCAnY29ubmVjdGVkJyB8ICdkaXNjb25uZWN0ZWQnPignZGlzY29ubmVjdGVkJyk7XG4gIGNvbnN0IFtpc0FnZW50VHlwaW5nLCBzZXRJc0FnZW50VHlwaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgY2hhdFNlcnZpY2VSZWYgPSB1c2VSZWY8Q2hhdFNlcnZpY2UgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2NvbnZlcnNhdGlvbklkLCBzZXRDb252ZXJzYXRpb25JZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3Bvc3NpYmxlUXVlcmllcywgc2V0UG9zc2libGVRdWVyaWVzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSk7XG4gIGNvbnN0IFt3ZWxjb21lVGl0bGUsIHNldFdlbGNvbWVUaXRsZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3dlbGNvbWVJbWFnZVVybCwgc2V0V2VsY29tZUltYWdlVXJsXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbd2VsY29tZU1lc3NhZ2UsIHNldFdlbGNvbWVNZXNzYWdlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbdGhpbmtpbmdQaHJhc2VzLCBzZXRUaGlua2luZ1BocmFzZXNdID0gdXNlU3RhdGU8c3RyaW5nW10+KFtdKTtcbiAgY29uc3QgW3RoaW5raW5nRGVsYXlNcywgc2V0VGhpbmtpbmdEZWxheU1zXSA9IHVzZVN0YXRlPG51bWJlcj4oMTAwMCk7XG4gIGNvbnN0IFtpc1Rha2VuT3Zlciwgc2V0SXNUYWtlbk92ZXJdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbaXNGaW5hbGl6ZWQsIHNldElzRmluYWxpemVkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBTY29wZWQgbWVzc2FnZXMga2V5IGZvciBhcGlLZXksIGNvbnZlcnNhdGlvSWRcbiAgY29uc3QgYnVpbGRNZXNzYWdlc0tleSA9IHVzZUNhbGxiYWNrKChhcGlLZXlWYWw6IHN0cmluZywgY29udklkOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgaWYgKCFjb252SWQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBgZ2VuYXNzaXN0X2NvbnZlcnNhdGlvbl9tZXNzYWdlczoke2FwaUtleVZhbH06JHtjb252SWR9YDtcbiAgfSwgW10pO1xuXG4gIC8vIERlZXAgY29tcGFyZSBtZXRhZGF0YSB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLWluaXRpYWxpemF0aW9uc1xuICAvLyBPbmx5IHJlLWluaXRpYWxpemUgaWYgbWV0YWRhdGEgYWN0dWFsbHkgY2hhbmdlcyAoYnkgdmFsdWUsIG5vdCByZWZlcmVuY2UpXG4gIGNvbnN0IG1ldGFkYXRhU3RyaW5nID0gdXNlTWVtbygoKSA9PiBKU09OLnN0cmluZ2lmeShtZXRhZGF0YSB8fCB7fSksIFttZXRhZGF0YV0pO1xuICBjb25zdCBtZXRhZGF0YVJlZiA9IHVzZVJlZjxzdHJpbmc+KG1ldGFkYXRhU3RyaW5nKTtcbiAgY29uc3QgcHJldkJhc2VVcmxSZWYgPSB1c2VSZWY8c3RyaW5nPihiYXNlVXJsKTtcbiAgY29uc3QgcHJldkFwaUtleVJlZiA9IHVzZVJlZjxzdHJpbmc+KGFwaUtleSk7XG4gIGNvbnN0IHByZXZUZW5hbnRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih0ZW5hbnQpO1xuXG4gIC8vIFN0b3JlIGNhbGxiYWNrcyBpbiByZWZzIHNvIHRoZXkgZG9uJ3QgdHJpZ2dlciByZS1pbml0aWFsaXphdGlvblxuICBjb25zdCBvbkVycm9yUmVmID0gdXNlUmVmKG9uRXJyb3IpO1xuICBjb25zdCBvblRha2VvdmVyUmVmID0gdXNlUmVmKG9uVGFrZW92ZXIpO1xuICBjb25zdCBvbkZpbmFsaXplUmVmID0gdXNlUmVmKG9uRmluYWxpemUpO1xuXG4gIC8vIFVwZGF0ZSBjYWxsYmFjayByZWZzIHdoZW4gdGhleSBjaGFuZ2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBvbkVycm9yUmVmLmN1cnJlbnQgPSBvbkVycm9yO1xuICB9LCBbb25FcnJvcl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgb25UYWtlb3ZlclJlZi5jdXJyZW50ID0gb25UYWtlb3ZlcjtcbiAgfSwgW29uVGFrZW92ZXJdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIG9uRmluYWxpemVSZWYuY3VycmVudCA9IG9uRmluYWxpemU7XG4gIH0sIFtvbkZpbmFsaXplXSk7XG5cbiAgLy8gSW5pdGlhbGl6ZSBjaGF0IHNlcnZpY2UgLSBvbmx5IHdoZW4gYmFzZVVybCwgYXBpS2V5LCB0ZW5hbnQsIG9yIG1ldGFkYXRhIGFjdHVhbGx5IGNoYW5nZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG1ldGFkYXRhQ2hhbmdlZCA9IG1ldGFkYXRhUmVmLmN1cnJlbnQgIT09IG1ldGFkYXRhU3RyaW5nO1xuICAgIGNvbnN0IGJhc2VVcmxDaGFuZ2VkID0gcHJldkJhc2VVcmxSZWYuY3VycmVudCAhPT0gYmFzZVVybDtcbiAgICBjb25zdCBhcGlLZXlDaGFuZ2VkID0gcHJldkFwaUtleVJlZi5jdXJyZW50ICE9PSBhcGlLZXk7XG4gICAgY29uc3QgdGVuYW50Q2hhbmdlZCA9IHByZXZUZW5hbnRSZWYuY3VycmVudCAhPT0gdGVuYW50O1xuICAgIFxuICAgIGNvbnN0IG5lZWRzUmVpbml0ID0gIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQgfHwgYmFzZVVybENoYW5nZWQgfHwgYXBpS2V5Q2hhbmdlZCB8fCB0ZW5hbnRDaGFuZ2VkIHx8IG1ldGFkYXRhQ2hhbmdlZDtcblxuICAgIGlmIChuZWVkc1JlaW5pdCkge1xuICAgICAgLy8gVXBkYXRlIHJlZnNcbiAgICAgIGlmIChtZXRhZGF0YUNoYW5nZWQpIG1ldGFkYXRhUmVmLmN1cnJlbnQgPSBtZXRhZGF0YVN0cmluZztcbiAgICAgIGlmIChiYXNlVXJsQ2hhbmdlZCkgcHJldkJhc2VVcmxSZWYuY3VycmVudCA9IGJhc2VVcmw7XG4gICAgICBpZiAoYXBpS2V5Q2hhbmdlZCkgcHJldkFwaUtleVJlZi5jdXJyZW50ID0gYXBpS2V5O1xuICAgICAgaWYgKHRlbmFudENoYW5nZWQpIHByZXZUZW5hbnRSZWYuY3VycmVudCA9IHRlbmFudDtcblxuICAgICAgLy8gQ2xlYW4gdXAgZXhpc3Rpbmcgc2VydmljZSBpZiBpdCBleGlzdHNcbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZGlzY29ubmVjdCgpO1xuICAgICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldFdlbGNvbWVEYXRhSGFuZGxlcihudWxsKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudCA9IG5ldyBDaGF0U2VydmljZShiYXNlVXJsLCBhcGlLZXksIG1ldGFkYXRhLCB0ZW5hbnQpO1xuICAgICAgXG4gICAgICAvLyBTZXQgdXAgaGFuZGxlcnNcbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0TWVzc2FnZUhhbmRsZXIoKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAuLi5tZXNzYWdlLFxuICAgICAgICAgIGNyZWF0ZV90aW1lOiAoIW1lc3NhZ2UuY3JlYXRlX3RpbWUgfHwgaXNOYU4obWVzc2FnZS5jcmVhdGVfdGltZSkpXG4gICAgICAgICAgICA/IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApXG4gICAgICAgICAgICA6IG1lc3NhZ2UuY3JlYXRlX3RpbWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgc2V0TWVzc2FnZXMocHJldk1lc3NhZ2VzID0+IFsuLi5wcmV2TWVzc2FnZXMsIG5vcm1hbGl6ZWRNZXNzYWdlXSk7XG4gICAgICAgIC8vIFN0b3AgdHlwaW5nIGFuaW1hdGlvbiB3aGVuIGFnZW50IG9yIHN5c3RlbSBtZXNzYWdlIGFycml2ZXNcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRNZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcgfHwgbm9ybWFsaXplZE1lc3NhZ2Uuc3BlYWtlciA9PT0gJ3NwZWNpYWwnKSB7XG4gICAgICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldFRha2VvdmVySGFuZGxlcigoKSA9PiB7XG4gICAgICAgIHNldElzVGFrZW5PdmVyKHRydWUpO1xuICAgICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgICAgaWYgKG9uVGFrZW92ZXJSZWYuY3VycmVudCkge1xuICAgICAgICAgIG9uVGFrZW92ZXJSZWYuY3VycmVudCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRGaW5hbGl6ZWRIYW5kbGVyKCgpID0+IHtcbiAgICAgICAgc2V0SXNGaW5hbGl6ZWQodHJ1ZSk7XG4gICAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgICBpZiAob25GaW5hbGl6ZVJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgb25GaW5hbGl6ZVJlZi5jdXJyZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldENvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoKHN0YXRlKSA9PiB7XG4gICAgICAgIHNldENvbm5lY3Rpb25TdGF0ZShzdGF0ZSk7XG4gICAgICAgIGlmIChzdGF0ZSAhPT0gJ2Nvbm5lY3RlZCcpIHtcbiAgICAgICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0V2VsY29tZURhdGFIYW5kbGVyKChkYXRhKSA9PiB7XG4gICAgICAgIHNldFdlbGNvbWVUaXRsZShkYXRhLnRpdGxlID8/IG51bGwpO1xuICAgICAgICBzZXRXZWxjb21lSW1hZ2VVcmwoZGF0YS5pbWFnZVVybCA/PyBudWxsKTtcbiAgICAgICAgc2V0V2VsY29tZU1lc3NhZ2UoZGF0YS5tZXNzYWdlID8/IG51bGwpO1xuICAgICAgICBpZiAoZGF0YS5wb3NzaWJsZVF1ZXJpZXMgJiYgZGF0YS5wb3NzaWJsZVF1ZXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNldFBvc3NpYmxlUXVlcmllcyhkYXRhLnBvc3NpYmxlUXVlcmllcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBDaGVjayBmb3IgYSBzYXZlZCBjb252ZXJzYXRpb24gYW5kIGNvbm5lY3QgdG8gaXRcbiAgICAgIGNvbnN0IGNvbnZJZCA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0Q29udmVyc2F0aW9uSWQoKTtcbiAgICAgIGlmIChjb252SWQpIHtcbiAgICAgICAgc2V0Q29udmVyc2F0aW9uSWQoY29udklkKTtcbiAgICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuaXNDb252ZXJzYXRpb25GaW5hbGl6ZWQoKSkge1xuICAgICAgICAgIHNldElzRmluYWxpemVkKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuY29ubmVjdFdlYlNvY2tldCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBQdWxsIGluaXRpYWwgc3RhdGljIGRhdGFcbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFBvc3NpYmxlUXVlcmllcz8uKCkgfHwgW107XG4gICAgICAgIGlmIChxdWVyaWVzLmxlbmd0aCkgc2V0UG9zc2libGVRdWVyaWVzKHF1ZXJpZXMpO1xuICAgICAgICBjb25zdCB3ZWxjb21lID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRXZWxjb21lRGF0YT8uKCk7XG4gICAgICAgIGlmICh3ZWxjb21lKSB7XG4gICAgICAgICAgc2V0V2VsY29tZVRpdGxlKHdlbGNvbWUudGl0bGUgfHwgbnVsbCk7XG4gICAgICAgICAgc2V0V2VsY29tZUltYWdlVXJsKHdlbGNvbWUuaW1hZ2VVcmwgfHwgbnVsbCk7XG4gICAgICAgICAgc2V0V2VsY29tZU1lc3NhZ2Uod2VsY29tZS5tZXNzYWdlIHx8IG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRoaW5raW5nID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRUaGlua2luZ0NvbmZpZz8uKCk7XG4gICAgICAgIGlmICh0aGlua2luZykge1xuICAgICAgICAgIHNldFRoaW5raW5nUGhyYXNlcyh0aGlua2luZy5waHJhc2VzIHx8IFtdKTtcbiAgICAgICAgICBzZXRUaGlua2luZ0RlbGF5TXModGhpbmtpbmcuZGVsYXlNcyB8fCAxMDAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudCAmJiBtZXRhZGF0YSkge1xuICAgICAgLy8gSnVzdCB1cGRhdGUgbWV0YWRhdGEgd2l0aG91dCByZS1pbml0aWFsaXppbmdcbiAgICAgIChjaGF0U2VydmljZVJlZi5jdXJyZW50IGFzIGFueSkubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICB9XG5cbiAgICAvLyBBbHdheXMgdXBkYXRlIGhhbmRsZXJzIHdoZW4gY2FsbGJhY2tzIGNoYW5nZSAod2l0aG91dCByZS1pbml0aWFsaXppbmcpXG4gICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0VGFrZW92ZXJIYW5kbGVyKCgpID0+IHtcbiAgICAgICAgc2V0SXNUYWtlbk92ZXIodHJ1ZSk7XG4gICAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgICBpZiAob25UYWtlb3ZlclJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgb25UYWtlb3ZlclJlZi5jdXJyZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldEZpbmFsaXplZEhhbmRsZXIoKCkgPT4ge1xuICAgICAgICBzZXRJc0ZpbmFsaXplZCh0cnVlKTtcbiAgICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICAgIGlmIChvbkZpbmFsaXplUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkZpbmFsaXplUmVmLmN1cnJlbnQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW51cCBvbmx5IG9uIHVubW91bnRcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgLy8gT25seSBjbGVhbnVwIG9uIHVubW91bnQsIG5vdCBvbiBldmVyeSBkZXBlbmRlbmN5IGNoYW5nZVxuICAgIH07XG4gIH0sIFtiYXNlVXJsLCBhcGlLZXksIHRlbmFudCwgbWV0YWRhdGFTdHJpbmddKTtcblxuICAvLyBMb2FkIG1lc3NhZ2VzIGZvciBjdXJyZW50IHBhaXIgd2hlbiBhdmFpbGFibGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBrZXkgPSBidWlsZE1lc3NhZ2VzS2V5KGFwaUtleSwgY29udmVyc2F0aW9uSWQpO1xuICAgIGlmICgha2V5KSB7XG4gICAgICBzZXRNZXNzYWdlcyhbXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgc2V0TWVzc2FnZXMoc3RvcmVkID8gSlNPTi5wYXJzZShzdG9yZWQpIDogW10pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzZXRNZXNzYWdlcyhbXSk7XG4gICAgfVxuICB9LCBbYXBpS2V5LCBjb252ZXJzYXRpb25JZCwgYnVpbGRNZXNzYWdlc0tleV0pO1xuXG4gIC8vIFBlcnNpc3QgbWVzc2FnZXMgZm9yIGN1cnJlbnQgcGFpclxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGJ1aWxkTWVzc2FnZXNLZXkoYXBpS2V5LCBjb252ZXJzYXRpb25JZCk7XG4gICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShtZXNzYWdlcykpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH0sIFttZXNzYWdlcywgYXBpS2V5LCBjb252ZXJzYXRpb25JZCwgYnVpbGRNZXNzYWdlc0tleV0pO1xuXG4gIC8vIFJlc2V0IGNvbnZlcnNhdGlvblxuICBjb25zdCByZXNldENvbnZlcnNhdGlvbiA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgc2V0Q29ubmVjdGlvblN0YXRlKCdjb25uZWN0aW5nJyk7XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIHNldE1lc3NhZ2VzKFtdKTtcbiAgICBzZXRQb3NzaWJsZVF1ZXJpZXMoW10pO1xuICAgIHNldFdlbGNvbWVUaXRsZShudWxsKTtcbiAgICBzZXRXZWxjb21lSW1hZ2VVcmwobnVsbCk7XG4gICAgc2V0V2VsY29tZU1lc3NhZ2UobnVsbCk7XG4gICAgc2V0VGhpbmtpbmdQaHJhc2VzKFtdKTtcbiAgICBzZXRUaGlua2luZ0RlbGF5TXMoMTAwMCk7XG4gICAgY29uc3Qga2V5ID0gYnVpbGRNZXNzYWdlc0tleShhcGlLZXksIGNvbnZlcnNhdGlvbklkKTtcbiAgICBpZiAoa2V5KSB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgIH1cbiAgICBzZXRJc0ZpbmFsaXplZChmYWxzZSk7XG4gICAgc2V0SXNUYWtlbk92ZXIoZmFsc2UpO1xuICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBSZXNldCB0aGUgY29udmVyc2F0aW9uIGluIHRoZSBjaGF0IHNlcnZpY2VcbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQucmVzZXRDb252ZXJzYXRpb24oKTtcbiAgICAgIFxuICAgICAgLy8gU3RhcnQgYSBuZXcgY29udmVyc2F0aW9uXG4gICAgICBjb25zdCBjb252SWQgPSBhd2FpdCBjaGF0U2VydmljZVJlZi5jdXJyZW50LnN0YXJ0Q29udmVyc2F0aW9uKCk7XG4gICAgICBzZXRDb252ZXJzYXRpb25JZChjb252SWQpO1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdjb25uZWN0ZWQnKTtcblxuICAgICAgLy8gR2V0IHBvc3NpYmxlIHF1ZXJpZXMgZnJvbSBBUEkgcmVzcG9uc2VcbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFBvc3NpYmxlUXVlcmllcykge1xuICAgICAgICBjb25zdCBxdWVyaWVzID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRQb3NzaWJsZVF1ZXJpZXMoKTtcbiAgICAgICAgaWYgKHF1ZXJpZXMgJiYgcXVlcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2V0UG9zc2libGVRdWVyaWVzKHF1ZXJpZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyB3ZWxjb21lIGFuZCB0aGlua2luZyBkYXRhXG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRXZWxjb21lRGF0YSkge1xuICAgICAgICBjb25zdCB3ZWxjb21lID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRXZWxjb21lRGF0YSgpO1xuICAgICAgICBzZXRXZWxjb21lVGl0bGUod2VsY29tZS50aXRsZSB8fCBudWxsKTtcbiAgICAgICAgc2V0V2VsY29tZUltYWdlVXJsKHdlbGNvbWUuaW1hZ2VVcmwgfHwgbnVsbCk7XG4gICAgICAgIHNldFdlbGNvbWVNZXNzYWdlKHdlbGNvbWUubWVzc2FnZSB8fCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFRoaW5raW5nQ29uZmlnKSB7XG4gICAgICAgIGNvbnN0IHRoaW5raW5nID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRUaGlua2luZ0NvbmZpZygpO1xuICAgICAgICBzZXRUaGlua2luZ1BocmFzZXModGhpbmtpbmcucGhyYXNlcyB8fCBbXSk7XG4gICAgICAgIHNldFRoaW5raW5nRGVsYXlNcyh0aGlua2luZy5kZWxheU1zIHx8IDEwMDApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzZXRDb25uZWN0aW9uU3RhdGUoJ2Rpc2Nvbm5lY3RlZCcpO1xuICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICBpZiAob25FcnJvclJlZi5jdXJyZW50ICYmIGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgb25FcnJvclJlZi5jdXJyZW50KGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIGNvbnN0IHVwbG9hZEZpbGUgPSB1c2VDYWxsYmFjayhhc3luYyAoZmlsZTogRmlsZSk6IFByb21pc2U8QXR0YWNobWVudCB8IG51bGw+ID0+IHtcbiAgICBpZiAoIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQgfHwgIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0Q29udmVyc2F0aW9uSWQoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZmlsZVVybCB9ID0gYXdhaXQgY2hhdFNlcnZpY2VSZWYuY3VycmVudC51cGxvYWRGaWxlKFxuICAgICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldENvbnZlcnNhdGlvbklkKCkgYXMgc3RyaW5nLFxuICAgICAgICBmaWxlXG4gICAgICApO1xuICAgICAgXG4gICAgICBjb25zdCBhdHRhY2htZW50OiBBdHRhY2htZW50ID0ge1xuICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIHR5cGU6IGZpbGUudHlwZSxcbiAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICB1cmw6IGZpbGVVcmwsXG4gICAgICB9O1xuXG4gICAgICBzZXRQcmVsb2FkZWRBdHRhY2htZW50cyhwcmV2ID0+IFsuLi5wcmV2LCBhdHRhY2htZW50XSk7XG4gICAgICByZXR1cm4gYXR0YWNobWVudDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKG9uRXJyb3JSZWYuY3VycmVudCkge1xuICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQoZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgLy8gU2VuZCBtZXNzYWdlXG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soYXN5bmMgKHRleHQ6IHN0cmluZywgZmlsZXM6IEZpbGVbXSA9IFtdLCBleHRyYU1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PikgPT4ge1xuICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGF0IHNlcnZpY2Ugbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHNldElzTG9hZGluZyh0cnVlKTtcblxuICAgICAgY29uc3QgbmV3QXR0YWNobWVudHM6IEF0dGFjaG1lbnRbXSA9IFtdO1xuICAgICAgXG4gICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB1cGxvYWRlZEZpbGVzID0gZmlsZXMubWFwKGYgPT4gcHJlbG9hZGVkQXR0YWNobWVudHMuZmluZChwYSA9PiBwYS5uYW1lID09PSBmLm5hbWUgJiYgcGEuc2l6ZSA9PT0gZi5zaXplKSkuZmlsdGVyKEJvb2xlYW4pIGFzIEF0dGFjaG1lbnRbXTtcbiAgICAgICAgbmV3QXR0YWNobWVudHMucHVzaCguLi51cGxvYWRlZEZpbGVzKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RhcnQgdHlwaW5nIGltbWVkaWF0ZWx5IHdoZW4gdXNlciBzZW5kcywgdW5sZXNzIGNvbnZlcnNhdGlvbiBpcyB0YWtlbiBvdmVyIGJ5IGEgaHVtYW5cbiAgICAgIGlmICghaXNUYWtlbk92ZXIpIHtcbiAgICAgICAgc2V0SXNBZ2VudFR5cGluZyh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2VuZE1lc3NhZ2UodGV4dCwgbmV3QXR0YWNobWVudHMsIGV4dHJhTWV0YWRhdGEpO1xuXG4gICAgICBzZXRQcmVsb2FkZWRBdHRhY2htZW50cyhbXSk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICBpZiAob25FcnJvclJlZi5jdXJyZW50ICYmIGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgb25FcnJvclJlZi5jdXJyZW50KGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfSwgW3ByZWxvYWRlZEF0dGFjaG1lbnRzLCBpc1Rha2VuT3Zlcl0pO1xuXG4gIGNvbnN0IHN0YXJ0Q29udmVyc2F0aW9uID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdjb25uZWN0aW5nJyk7XG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgICBcbiAgICAgIC8vIFJlc2V0IHN0YXRlIGZvciBuZXcgY29udmVyc2F0aW9uXG4gICAgICBzZXRNZXNzYWdlcyhbXSk7XG4gICAgICBzZXRQb3NzaWJsZVF1ZXJpZXMoW10pO1xuICAgICAgY29uc3Qga2V5ID0gYnVpbGRNZXNzYWdlc0tleShhcGlLZXksIGNvbnZlcnNhdGlvbklkKTtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgIH1cbiAgICAgIHNldElzRmluYWxpemVkKGZhbHNlKTtcbiAgICAgIHNldElzVGFrZW5PdmVyKGZhbHNlKTtcbiAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5yZXNldENvbnZlcnNhdGlvbigpO1xuXG4gICAgICBjb25zdCBjb252SWQgPSBhd2FpdCBjaGF0U2VydmljZVJlZi5jdXJyZW50LnN0YXJ0Q29udmVyc2F0aW9uKCk7XG4gICAgICBzZXRDb252ZXJzYXRpb25JZChjb252SWQpO1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdjb25uZWN0ZWQnKTtcblxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFBvc3NpYmxlUXVlcmllcygpO1xuICAgICAgICBpZiAocXVlcmllcyAmJiBxdWVyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZXRQb3NzaWJsZVF1ZXJpZXMocXVlcmllcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFdlbGNvbWVEYXRhKSB7XG4gICAgICAgIGNvbnN0IHdlbGNvbWUgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFdlbGNvbWVEYXRhKCk7XG4gICAgICAgIHNldFdlbGNvbWVUaXRsZSh3ZWxjb21lLnRpdGxlIHx8IG51bGwpO1xuICAgICAgICBzZXRXZWxjb21lSW1hZ2VVcmwod2VsY29tZS5pbWFnZVVybCB8fCBudWxsKTtcbiAgICAgICAgc2V0V2VsY29tZU1lc3NhZ2Uod2VsY29tZS5tZXNzYWdlIHx8IG51bGwpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0VGhpbmtpbmdDb25maWcpIHtcbiAgICAgICAgY29uc3QgdGhpbmtpbmcgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFRoaW5raW5nQ29uZmlnKCk7XG4gICAgICAgIHNldFRoaW5raW5nUGhyYXNlcyh0aGlua2luZy5waHJhc2VzIHx8IFtdKTtcbiAgICAgICAgc2V0VGhpbmtpbmdEZWxheU1zKHRoaW5raW5nLmRlbGF5TXMgfHwgMTAwMCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnZGlzY29ubmVjdGVkJyk7XG4gICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIGlmIChvbkVycm9yUmVmLmN1cnJlbnQgJiYgZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQoZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgLy8gQWRkIGZlZWRiYWNrIHRvIGFuIGFnZW50IG1lc3NhZ2VcbiAgY29uc3QgYWRkRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAobWVzc2FnZUlkOiBzdHJpbmcsIHZhbHVlOiAnZ29vZCcgfCAnYmFkJywgZmVlZGJhY2tNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IHNlbmQgZmVlZGJhY2s6IENoYXRTZXJ2aWNlIG5vdCBpbml0aWFsaXplZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIW1lc3NhZ2VJZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3Qgc2VuZCBmZWVkYmFjazogbWVzc2FnZUlkIGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5hZGRGZWVkYmFjayhtZXNzYWdlSWQsIHZhbHVlLCBmZWVkYmFja01lc3NhZ2UpO1xuXG4gICAgICAgIGNvbnN0IG5ld0ZlZWRiYWNrOiBNZXNzYWdlRmVlZGJhY2sgPSB7XG4gICAgICAgICAgZmVlZGJhY2s6IHZhbHVlLFxuICAgICAgICAgIGZlZWRiYWNrX21lc3NhZ2U6IGZlZWRiYWNrTWVzc2FnZSxcbiAgICAgICAgICBmZWVkYmFja190aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcblxuICAgICAgICBzZXRNZXNzYWdlcyhwcmV2ID0+XG4gICAgICAgICAgcHJldi5tYXAobSA9PiB7XG4gICAgICAgICAgICAvLyBNYXRjaCBieSBtZXNzYWdlX2lkIG9yIGlkIGZpZWxkXG4gICAgICAgICAgICBjb25zdCBtc2dJZCA9IG0ubWVzc2FnZV9pZCB8fCAobSBhcyBhbnkpLmlkO1xuICAgICAgICAgICAgcmV0dXJuIG1zZ0lkID09PSBtZXNzYWdlSWRcbiAgICAgICAgICAgICAgPyB7IC4uLm0sIGZlZWRiYWNrOiBbLi4uKG0uZmVlZGJhY2sgfHwgW10pLCBuZXdGZWVkYmFja10gfVxuICAgICAgICAgICAgICA6IG07XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChvbkVycm9yUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQoZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIHVwbG9hZEZpbGUsXG4gICAgcmVzZXRDb252ZXJzYXRpb24sXG4gICAgc3RhcnRDb252ZXJzYXRpb24sXG4gICAgY29ubmVjdGlvblN0YXRlLFxuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHBvc3NpYmxlUXVlcmllcyxcbiAgICBpc1Rha2VuT3ZlcixcbiAgICBpc0ZpbmFsaXplZCxcbiAgICBpc0FnZW50VHlwaW5nLFxuICAgIGFkZEZlZWRiYWNrLFxuICAgIHdlbGNvbWVUaXRsZSxcbiAgICB3ZWxjb21lSW1hZ2VVcmwsXG4gICAgd2VsY29tZU1lc3NhZ2UsXG4gICAgdGhpbmtpbmdQaHJhc2VzLFxuICAgIHRoaW5raW5nRGVsYXlNcyxcbiAgfTtcbn07XG4iXX0=
|
package/dist/index.d.ts
CHANGED
|
@@ -6,5 +6,6 @@ export { ChatBubble } from './components/ChatBubble';
|
|
|
6
6
|
export { ChatService } from './services/chatService';
|
|
7
7
|
export { useChat } from './hooks/useChat';
|
|
8
8
|
export type { UseChatProps } from './hooks/useChat';
|
|
9
|
-
export type { Attachment, AgentWelcomeData, AgentThinkingConfig, ChatContentBlock, DynamicChatItem, ScheduleItem, } from './types';
|
|
9
|
+
export type { Attachment, AgentWelcomeData, AgentThinkingConfig, ChatContentBlock, DynamicChatItem, ScheduleItem, Translations, } from './types';
|
|
10
10
|
export { parseInteractiveContentBlocks, generateMessageContent, } from './utils/interactiveContent';
|
|
11
|
+
export { defaultTranslations, spanishTranslations, frenchTranslations, germanTranslations, italianTranslations, portugueseTranslations, translationsByLanguage, getBrowserLanguage, getTranslation, getTranslationString, getTranslationArray, resolveLanguage, mergeTranslations, getTranslationsForLanguage, } from './utils/i18n';
|
package/dist/index.js
CHANGED
|
@@ -4,4 +4,5 @@ export { ChatBubble } from './components/ChatBubble';
|
|
|
4
4
|
export { ChatService } from './services/chatService';
|
|
5
5
|
export { useChat } from './hooks/useChat';
|
|
6
6
|
export { parseInteractiveContentBlocks, generateMessageContent, } from './utils/interactiveContent';
|
|
7
|
-
|
|
7
|
+
export { defaultTranslations, spanishTranslations, frenchTranslations, germanTranslations, italianTranslations, portugueseTranslations, translationsByLanguage, getBrowserLanguage, getTranslation, getTranslationString, getTranslationArray, resolveLanguage, mergeTranslations, getTranslationsForLanguage, } from './utils/i18n';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBTXZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBVzFDLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0Isc0JBQXNCLEdBQ3ZCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGlCQUFpQixFQUNqQiwwQkFBMEIsR0FDM0IsTUFBTSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBHZW5BZ2VudENoYXQgfSBmcm9tICcuL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0JztcbmV4cG9ydCB0eXBlIHsgR2VuQWdlbnRDaGF0UHJvcHMsIENoYXRNZXNzYWdlIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgeyBHZW5BZ2VudENvbmZpZ1BhbmVsIH0gZnJvbSAnLi9jb21wb25lbnRzL0dlbkFnZW50Q29uZmlnUGFuZWwnO1xuZXhwb3J0IHR5cGUge1xuICBHZW5BZ2VudENvbmZpZ1BhbmVsUHJvcHMsXG4gIENoYXRUaGVtZSxcbiAgQ2hhdFNldHRpbmdzQ29uZmlnLFxufSBmcm9tICcuL2NvbXBvbmVudHMvR2VuQWdlbnRDb25maWdQYW5lbCc7XG5leHBvcnQgeyBDaGF0QnViYmxlIH0gZnJvbSAnLi9jb21wb25lbnRzL0NoYXRCdWJibGUnO1xuZXhwb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NoYXRTZXJ2aWNlJztcbmV4cG9ydCB7IHVzZUNoYXQgfSBmcm9tICcuL2hvb2tzL3VzZUNoYXQnO1xuZXhwb3J0IHR5cGUgeyBVc2VDaGF0UHJvcHMgfSBmcm9tICcuL2hvb2tzL3VzZUNoYXQnO1xuZXhwb3J0IHR5cGUge1xuICBBdHRhY2htZW50LFxuICBBZ2VudFdlbGNvbWVEYXRhLFxuICBBZ2VudFRoaW5raW5nQ29uZmlnLFxuICBDaGF0Q29udGVudEJsb2NrLFxuICBEeW5hbWljQ2hhdEl0ZW0sXG4gIFNjaGVkdWxlSXRlbSxcbiAgVHJhbnNsYXRpb25zLFxufSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCB7XG4gIHBhcnNlSW50ZXJhY3RpdmVDb250ZW50QmxvY2tzLFxuICBnZW5lcmF0ZU1lc3NhZ2VDb250ZW50LFxufSBmcm9tICcuL3V0aWxzL2ludGVyYWN0aXZlQ29udGVudCc7XG5leHBvcnQge1xuICBkZWZhdWx0VHJhbnNsYXRpb25zLFxuICBzcGFuaXNoVHJhbnNsYXRpb25zLFxuICBmcmVuY2hUcmFuc2xhdGlvbnMsXG4gIGdlcm1hblRyYW5zbGF0aW9ucyxcbiAgaXRhbGlhblRyYW5zbGF0aW9ucyxcbiAgcG9ydHVndWVzZVRyYW5zbGF0aW9ucyxcbiAgdHJhbnNsYXRpb25zQnlMYW5ndWFnZSxcbiAgZ2V0QnJvd3Nlckxhbmd1YWdlLFxuICBnZXRUcmFuc2xhdGlvbixcbiAgZ2V0VHJhbnNsYXRpb25TdHJpbmcsXG4gIGdldFRyYW5zbGF0aW9uQXJyYXksXG4gIHJlc29sdmVMYW5ndWFnZSxcbiAgbWVyZ2VUcmFuc2xhdGlvbnMsXG4gIGdldFRyYW5zbGF0aW9uc0Zvckxhbmd1YWdlLFxufSBmcm9tICcuL3V0aWxzL2kxOG4nO1xuIl19
|