genassist-chat-react 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -22,6 +22,7 @@ function App() {
22
22
  <GenAgentChat
23
23
  baseUrl="https://your-api-base-url.com"
24
24
  apiKey="your-api-key"
25
+ tenant="your-tenant-id"
25
26
  />
26
27
  </div>
27
28
  );
@@ -58,6 +59,7 @@ function App() {
58
59
  <GenAgentChat
59
60
  baseUrl="https://your-api-base-url.com"
60
61
  apiKey="your-api-key"
62
+ tenant="your-tenant-id"
61
63
  userData={userData}
62
64
  theme={theme}
63
65
  headerTitle="Customer Support"
@@ -21,6 +21,12 @@ interface ChatMessageProps {
21
21
  isFirstMessage?: boolean;
22
22
  isNextSameSpeaker?: boolean;
23
23
  isPrevSameSpeaker?: boolean;
24
+ onFeedback?: (messageId: string, value: 'good' | 'bad') => void;
25
+ enableTypewriter?: boolean;
26
+ welcomeImageUrl?: string;
27
+ welcomeTitle?: string;
28
+ possibleQueries?: string[];
29
+ onQuickQuery?: (query: string) => void;
24
30
  }
25
31
  export declare const ChatMessageComponent: React.FC<ChatMessageProps>;
26
32
  export {};
@@ -9,9 +9,9 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
13
  import React from 'react';
14
- import { User, UserX, AlertCircle, FileText, FileJson, FileImage, Loader2 } from 'lucide-react';
14
+ import { User, UserX, AlertCircle, FileText, FileJson, FileImage, Loader2, ThumbsUp, ThumbsDown } from 'lucide-react';
15
15
  export var AttachmentPreview = function (_a) {
16
16
  var file = _a.file, onRemove = _a.onRemove, _b = _a.uploading, uploading = _b === void 0 ? false : _b;
17
17
  var fileType = file.type;
@@ -92,10 +92,15 @@ export var AttachmentPreview = function (_a) {
92
92
  return (_jsxs("div", { style: containerStyle, children: [isImage && imagePreview ? (_jsx("img", { src: imagePreview, alt: file.name, style: imageStyle })) : (_jsx("div", { style: { marginRight: '10px' }, children: getFileIcon(fileType) })), _jsxs("div", { style: fileInfoStyle, children: [_jsx("div", { style: fileNameStyle, title: file.name, children: file.name }), _jsxs("div", { style: fileSizeStyle, children: [(file.size / 1024).toFixed(2), " KB"] })] }), !uploading && (_jsx("button", { onClick: onRemove, style: removeButtonStyle, title: "Remove file", children: "\u2715" })), uploading && (_jsx("div", { style: uploadingOverlayStyle, children: _jsx(Loader2, { size: 24, color: "#000", style: loaderSpinStyle }) })), _jsx("style", { children: "\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n " })] }));
93
93
  };
94
94
  export var ChatMessageComponent = function (_a) {
95
- var message = _a.message, theme = _a.theme, onPlayAudio = _a.onPlayAudio, isPlayingAudio = _a.isPlayingAudio, _b = _a.isFirstMessage, isFirstMessage = _b === void 0 ? false : _b, _c = _a.isNextSameSpeaker, isNextSameSpeaker = _c === void 0 ? false : _c, _d = _a.isPrevSameSpeaker, isPrevSameSpeaker = _d === void 0 ? false : _d;
95
+ var message = _a.message, theme = _a.theme, onPlayAudio = _a.onPlayAudio, isPlayingAudio = _a.isPlayingAudio, _b = _a.isFirstMessage, isFirstMessage = _b === void 0 ? false : _b, _c = _a.isNextSameSpeaker, isNextSameSpeaker = _c === void 0 ? false : _c, _d = _a.isPrevSameSpeaker, isPrevSameSpeaker = _d === void 0 ? false : _d, onFeedback = _a.onFeedback, _e = _a.enableTypewriter, enableTypewriter = _e === void 0 ? false : _e, welcomeImageUrl = _a.welcomeImageUrl, welcomeTitleProp = _a.welcomeTitle, possibleQueries = _a.possibleQueries, onQuickQuery = _a.onQuickQuery;
96
96
  var isUser = message.speaker === 'customer';
97
97
  var isSpecial = message.speaker === 'special';
98
98
  var isWelcomeMessage = !isUser && !isSpecial && isFirstMessage;
99
+ var _f = React.useState(false), isHovered = _f[0], setIsHovered = _f[1];
100
+ var _g = React.useState(false), editingFeedback = _g[0], setEditingFeedback = _g[1];
101
+ var _h = React.useState(message.text), displayText = _h[0], setDisplayText = _h[1];
102
+ var _j = React.useState(false), isTypewriting = _j[0], setIsTypewriting = _j[1];
103
+ var lastAnimatedRef = React.useRef('');
99
104
  var formatTimestamp = function (timestamp) {
100
105
  try {
101
106
  if (!timestamp || isNaN(timestamp)) {
@@ -133,9 +138,36 @@ export var ChatMessageComponent = function (_a) {
133
138
  }
134
139
  };
135
140
  var timestamp = formatTimestamp(message.create_time);
136
- var userBubbleBgColor = (theme === null || theme === void 0 ? void 0 : theme.primaryColor) || '#2563EB';
137
- var userTextColor = '#ffffff';
138
- var agentBubbleBgColor = (theme === null || theme === void 0 ? void 0 : theme.secondaryColor) || '#eeeeee';
141
+ // Fast typewriter effect for newly displayed agent messages, fix later
142
+ // React.useEffect(() => {
143
+ // if (!isUser && !isSpecial && enableTypewriter && message.text !== lastAnimatedRef.current) {
144
+ // lastAnimatedRef.current = message.text;
145
+ // setIsTypewriting(true);
146
+ // setDisplayText('');
147
+ // let i = 0;
148
+ // const total = message.text.length;
149
+ // const tickMs = 16;
150
+ // const targetMs = 1200;
151
+ // const charsPerTick = Math.max(1, Math.round(total / (targetMs / tickMs)));
152
+ // const interval = window.setInterval(() => {
153
+ // i += charsPerTick;
154
+ // if (i >= total) {
155
+ // setDisplayText(message.text);
156
+ // setIsTypewriting(false);
157
+ // window.clearInterval(interval);
158
+ // } else {
159
+ // setDisplayText(message.text.slice(0, i));
160
+ // }
161
+ // }, tickMs);
162
+ // return () => window.clearInterval(interval);
163
+ // } else {
164
+ // setDisplayText(message.text);
165
+ // setIsTypewriting(false);
166
+ // }
167
+ // }, [message.text, enableTypewriter, isUser, isSpecial]);
168
+ // Updated design colors
169
+ var userBubbleBgColor = '#E4E4E7'; // grey for user
170
+ var userTextColor = '#000000';
139
171
  var agentTextColor = '#000000';
140
172
  var fontFamily = (theme === null || theme === void 0 ? void 0 : theme.fontFamily) || 'Roboto, Arial, sans-serif';
141
173
  var fontSize = (theme === null || theme === void 0 ? void 0 : theme.fontSize) || '15px';
@@ -153,15 +185,23 @@ export var ChatMessageComponent = function (_a) {
153
185
  width: '100%',
154
186
  justifyContent: isUser ? 'flex-end' : 'flex-start',
155
187
  };
156
- var labelContainerStyle = {
188
+ var labelRowStyle = {
157
189
  display: isPrevSameSpeaker ? 'none' : 'flex',
158
190
  width: '80%',
159
191
  justifyContent: isUser ? 'flex-end' : 'flex-start',
160
- marginBottom: '4px',
192
+ alignItems: 'baseline',
193
+ gap: '8px',
194
+ marginBottom: '6px',
161
195
  };
162
196
  var messageLabelStyle = {
163
- fontSize: '12px',
164
- color: '#757575',
197
+ fontSize: '14px',
198
+ color: '#000000',
199
+ lineHeight: 1,
200
+ fontWeight: 600,
201
+ };
202
+ var topTimestampStyle = {
203
+ fontSize: '13px',
204
+ color: '#6b7280',
165
205
  lineHeight: 1,
166
206
  };
167
207
  var messageBubbleContainerStyle = {
@@ -169,19 +209,35 @@ export var ChatMessageComponent = function (_a) {
169
209
  flexDirection: 'column',
170
210
  maxWidth: '80%',
171
211
  };
172
- var bubbleStyle = {
173
- backgroundColor: isUser
174
- ? userBubbleBgColor
175
- : agentBubbleBgColor,
176
- color: isUser ? userTextColor : agentTextColor,
177
- padding: '12px 16px',
178
- borderRadius: '8px',
179
- fontSize: fontSize,
180
- fontFamily: fontFamily,
181
- wordBreak: 'break-word',
182
- lineHeight: 1.4,
183
- maxWidth: '100%',
184
- };
212
+ // Only user's messages should render as bubbles.
213
+ // Agent messages are plain text with no container background.
214
+ var bubbleStyle = isUser
215
+ ? {
216
+ backgroundColor: userBubbleBgColor,
217
+ color: userTextColor,
218
+ padding: '12px 16px',
219
+ borderRadius: '12px 0 12px 12px',
220
+ fontSize: fontSize,
221
+ fontFamily: fontFamily,
222
+ wordBreak: 'break-word',
223
+ lineHeight: 1.4,
224
+ maxWidth: '100%',
225
+ border: 'none',
226
+ boxShadow: '0 1px 2px rgba(0,0,0,0.08)'
227
+ }
228
+ : {
229
+ backgroundColor: 'transparent',
230
+ color: agentTextColor,
231
+ padding: 0,
232
+ borderRadius: 0,
233
+ fontSize: fontSize,
234
+ fontFamily: fontFamily,
235
+ wordBreak: 'break-word',
236
+ lineHeight: 1.4,
237
+ maxWidth: '100%',
238
+ border: 'none',
239
+ boxShadow: 'none'
240
+ };
185
241
  var attachmentsContainerStyle = {
186
242
  marginTop: '8px',
187
243
  display: 'flex',
@@ -226,45 +282,61 @@ export var ChatMessageComponent = function (_a) {
226
282
  fontSize: '12px',
227
283
  opacity: 0.8,
228
284
  };
229
- var timestampStyle = {
230
- fontSize: '11px',
231
- color: '#757575',
232
- marginTop: '4px',
233
- width: '80%',
234
- textAlign: isUser ? 'right' : 'left',
235
- display: isNextSameSpeaker ? 'none' : 'block', // Hide timestamp if next message is from same speaker
285
+ // No bottom timestamp in the new design
286
+ var timestampStyle = { display: 'none' };
287
+ var speakerLabel = isUser ? 'You' : isSpecial ? 'System' : 'Agent';
288
+ // Feedback state and UI (thumbs up/down) for agent messages
289
+ var feedbackValue = (message.feedback && message.feedback.length > 0)
290
+ ? message.feedback[message.feedback.length - 1].feedback
291
+ : undefined;
292
+ var primaryColor = (theme === null || theme === void 0 ? void 0 : theme.primaryColor) || '#2962FF';
293
+ var thumbsShouldShow = !isUser && !isSpecial && isHovered && !feedbackValue;
294
+ var showThumbsArea = !isUser && !isSpecial; // Only agents have thumbs area
295
+ var feedbackRowStyle = {
296
+ display: showThumbsArea ? 'flex' : 'none',
297
+ marginTop: 8,
298
+ alignSelf: 'flex-start',
299
+ alignItems: 'center',
300
+ height: 20,
301
+ gap: 8,
302
+ visibility: thumbsShouldShow || !!feedbackValue ? 'visible' : 'hidden',
236
303
  };
237
- var welcomeTitleStyle = {
238
- fontSize: '18px',
239
- fontWeight: 'bold',
240
- marginBottom: '4px',
241
- color: '#000000',
304
+ var iconButtonStyle = {
305
+ background: 'transparent',
306
+ border: 'none',
307
+ padding: 0,
308
+ cursor: 'pointer',
309
+ color: '#9ca3af',
310
+ display: thumbsShouldShow ? 'flex' : 'none',
311
+ alignItems: 'center',
312
+ };
313
+ var separatorStyle = {
314
+ width: 1,
315
+ height: 14,
316
+ backgroundColor: '#e5e7eb',
317
+ display: thumbsShouldShow ? 'block' : 'none',
242
318
  };
243
- var welcomeContentStyle = {
244
- fontSize: '16px',
245
- fontWeight: 'normal',
319
+ var singleIconStyle = {
246
320
  color: '#000000',
321
+ display: feedbackValue ? 'flex' : 'none',
322
+ alignItems: 'center',
247
323
  };
248
- var speakerLabel = isUser ? 'You' : isSpecial ? 'System' : 'Agent';
249
- var welcomeTitle = '';
324
+ var welcomeTitle = welcomeTitleProp || '';
250
325
  var welcomeContent = '';
251
326
  if (isWelcomeMessage) {
252
327
  var messageText = message.text;
253
- if (messageText.toLowerCase().startsWith('')) {
254
- var parts = messageText.split(/[,.!?]/);
255
- if (parts.length > 0) {
256
- welcomeTitle = parts[0].trim();
257
- welcomeContent = messageText.substring(welcomeTitle.length).trim();
258
- // Remove any punctuation at the start
259
- welcomeContent = welcomeContent.replace(/^[,.!?\s]+/, '');
260
- }
328
+ if (!welcomeTitleProp) {
329
+ var parts = messageText.split(/[\n\.!?]/);
330
+ if (parts.length > 0)
331
+ welcomeTitle = (parts[0] || '').trim();
332
+ welcomeContent = messageText.substring(welcomeTitle.length).trim();
333
+ welcomeContent = welcomeContent.replace(/^[,.!?\s]+/, '');
261
334
  }
262
335
  else {
263
- welcomeTitle = '';
264
336
  welcomeContent = messageText;
265
337
  }
266
338
  }
267
- var messageLines = !isWelcomeMessage ? message.text.split('\n').map(function (line, i) { return (_jsxs(React.Fragment, { children: [line, i < message.text.split('\n').length - 1 && _jsx("br", {})] }, i)); }) : null;
339
+ var messageLines = !isWelcomeMessage ? displayText.split('\n').map(function (line, i) { return (_jsxs(React.Fragment, { children: [line, i < displayText.split('\n').length - 1 && _jsx("br", {})] }, i)); }) : null;
268
340
  // Handle special messages (like takeover indicators)
269
341
  if (isSpecial) {
270
342
  var specialMessageStyle = {
@@ -304,9 +376,56 @@ export var ChatMessageComponent = function (_a) {
304
376
  return (_jsx("div", { style: specialMessageStyle, children: _jsxs("div", { style: specialBubbleStyle, children: [icon, message.text] }) }));
305
377
  }
306
378
  if (isWelcomeMessage) {
307
- return (_jsx("div", { style: messageContainerStyle, children: _jsxs("div", { style: messageBubbleContainerStyle, children: [_jsx("div", { style: labelContainerStyle, children: _jsx("div", { style: messageLabelStyle, children: "Agent" }) }), _jsx("div", { style: messageRowStyle, children: _jsx("div", { style: __assign(__assign({}, bubbleStyle), { backgroundColor: (theme === null || theme === void 0 ? void 0 : theme.primaryColor) || '#2563EB', color: '#ffffff' }), children: message.text }) }), _jsx("div", { style: timestampStyle, children: timestamp })] }) }));
379
+ var primaryColor_1 = (theme === null || theme === void 0 ? void 0 : theme.primaryColor) || '#5B3DF5';
380
+ var chipStyle_1 = {
381
+ display: 'inline-block',
382
+ backgroundColor: primaryColor_1,
383
+ color: '#fff',
384
+ padding: '8px 12px',
385
+ borderRadius: 12,
386
+ fontSize: '14px',
387
+ marginRight: 8,
388
+ marginBottom: 8,
389
+ cursor: onQuickQuery ? 'pointer' : 'default',
390
+ userSelect: 'none',
391
+ };
392
+ var chipContainerStyle = {
393
+ display: 'flex',
394
+ flexWrap: 'wrap',
395
+ marginTop: 8,
396
+ };
397
+ var imageBoxStyle = {
398
+ width: 120,
399
+ height: 120,
400
+ borderRadius: 12,
401
+ backgroundColor: '#e5e7eb',
402
+ display: 'flex',
403
+ alignItems: 'center',
404
+ justifyContent: 'center',
405
+ color: '#6b7280',
406
+ fontSize: 12,
407
+ fontWeight: 600,
408
+ overflow: 'hidden',
409
+ };
410
+ var welcomeTitleStyle = {
411
+ fontSize: '22px',
412
+ fontWeight: 700,
413
+ margin: '8px 0 4px 0',
414
+ color: agentTextColor,
415
+ fontFamily: fontFamily,
416
+ };
417
+ var welcomeSubtitleStyle = {
418
+ fontSize: '14px',
419
+ color: '#6b7280',
420
+ margin: 0,
421
+ fontFamily: fontFamily,
422
+ };
423
+ return (_jsx("div", { style: messageContainerStyle, children: _jsx("div", { style: messageBubbleContainerStyle, children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 8 }, children: [_jsx("div", { style: { display: 'flex', gap: 16 }, children: _jsx("div", { style: imageBoxStyle, children: welcomeImageUrl ? (
424
+ // eslint-disable-next-line jsx-a11y/alt-text
425
+ _jsx("img", { src: welcomeImageUrl, style: { width: '100%', height: '100%', objectFit: 'cover' } })) : (_jsx("div", { children: "IMAGE 120 \u00D7 120 px" })) }) }), welcomeTitle && _jsx("div", { style: welcomeTitleStyle, children: welcomeTitle }), welcomeContent && _jsx("div", { style: welcomeSubtitleStyle, children: welcomeContent }), possibleQueries && possibleQueries.length > 0 && (_jsx("div", { style: chipContainerStyle, children: possibleQueries.map(function (q, idx) { return (_jsx("span", { style: chipStyle_1, onClick: function () { return onQuickQuery && onQuickQuery(q); }, children: q }, idx)); }) }))] }) }) }));
308
426
  }
309
- return (_jsxs("div", { style: messageContainerStyle, children: [_jsx("div", { style: labelContainerStyle, children: _jsx("div", { style: messageLabelStyle, children: speakerLabel }) }), message.attachments && message.attachments.length > 0 && (_jsx("div", { style: __assign(__assign({}, attachmentsContainerStyle), { alignItems: isUser ? 'flex-end' : 'flex-start' }), children: message.attachments.map(function (attachment, index) { return (_jsxs("div", { style: {
427
+ return (_jsxs("div", { style: messageContainerStyle, onMouseEnter: function () { return setIsHovered(true); }, onMouseLeave: function () { if (!editingFeedback)
428
+ setIsHovered(false); }, children: [_jsx("div", { style: labelRowStyle, children: isUser ? (_jsxs(_Fragment, { children: [_jsx("div", { style: topTimestampStyle, children: timestamp }), _jsx("div", { style: messageLabelStyle, children: "You" })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { style: messageLabelStyle, children: "Agent" }), _jsx("div", { style: topTimestampStyle, children: timestamp })] })) }), message.attachments && message.attachments.length > 0 && (_jsx("div", { style: __assign(__assign({}, attachmentsContainerStyle), { alignItems: isUser ? 'flex-end' : 'flex-start' }), children: message.attachments.map(function (attachment, index) { return (_jsxs("div", { style: {
310
429
  display: 'flex',
311
430
  alignItems: 'center',
312
431
  gap: '12px',
@@ -317,6 +436,14 @@ export var ChatMessageComponent = function (_a) {
317
436
  minWidth: '260px',
318
437
  maxWidth: '360px',
319
438
  pointerEvents: 'none',
320
- }, children: [attachment.type.startsWith('image/') ? (_jsx("img", { src: attachment.url, alt: attachment.name, style: { width: 56, height: 56, borderRadius: 8, objectFit: 'cover' } })) : (_jsx("div", { style: { width: 40, height: 40, display: 'flex', alignItems: 'center', justifyContent: 'center' }, children: getFileIcon(attachment.type) })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx("div", { style: { fontWeight: 600, fontSize: 14 }, children: attachment.name }), _jsxs("div", { style: { fontSize: 12, opacity: 0.8 }, children: [attachment.type.includes('/') ? attachment.type.split('/')[1].toUpperCase() : attachment.type, attachment.size ? " \u00B7 ".concat((attachment.size / 1024).toFixed(1), " KB") : ''] })] })] }, index)); }) })), message.text && (_jsx("div", { style: bubbleStyle, children: messageLines })), _jsx("div", { style: timestampStyle, children: timestamp })] }));
439
+ }, children: [attachment.type.startsWith('image/') ? (_jsx("img", { src: attachment.url, alt: attachment.name, style: { width: 56, height: 56, borderRadius: 8, objectFit: 'cover' } })) : (_jsx("div", { style: { width: 40, height: 40, display: 'flex', alignItems: 'center', justifyContent: 'center' }, children: getFileIcon(attachment.type) })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx("div", { style: { fontWeight: 600, fontSize: 14 }, children: attachment.name }), _jsxs("div", { style: { fontSize: 12, opacity: 0.8 }, children: [attachment.type.includes('/') ? attachment.type.split('/')[1].toUpperCase() : attachment.type, attachment.size ? " \u00B7 ".concat((attachment.size / 1024).toFixed(1), " KB") : ''] })] })] }, index)); }) })), message.text && (_jsx("div", { style: { display: 'flex', alignItems: 'center', gap: '8px', alignSelf: isUser ? 'flex-end' : 'flex-start' }, children: _jsx("div", { style: __assign(__assign({}, bubbleStyle), { position: 'relative' }), children: messageLines }) })), showThumbsArea && (_jsx("div", { style: feedbackRowStyle, children: feedbackValue ? (_jsx("div", { style: singleIconStyle, children: feedbackValue === 'good' ? (_jsx(ThumbsUp, { size: 18 })) : (_jsx(ThumbsDown, { size: 18 })) })) : (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", style: iconButtonStyle, title: "Thumbs up", onClick: function () {
440
+ if (message.message_id && onFeedback) {
441
+ onFeedback(message.message_id, 'good');
442
+ }
443
+ }, children: _jsx(ThumbsUp, { size: 18 }) }), _jsx("div", { style: separatorStyle }), _jsx("button", { type: "button", style: iconButtonStyle, title: "Thumbs down", onClick: function () {
444
+ if (message.message_id && onFeedback) {
445
+ onFeedback(message.message_id, 'bad');
446
+ }
447
+ }, children: _jsx(ThumbsDown, { size: 18 }) })] })) }))] }));
321
448
  };
322
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhdE1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DaGF0TWVzc2FnZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFRaEcsTUFBTSxDQUFDLElBQU0saUJBQWlCLEdBQXFDLFVBQUMsRUFBcUM7UUFBbkMsSUFBSSxVQUFBLEVBQUUsUUFBUSxjQUFBLEVBQUUsaUJBQWlCLEVBQWpCLFNBQVMsbUJBQUcsS0FBSyxLQUFBO0lBQ3JHLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDM0IsSUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxJQUFBLEtBQWtDLEtBQUssQ0FBQyxRQUFRLENBQWdCLElBQUksQ0FBQyxFQUFwRSxZQUFZLFFBQUEsRUFBRSxlQUFlLFFBQXVDLENBQUM7SUFFNUUsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNkLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixJQUFNLFFBQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLFFBQU0sQ0FBQyxTQUFTLEdBQUc7Z0JBQ2pCLGVBQWUsQ0FBQyxRQUFNLENBQUMsTUFBZ0IsQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQztZQUNGLFFBQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRXBCLElBQU0sV0FBVyxHQUFHLFVBQUMsSUFBWTtRQUMvQixJQUFJLElBQUksQ0FBQyxVQUFV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LE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGFBQ3RELGNBQUssS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFlBQUcsVUFBVSxDQUFDLElBQUksR0FBTyxFQUN0RSxlQUFLLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxhQUN2QyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQzdGLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGtCQUFNLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUNsRSxJQUNGLEtBL0JELEtBQUssQ0FnQ04sQ0FDUCxFQW5DK0MsQ0FtQy9DLENBQUMsR0FDRSxDQUNQLEVBRUEsT0FBTyxDQUFDLElBQUksSUFBSSxDQUNmLGNBQUssS0FBSyxFQUFFLFdBQVcsWUFDcEIsWUFBWSxHQUNULENBQ1AsRUFFRCxjQUFLLEtBQUssRUFBRSxjQUFjLFlBQUcsU0FBUyxHQUFPLElBQ3pDLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGF0TWVzc2FnZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFVzZXIsIFVzZXJYLCBBbGVydENpcmNsZSwgRmlsZVRleHQsIEZpbGVKc29uLCBGaWxlSW1hZ2UsIExvYWRlcjIgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuXG5pbnRlcmZhY2UgQXR0YWNobWVudFByZXZpZXdQcm9wcyB7XG4gIGZpbGU6IEZpbGU7XG4gIG9uUmVtb3ZlOiAoKSA9PiB2b2lkO1xuICB1cGxvYWRpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQXR0YWNobWVudFByZXZpZXc6IFJlYWN0LkZDPEF0dGFjaG1lbnRQcmV2aWV3UHJvcHM+ID0gKHsgZmlsZSwgb25SZW1vdmUsIHVwbG9hZGluZyA9IGZhbHNlIH0pID0+IHtcbiAgY29uc3QgZmlsZVR5cGUgPSBmaWxlLnR5cGU7XG4gIGNvbnN0IGlzSW1hZ2UgPSBmaWxlVHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKTtcbiAgY29uc3QgW2ltYWdlUHJldmlldywgc2V0SW1hZ2VQcmV2aWV3XSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzSW1hZ2UpIHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICBzZXRJbWFnZVByZXZpZXcocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIH1cbiAgfSwgW2ZpbGUsIGlzSW1hZ2VdKTtcblxuICBjb25zdCBnZXRGaWxlSWNvbiA9ICh0eXBlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAodHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkgcmV0dXJuIDxGaWxlSW1hZ2Ugc2l6ZT17MjR9IGNvbG9yPVwiIzZEMjhEOVwiIC8+O1xuICAgIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24vcGRmJykgcmV0dXJuIDxGaWxlVGV4dCBzaXplPXsyNH0gY29sb3I9XCIjQjkxQzFDXCIgLz47XG4gICAgaWYgKHR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJykgcmV0dXJuIDxGaWxlSnNvbiBzaXplPXsyNH0gY29sb3I9XCIjMUQ0RUQ4XCIgLz47XG4gICAgcmV0dXJuIDxGaWxlVGV4dCBzaXplPXsyNH0gY29sb3I9XCIjNEI1NTYzXCIgLz47XG4gIH07XG5cbiAgY29uc3QgY29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBhZGRpbmc6ICc4cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmMGYwZjAnLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgbWF4V2lkdGg6ICcyNTBweCcsXG4gIH07XG5cbiAgY29uc3QgaW1hZ2VTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogJzQwcHgnLFxuICAgIGhlaWdodDogJzQwcHgnLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgb2JqZWN0Rml0OiAnY292ZXInLFxuICAgIG1hcmdpblJpZ2h0OiAnMTBweCcsXG4gIH07XG5cbiAgY29uc3QgZmlsZUluZm9TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIH07XG5cbiAgY29uc3QgZmlsZU5hbWVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgfTtcblxuICBjb25zdCBmaWxlU2l6ZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgY29sb3I6ICcjNjY2JyxcbiAgfTtcblxuICBjb25zdCByZW1vdmVCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kOiAnbm9uZScsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgcGFkZGluZzogJzRweCcsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnNHB4JyxcbiAgICByaWdodDogJzRweCcsXG4gIH07XG5cbiAgY29uc3QgdXBsb2FkaW5nT3ZlcmxheVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgfTtcblxuICBjb25zdCBsb2FkZXJTcGluU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYW5pbWF0aW9uOiAnc3BpbiAxcyBsaW5lYXIgaW5maW5pdGUnLFxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17Y29udGFpbmVyU3R5bGV9PlxuICAgICAge2lzSW1hZ2UgJiYgaW1hZ2VQcmV2aWV3ID8gKFxuICAgICAgICA8aW1nIHNyYz17aW1hZ2VQcmV2aWV3fSBhbHQ9e2ZpbGUubmFtZX0gc3R5bGU9e2ltYWdlU3R5bGV9IC8+XG4gICAgICApIDogKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblJpZ2h0OiAnMTBweCcgfX0+e2dldEZpbGVJY29uKGZpbGVUeXBlKX08L2Rpdj5cbiAgICAgICl9XG4gICAgICA8ZGl2IHN0eWxlPXtmaWxlSW5mb1N0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17ZmlsZU5hbWVTdHlsZX0gdGl0bGU9e2ZpbGUubmFtZX0+e2ZpbGUubmFtZX08L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT17ZmlsZVNpemVTdHlsZX0+eyhmaWxlLnNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfSBLQjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7IXVwbG9hZGluZyAmJiAoXG4gICAgICAgIDxidXR0b24gb25DbGljaz17b25SZW1vdmV9IHN0eWxlPXtyZW1vdmVCdXR0b25TdHlsZX0gdGl0bGU9XCJSZW1vdmUgZmlsZVwiPlxuICAgICAgICAgICYjeDI3MTU7XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKX1cbiAgICAgIHt1cGxvYWRpbmcgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt1cGxvYWRpbmdPdmVybGF5U3R5bGV9PlxuICAgICAgICAgIDxMb2FkZXIyIHNpemU9ezI0fSBjb2xvcj1cIiMwMDBcIiBzdHlsZT17bG9hZGVyU3BpblN0eWxlfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8c3R5bGU+e2BcbiAgICAgICAgQGtleWZyYW1lcyBzcGluIHtcbiAgICAgICAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XG4gICAgICAgICAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cbiAgICAgICAgfVxuICAgICAgYH08L3N0eWxlPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuXG5pbnRlcmZhY2UgQ2hhdE1lc3NhZ2VQcm9wcyB7XG4gIG1lc3NhZ2U6IENoYXRNZXNzYWdlO1xuICB0aGVtZT86IHtcbiAgICBwcmltYXJ5Q29sb3I/OiBzdHJpbmc7XG4gICAgc2Vjb25kYXJ5Q29sb3I/OiBzdHJpbmc7XG4gICAgZm9udEZhbWlseT86IHN0cmluZztcbiAgICBmb250U2l6ZT86IHN0cmluZztcbiAgICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gICAgdGV4dENvbG9yPzogc3RyaW5nO1xuICB9O1xuICBvblBsYXlBdWRpbz86ICh0ZXh0OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIGlzUGxheWluZ0F1ZGlvPzogYm9vbGVhbjtcbiAgaXNGaXJzdE1lc3NhZ2U/OiBib29sZWFuO1xuICBpc05leHRTYW1lU3BlYWtlcj86IGJvb2xlYW47XG4gIGlzUHJldlNhbWVTcGVha2VyPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRNZXNzYWdlQ29tcG9uZW50OiBSZWFjdC5GQzxDaGF0TWVzc2FnZVByb3BzPiA9ICh7XG4gIG1lc3NhZ2UsXG4gIHRoZW1lLFxuICBvblBsYXlBdWRpbyxcbiAgaXNQbGF5aW5nQXVkaW8sXG4gIGlzRmlyc3RNZXNzYWdlID0gZmFsc2UsXG4gIGlzTmV4dFNhbWVTcGVha2VyID0gZmFsc2UsXG4gIGlzUHJldlNhbWVTcGVha2VyID0gZmFsc2Vcbn0pID0+IHtcbiAgY29uc3QgaXNVc2VyID0gbWVzc2FnZS5zcGVha2VyID09PSAnY3VzdG9tZXInO1xuICBjb25zdCBpc1NwZWNpYWwgPSBtZXNzYWdlLnNwZWFrZXIgPT09ICdzcGVjaWFsJztcbiAgY29uc3QgaXNXZWxjb21lTWVzc2FnZSA9ICFpc1VzZXIgJiYgIWlzU3BlY2lhbCAmJiBpc0ZpcnN0TWVzc2FnZTtcblxuICBjb25zdCBmb3JtYXRUaW1lc3RhbXAgPSAodGltZXN0YW1wOiBudW1iZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF0aW1lc3RhbXAgfHwgaXNOYU4odGltZXN0YW1wKSkge1xuICAgICAgICByZXR1cm4gJ0p1c3Qgbm93JztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgdGltZXN0YW1wTXMgPSB0aW1lc3RhbXAgPCAxMDAwMDAwMDAwMDAwID8gdGltZXN0YW1wICogMTAwMCA6IHRpbWVzdGFtcDtcbiAgICAgIFxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcE1zKTtcbiAgICAgIC8vIFF1aWNrIGNoZWNrIGlmIGRhdGUgaXMgdmFsaWRcbiAgICAgIGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgcmV0dXJuICdKdXN0IG5vdyc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IHllc3RlcmRheSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgIHllc3RlcmRheS5zZXREYXRlKHllc3RlcmRheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgIFxuICAgICAgLy8gRm9ybWF0IHRpbWUgYXMgSEg6TU0gQU0vUE1cbiAgICAgIGNvbnN0IHRpbWVPcHRpb25zOiBJbnRsLkRhdGVUaW1lRm9ybWF0T3B0aW9ucyA9IHsgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICcyLWRpZ2l0JywgaG91cjEyOiB0cnVlIH07XG4gICAgICBjb25zdCB0aW1lU3RyID0gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcodW5kZWZpbmVkLCB0aW1lT3B0aW9ucyk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGRhdGUgaXMgdG9kYXksIHllc3RlcmRheSwgb3IgYW5vdGhlciBkYXlcbiAgICAgIGlmIChkYXRlLnRvRGF0ZVN0cmluZygpID09PSB0b2RheS50b0RhdGVTdHJpbmcoKSkge1xuICAgICAgICByZXR1cm4gYFRvZGF5LCAke3RpbWVTdHJ9YDtcbiAgICAgIH0gZWxzZSBpZiAoZGF0ZS50b0RhdGVTdHJpbmcoKSA9PT0geWVzdGVyZGF5LnRvRGF0ZVN0cmluZygpKSB7XG4gICAgICAgIHJldHVybiBgWWVzdGVyZGF5LCAke3RpbWVTdHJ9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvcm1hdCBkYXRlIGFzIE1vbnRoIERELCBZWVlZXG4gICAgICAgIGNvbnN0IGRhdGVPcHRpb25zOiBJbnRsLkRhdGVUaW1lRm9ybWF0T3B0aW9ucyA9IHsgbW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCB5ZWFyOiAnbnVtZXJpYycgfTtcbiAgICAgICAgY29uc3QgZGF0ZVN0ciA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKHVuZGVmaW5lZCwgZGF0ZU9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gYCR7ZGF0ZVN0cn0sICR7dGltZVN0cn1gO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmb3JtYXR0aW5nIHRpbWVzdGFtcDonLCBlcnJvcik7XG4gICAgICByZXR1cm4gJ0p1c3Qgbm93JztcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdGltZXN0YW1wID0gZm9ybWF0VGltZXN0YW1wKG1lc3NhZ2UuY3JlYXRlX3RpbWUpO1xuXG4gIGNvbnN0IHVzZXJCdWJibGVCZ0NvbG9yID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzI1NjNFQic7XG4gIGNvbnN0IHVzZXJUZXh0Q29sb3IgPSAnI2ZmZmZmZic7XG4gIGNvbnN0IGFnZW50QnViYmxlQmdDb2xvciA9IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2VlZWVlZSc7XG4gIGNvbnN0IGFnZW50VGV4dENvbG9yID0gJyMwMDAwMDAnO1xuICBjb25zdCBmb250RmFtaWx5ID0gdGhlbWU/LmZvbnRGYW1pbHkgfHwgJ1JvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYnO1xuICBjb25zdCBmb250U2l6ZSA9IHRoZW1lPy5mb250U2l6ZSB8fCAnMTVweCc7XG5cbiAgY29uc3QgbWVzc2FnZUNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIG1hcmdpbkJvdHRvbTogaXNQcmV2U2FtZVNwZWFrZXIgPyAnOHB4JyA6ICc4cHgnLFxuICAgIG1hcmdpblRvcDogaXNQcmV2U2FtZVNwZWFrZXIgPyAnMHB4JyA6ICcxNnB4JyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBhbGlnbkl0ZW1zOiBpc1VzZXIgPyAnZmxleC1lbmQnIDogJ2ZsZXgtc3RhcnQnLFxuICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VSb3dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBqdXN0aWZ5Q29udGVudDogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcbiAgfTtcblxuICBjb25zdCBsYWJlbENvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6IGlzUHJldlNhbWVTcGVha2VyID8gJ25vbmUnIDogJ2ZsZXgnLFxuICAgIHdpZHRoOiAnODAlJyxcbiAgICBqdXN0aWZ5Q29udGVudDogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcbiAgICBtYXJnaW5Cb3R0b206ICc0cHgnLFxuICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VMYWJlbFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgY29sb3I6ICcjNzU3NTc1JyxcbiAgICBsaW5lSGVpZ2h0OiAxLFxuICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VCdWJibGVDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgbWF4V2lkdGg6ICc4MCUnLFxuICB9O1xuXG4gIGNvbnN0IGJ1YmJsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogaXNVc2VyIFxuICAgICAgPyB1c2VyQnViYmxlQmdDb2xvclxuICAgICAgOiBhZ2VudEJ1YmJsZUJnQ29sb3IsXG4gICAgY29sb3I6IGlzVXNlciA/IHVzZXJUZXh0Q29sb3IgOiBhZ2VudFRleHRDb2xvcixcbiAgICBwYWRkaW5nOiAnMTJweCAxNnB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIGZvbnRTaXplLFxuICAgIGZvbnRGYW1pbHksXG4gICAgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsXG4gICAgbGluZUhlaWdodDogMS40LFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gIH07XG5cbiAgY29uc3QgYXR0YWNobWVudHNDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBtYXJnaW5Ub3A6ICc4cHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBnYXA6ICc4cHgnLFxuICB9O1xuXG4gIGNvbnN0IGdldEZpbGVJY29uID0gKGZpbGVUeXBlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoZmlsZVR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHJldHVybiA8RmlsZUltYWdlIHNpemU9ezI0fSBjb2xvcj1cIiM2RDI4RDlcIiAvPjtcbiAgICBpZiAoZmlsZVR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnKSByZXR1cm4gPEZpbGVUZXh0IHNpemU9ezI0fSBjb2xvcj1cIiNCOTFDMUNcIiAvPjtcbiAgICBpZiAoZmlsZVR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJykgcmV0dXJuIDxGaWxlSnNvbiBzaXplPXsyNH0gY29sb3I9XCIjMUQ0RUQ4XCIgLz47XG4gICAgcmV0dXJuIDxGaWxlVGV4dCBzaXplPXsyNH0gY29sb3I9XCIjNEI1NTYzXCIgLz47XG4gIH07XG5cbiAgY29uc3QgYXR0YWNobWVudENvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwYWRkaW5nOiAnMTBweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiBpc1VzZXIgPyAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpJyA6ICdyZ2JhKDAsIDAsIDAsIDAuMDUpJyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICB9O1xuXG4gIGNvbnN0IGltYWdlQXR0YWNobWVudFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgfTtcblxuICBjb25zdCBmaWxlQXR0YWNobWVudFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwYWRkaW5nOiAnMTBweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiBpc1VzZXIgPyAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpJyA6ICdyZ2JhKDAsIDAsIDAsIDAuMDUpJyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICB9O1xuXG4gIGNvbnN0IGZpbGVJbmZvU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgbWFyZ2luTGVmdDogJzEwcHgnLFxuICAgIGZsZXg6IDEsXG4gIH07XG4gIFxuICBjb25zdCBmaWxlTmFtZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgfTtcbiAgXG4gIGNvbnN0IGZpbGVTaXplU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICBvcGFjaXR5OiAwLjgsXG4gIH07XG5cbiAgY29uc3QgdGltZXN0YW1wU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxMXB4JyxcbiAgICBjb2xvcjogJyM3NTc1NzUnLFxuICAgIG1hcmdpblRvcDogJzRweCcsXG4gICAgd2lkdGg6ICc4MCUnLFxuICAgIHRleHRBbGlnbjogaXNVc2VyID8gJ3JpZ2h0JyA6ICdsZWZ0JyxcbiAgICBkaXNwbGF5OiBpc05leHRTYW1lU3BlYWtlciA/ICdub25lJyA6ICdibG9jaycsIC8vIEhpZGUgdGltZXN0YW1wIGlmIG5leHQgbWVzc2FnZSBpcyBmcm9tIHNhbWUgc3BlYWtlclxuICB9O1xuXG4gIGNvbnN0IHdlbGNvbWVUaXRsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMThweCcsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIG1hcmdpbkJvdHRvbTogJzRweCcsXG4gICAgY29sb3I6ICcjMDAwMDAwJyxcbiAgfTtcblxuICBjb25zdCB3ZWxjb21lQ29udGVudFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgY29sb3I6ICcjMDAwMDAwJyxcbiAgfTtcblxuICBjb25zdCBzcGVha2VyTGFiZWwgPSBpc1VzZXIgPyAnWW91JyA6IGlzU3BlY2lhbCA/ICdTeXN0ZW0nIDogJ0FnZW50JztcblxuICBsZXQgd2VsY29tZVRpdGxlID0gJyc7XG4gIGxldCB3ZWxjb21lQ29udGVudCA9ICcnO1xuICBcbiAgaWYgKGlzV2VsY29tZU1lc3NhZ2UpIHtcbiAgICBjb25zdCBtZXNzYWdlVGV4dCA9IG1lc3NhZ2UudGV4dDtcbiAgICBpZiAobWVzc2FnZVRleHQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCcnKSkge1xuICAgICAgY29uc3QgcGFydHMgPSBtZXNzYWdlVGV4dC5zcGxpdCgvWywuIT9dLyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICB3ZWxjb21lVGl0bGUgPSBwYXJ0c1swXS50cmltKCk7XG4gICAgICAgIHdlbGNvbWVDb250ZW50ID0gbWVzc2FnZVRleHQuc3Vic3RyaW5nKHdlbGNvbWVUaXRsZS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgLy8gUmVtb3ZlIGFueSBwdW5jdHVhdGlvbiBhdCB0aGUgc3RhcnRcbiAgICAgICAgd2VsY29tZUNvbnRlbnQgPSB3ZWxjb21lQ29udGVudC5yZXBsYWNlKC9eWywuIT9cXHNdKy8sICcnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2VsY29tZVRpdGxlID0gJyc7XG4gICAgICB3ZWxjb21lQ29udGVudCA9IG1lc3NhZ2VUZXh0O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2VMaW5lcyA9ICFpc1dlbGNvbWVNZXNzYWdlID8gbWVzc2FnZS50ZXh0LnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUsIGkpID0+IChcbiAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtpfT5cbiAgICAgIHtsaW5lfVxuICAgICAge2kgPCBtZXNzYWdlLnRleHQuc3BsaXQoJ1xcbicpLmxlbmd0aCAtIDEgJiYgPGJyIC8+fVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICkpIDogbnVsbDtcblxuICAvLyBIYW5kbGUgc3BlY2lhbCBtZXNzYWdlcyAobGlrZSB0YWtlb3ZlciBpbmRpY2F0b3JzKVxuICBpZiAoaXNTcGVjaWFsKSB7XG4gICAgY29uc3Qgc3BlY2lhbE1lc3NhZ2VTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgbWFyZ2luOiAnMTZweCAwJyxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgfTtcblxuICAgIC8vIERldGVybWluZSBpY29uIGFuZCBzdHlsZSBiYXNlZCBvbiBtZXNzYWdlIGNvbnRlbnRcbiAgICBsZXQgaWNvbjtcbiAgICBsZXQgYmFja2dyb3VuZENvbG9yID0gJyNFM0YyRkQnO1xuICAgIGxldCB0ZXh0Q29sb3IgPSAnIzE5NzZEMic7XG4gICAgXG4gICAgaWYgKG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdvZmZsaW5lJykgfHwgbWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2luYWN0aXZlJykpIHtcbiAgICAgIGljb24gPSA8QWxlcnRDaXJjbGUgc2l6ZT17MTh9IC8+O1xuICAgICAgYmFja2dyb3VuZENvbG9yID0gJyNGRkYzRTAnO1xuICAgICAgdGV4dENvbG9yID0gJyNGNTdDMDAnO1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Rvb2sgb3ZlcicpIHx8IG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd0YWtlb3ZlcicpKSB7XG4gICAgICBpY29uID0gPFVzZXJYIHNpemU9ezE4fSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWNvbiA9IDxVc2VyIHNpemU9ezE4fSAvPjtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjaWFsQnViYmxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgcGFkZGluZzogJzhweCAxNnB4JyxcbiAgICAgIGJvcmRlclJhZGl1czogJzE2cHgnLFxuICAgICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICAgIGZvbnRGYW1pbHksXG4gICAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgZ2FwOiAnOHB4JyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3NwZWNpYWxNZXNzYWdlU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtzcGVjaWFsQnViYmxlU3R5bGV9PlxuICAgICAgICAgIHtpY29ufVxuICAgICAgICAgIHttZXNzYWdlLnRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc1dlbGNvbWVNZXNzYWdlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e21lc3NhZ2VDb250YWluZXJTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e21lc3NhZ2VCdWJibGVDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17bGFiZWxDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlTGFiZWxTdHlsZX0+QWdlbnQ8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlUm93U3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17ey4uLmJ1YmJsZVN0eWxlLCBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lPy5wcmltYXJ5Q29sb3IgfHwgJyMyNTYzRUInLCBjb2xvcjogJyNmZmZmZmYnfX0+XG4gICAgICAgICAgICAgIHttZXNzYWdlLnRleHR9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt0aW1lc3RhbXBTdHlsZX0+e3RpbWVzdGFtcH08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHN0eWxlPXttZXNzYWdlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgPGRpdiBzdHlsZT17bGFiZWxDb250YWluZXJTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e21lc3NhZ2VMYWJlbFN0eWxlfT57c3BlYWtlckxhYmVsfTwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHttZXNzYWdlLmF0dGFjaG1lbnRzICYmIG1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uYXR0YWNobWVudHNDb250YWluZXJTdHlsZSwgYWxpZ25JdGVtczogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAgICB7bWVzc2FnZS5hdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGdhcDogJzEycHgnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcxMnB4IDE0cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaXNVc2VyID8gJ3JnYmEoMjU1LDI1NSwyNTUsMC4xMiknIDogJyNmNWY1ZjUnLFxuICAgICAgICAgICAgICAgIGJvcmRlcjogaXNVc2VyID8gJzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTgpJyA6ICcxcHggc29saWQgI2U1ZTVlNScsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXG4gICAgICAgICAgICAgICAgbWluV2lkdGg6ICcyNjBweCcsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6ICczNjBweCcsXG4gICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7YXR0YWNobWVudC50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpID8gKFxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIHNyYz17YXR0YWNobWVudC51cmx9XG4gICAgICAgICAgICAgICAgICBhbHQ9e2F0dGFjaG1lbnQubmFtZX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiA1NiwgaGVpZ2h0OiA1NiwgYm9yZGVyUmFkaXVzOiA4LCBvYmplY3RGaXQ6ICdjb3ZlcicgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDQwLCBoZWlnaHQ6IDQwLCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICB7Z2V0RmlsZUljb24oYXR0YWNobWVudC50eXBlKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFdlaWdodDogNjAwLCBmb250U2l6ZTogMTQgfX0+e2F0dGFjaG1lbnQubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgb3BhY2l0eTogMC44IH19PlxuICAgICAgICAgICAgICAgICAge2F0dGFjaG1lbnQudHlwZS5pbmNsdWRlcygnLycpID8gYXR0YWNobWVudC50eXBlLnNwbGl0KCcvJylbMV0udG9VcHBlckNhc2UoKSA6IGF0dGFjaG1lbnQudHlwZX1cbiAgICAgICAgICAgICAgICAgIHthdHRhY2htZW50LnNpemUgPyBgIMK3ICR7KGF0dGFjaG1lbnQuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYCA6ICcnfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHttZXNzYWdlLnRleHQgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXtidWJibGVTdHlsZX0+XG4gICAgICAgICAge21lc3NhZ2VMaW5lc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICA8ZGl2IHN0eWxlPXt0aW1lc3RhbXBTdHlsZX0+e3RpbWVzdGFtcH08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07ICJdfQ==
449
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhdE1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DaGF0TWVzc2FnZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQVF0SCxNQUFNLENBQUMsSUFBTSxpQkFBaUIsR0FBcUMsVUFBQyxFQUFxQztRQUFuQyxJQUFJLFVBQUEsRUFBRSxRQUFRLGNBQUEsRUFBRSxpQkFBaUIsRUFBakIsU0FBUyxtQkFBRyxLQUFLLEtBQUE7SUFDckcsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUMzQixJQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLElBQUEsS0FBa0MsS0FBSyxDQUFDLFFBQVEsQ0FBZ0IsSUFBSSxDQUFDLEVBQXBFLFlBQVksUUFBQSxFQUFFLGVBQWUsUUFBdUMsQ0FBQztJQUU1RSxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQU0sUUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEMsUUFBTSxDQUFDLFNBQVMsR0FBRztnQkFDakIsZUFBZSxDQUFDLFFBQU0sQ0FBQyxNQUFnQixDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDO1lBQ0YsUUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFcEIsSUFBTSxXQUFXLEdBQUcsVUFBQyxJQUFZO1FBQy9C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LGdCQUFnQixZQUN6QixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQ2YsY0FBSyxLQUFLLEVBQUUsZUFBZSxZQUN4QixhQUFhLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUMxQixLQUFDLFFBQVEsSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLENBQ3ZCLENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxVQUFVLElBQUMsSUFBSSxFQUFFLEVBQUUsR0FBSSxDQUN6QixHQUNHLENBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FDRiw4QkFDRSxpQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLEtBQUssRUFBRSxlQUFlLEVBQ3RCLEtBQUssRUFBQyxXQUFXLEVBQ2pCLE9BQU8sRUFBRTtnQ0FDUCxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksVUFBVSxFQUFFLENBQUM7b0NBQ3JDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dDQUN6QyxDQUFDOzRCQUNILENBQUMsWUFFRCxLQUFDLFFBQVEsSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLEdBQ2YsRUFDVCxjQUFLLEtBQUssRUFBRSxjQUFjLEdBQUksRUFDOUIsaUJBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixLQUFLLEVBQUUsZUFBZSxFQUN0QixLQUFLLEVBQUMsYUFBYSxFQUNuQixPQUFPLEVBQUU7Z0NBQ1AsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLFVBQVUsRUFBRSxDQUFDO29DQUNyQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQ0FDeEMsQ0FBQzs0QkFDSCxDQUFDLFlBRUQsS0FBQyxVQUFVLElBQUMsSUFBSSxFQUFFLEVBQUUsR0FBSSxHQUNqQixJQUNSLENBQ0osR0FDRyxDQUNQLElBQ0csQ0FDUCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENoYXRNZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVXNlciwgVXNlclgsIEFsZXJ0Q2lyY2xlLCBGaWxlVGV4dCwgRmlsZUpzb24sIEZpbGVJbWFnZSwgTG9hZGVyMiwgVGh1bWJzVXAsIFRodW1ic0Rvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuXG5pbnRlcmZhY2UgQXR0YWNobWVudFByZXZpZXdQcm9wcyB7XG4gIGZpbGU6IEZpbGU7XG4gIG9uUmVtb3ZlOiAoKSA9PiB2b2lkO1xuICB1cGxvYWRpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQXR0YWNobWVudFByZXZpZXc6IFJlYWN0LkZDPEF0dGFjaG1lbnRQcmV2aWV3UHJvcHM+ID0gKHsgZmlsZSwgb25SZW1vdmUsIHVwbG9hZGluZyA9IGZhbHNlIH0pID0+IHtcbiAgY29uc3QgZmlsZVR5cGUgPSBmaWxlLnR5cGU7XG4gIGNvbnN0IGlzSW1hZ2UgPSBmaWxlVHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKTtcbiAgY29uc3QgW2ltYWdlUHJldmlldywgc2V0SW1hZ2VQcmV2aWV3XSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzSW1hZ2UpIHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICBzZXRJbWFnZVByZXZpZXcocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIH1cbiAgfSwgW2ZpbGUsIGlzSW1hZ2VdKTtcblxuICBjb25zdCBnZXRGaWxlSWNvbiA9ICh0eXBlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAodHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkgcmV0dXJuIDxGaWxlSW1hZ2Ugc2l6ZT17MjR9IGNvbG9yPVwiIzZEMjhEOVwiIC8+O1xuICAgIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24vcGRmJykgcmV0dXJuIDxGaWxlVGV4dCBzaXplPXsyNH0gY29sb3I9XCIjQjkxQzFDXCIgLz47XG4gICAgaWYgKHR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJykgcmV0dXJuIDxGaWxlSnNvbiBzaXplPXsyNH0gY29sb3I9XCIjMUQ0RUQ4XCIgLz47XG4gICAgcmV0dXJuIDxGaWxlVGV4dCBzaXplPXsyNH0gY29sb3I9XCIjNEI1NTYzXCIgLz47XG4gIH07XG5cbiAgY29uc3QgY29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBhZGRpbmc6ICc4cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmMGYwZjAnLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgbWF4V2lkdGg6ICcyNTBweCcsXG4gIH07XG5cbiAgY29uc3QgaW1hZ2VTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogJzQwcHgnLFxuICAgIGhlaWdodDogJzQwcHgnLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgb2JqZWN0Rml0OiAnY292ZXInLFxuICAgIG1hcmdpblJpZ2h0OiAnMTBweCcsXG4gIH07XG5cbiAgY29uc3QgZmlsZUluZm9TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIH07XG5cbiAgY29uc3QgZmlsZU5hbWVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgfTtcblxuICBjb25zdCBmaWxlU2l6ZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgY29sb3I6ICcjNjY2JyxcbiAgfTtcblxuICBjb25zdCByZW1vdmVCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kOiAnbm9uZScsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgcGFkZGluZzogJzRweCcsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnNHB4JyxcbiAgICByaWdodDogJzRweCcsXG4gIH07XG5cbiAgY29uc3QgdXBsb2FkaW5nT3ZlcmxheVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgfTtcblxuICBjb25zdCBsb2FkZXJTcGluU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYW5pbWF0aW9uOiAnc3BpbiAxcyBsaW5lYXIgaW5maW5pdGUnLFxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17Y29udGFpbmVyU3R5bGV9PlxuICAgICAge2lzSW1hZ2UgJiYgaW1hZ2VQcmV2aWV3ID8gKFxuICAgICAgICA8aW1nIHNyYz17aW1hZ2VQcmV2aWV3fSBhbHQ9e2ZpbGUubmFtZX0gc3R5bGU9e2ltYWdlU3R5bGV9IC8+XG4gICAgICApIDogKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblJpZ2h0OiAnMTBweCcgfX0+e2dldEZpbGVJY29uKGZpbGVUeXBlKX08L2Rpdj5cbiAgICAgICl9XG4gICAgICA8ZGl2IHN0eWxlPXtmaWxlSW5mb1N0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17ZmlsZU5hbWVTdHlsZX0gdGl0bGU9e2ZpbGUubmFtZX0+e2ZpbGUubmFtZX08L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT17ZmlsZVNpemVTdHlsZX0+eyhmaWxlLnNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfSBLQjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7IXVwbG9hZGluZyAmJiAoXG4gICAgICAgIDxidXR0b24gb25DbGljaz17b25SZW1vdmV9IHN0eWxlPXtyZW1vdmVCdXR0b25TdHlsZX0gdGl0bGU9XCJSZW1vdmUgZmlsZVwiPlxuICAgICAgICAgICYjeDI3MTU7XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKX1cbiAgICAgIHt1cGxvYWRpbmcgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt1cGxvYWRpbmdPdmVybGF5U3R5bGV9PlxuICAgICAgICAgIDxMb2FkZXIyIHNpemU9ezI0fSBjb2xvcj1cIiMwMDBcIiBzdHlsZT17bG9hZGVyU3BpblN0eWxlfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8c3R5bGU+e2BcbiAgICAgICAgQGtleWZyYW1lcyBzcGluIHtcbiAgICAgICAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XG4gICAgICAgICAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cbiAgICAgICAgfVxuICAgICAgYH08L3N0eWxlPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuXG5pbnRlcmZhY2UgQ2hhdE1lc3NhZ2VQcm9wcyB7XG4gIG1lc3NhZ2U6IENoYXRNZXNzYWdlO1xuICB0aGVtZT86IHtcbiAgICBwcmltYXJ5Q29sb3I/OiBzdHJpbmc7XG4gICAgc2Vjb25kYXJ5Q29sb3I/OiBzdHJpbmc7XG4gICAgZm9udEZhbWlseT86IHN0cmluZztcbiAgICBmb250U2l6ZT86IHN0cmluZztcbiAgICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gICAgdGV4dENvbG9yPzogc3RyaW5nO1xuICB9O1xuICBvblBsYXlBdWRpbz86ICh0ZXh0OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIGlzUGxheWluZ0F1ZGlvPzogYm9vbGVhbjtcbiAgaXNGaXJzdE1lc3NhZ2U/OiBib29sZWFuO1xuICBpc05leHRTYW1lU3BlYWtlcj86IGJvb2xlYW47XG4gIGlzUHJldlNhbWVTcGVha2VyPzogYm9vbGVhbjtcbiAgb25GZWVkYmFjaz86IChtZXNzYWdlSWQ6IHN0cmluZywgdmFsdWU6ICdnb29kJyB8ICdiYWQnKSA9PiB2b2lkO1xuICBlbmFibGVUeXBld3JpdGVyPzogYm9vbGVhbjtcbiAgd2VsY29tZUltYWdlVXJsPzogc3RyaW5nO1xuICB3ZWxjb21lVGl0bGU/OiBzdHJpbmc7XG4gIHBvc3NpYmxlUXVlcmllcz86IHN0cmluZ1tdO1xuICBvblF1aWNrUXVlcnk/OiAocXVlcnk6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRNZXNzYWdlQ29tcG9uZW50OiBSZWFjdC5GQzxDaGF0TWVzc2FnZVByb3BzPiA9ICh7XG4gIG1lc3NhZ2UsXG4gIHRoZW1lLFxuICBvblBsYXlBdWRpbyxcbiAgaXNQbGF5aW5nQXVkaW8sXG4gIGlzRmlyc3RNZXNzYWdlID0gZmFsc2UsXG4gIGlzTmV4dFNhbWVTcGVha2VyID0gZmFsc2UsXG4gIGlzUHJldlNhbWVTcGVha2VyID0gZmFsc2UsXG4gIG9uRmVlZGJhY2ssXG4gIGVuYWJsZVR5cGV3cml0ZXIgPSBmYWxzZSxcbiAgd2VsY29tZUltYWdlVXJsLFxuICB3ZWxjb21lVGl0bGU6IHdlbGNvbWVUaXRsZVByb3AsXG4gIHBvc3NpYmxlUXVlcmllcyxcbiAgb25RdWlja1F1ZXJ5LFxufSkgPT4ge1xuICBjb25zdCBpc1VzZXIgPSBtZXNzYWdlLnNwZWFrZXIgPT09ICdjdXN0b21lcic7XG4gIGNvbnN0IGlzU3BlY2lhbCA9IG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ3NwZWNpYWwnO1xuICBjb25zdCBpc1dlbGNvbWVNZXNzYWdlID0gIWlzVXNlciAmJiAhaXNTcGVjaWFsICYmIGlzRmlyc3RNZXNzYWdlO1xuICBjb25zdCBbaXNIb3ZlcmVkLCBzZXRJc0hvdmVyZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZWRpdGluZ0ZlZWRiYWNrLCBzZXRFZGl0aW5nRmVlZGJhY2tdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZGlzcGxheVRleHQsIHNldERpc3BsYXlUZXh0XSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZz4obWVzc2FnZS50ZXh0KTtcbiAgY29uc3QgW2lzVHlwZXdyaXRpbmcsIHNldElzVHlwZXdyaXRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBsYXN0QW5pbWF0ZWRSZWYgPSBSZWFjdC51c2VSZWY8c3RyaW5nPignJyk7XG5cbiAgY29uc3QgZm9ybWF0VGltZXN0YW1wID0gKHRpbWVzdGFtcDogbnVtYmVyKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGltZXN0YW1wIHx8IGlzTmFOKHRpbWVzdGFtcCkpIHtcbiAgICAgICAgcmV0dXJuICdKdXN0IG5vdyc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHRpbWVzdGFtcE1zID0gdGltZXN0YW1wIDwgMTAwMDAwMDAwMDAwMCA/IHRpbWVzdGFtcCAqIDEwMDAgOiB0aW1lc3RhbXA7XG4gICAgICBcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXBNcyk7XG4gICAgICAvLyBRdWljayBjaGVjayBpZiBkYXRlIGlzIHZhbGlkXG4gICAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHJldHVybiAnSnVzdCBub3cnO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICB5ZXN0ZXJkYXkuc2V0RGF0ZSh5ZXN0ZXJkYXkuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICBcbiAgICAgIC8vIEZvcm1hdCB0aW1lIGFzIEhIOk1NIEFNL1BNXG4gICAgICBjb25zdCB0aW1lT3B0aW9uczogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMgPSB7IGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnMi1kaWdpdCcsIGhvdXIxMjogdHJ1ZSB9O1xuICAgICAgY29uc3QgdGltZVN0ciA9IGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKHVuZGVmaW5lZCwgdGltZU9wdGlvbnMpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBkYXRlIGlzIHRvZGF5LCB5ZXN0ZXJkYXksIG9yIGFub3RoZXIgZGF5XG4gICAgICBpZiAoZGF0ZS50b0RhdGVTdHJpbmcoKSA9PT0gdG9kYXkudG9EYXRlU3RyaW5nKCkpIHtcbiAgICAgICAgcmV0dXJuIGBUb2RheSwgJHt0aW1lU3RyfWA7XG4gICAgICB9IGVsc2UgaWYgKGRhdGUudG9EYXRlU3RyaW5nKCkgPT09IHllc3RlcmRheS50b0RhdGVTdHJpbmcoKSkge1xuICAgICAgICByZXR1cm4gYFllc3RlcmRheSwgJHt0aW1lU3RyfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3JtYXQgZGF0ZSBhcyBNb250aCBERCwgWVlZWVxuICAgICAgICBjb25zdCBkYXRlT3B0aW9uczogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMgPSB7IG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgeWVhcjogJ251bWVyaWMnIH07XG4gICAgICAgIGNvbnN0IGRhdGVTdHIgPSBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyh1bmRlZmluZWQsIGRhdGVPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGAke2RhdGVTdHJ9LCAke3RpbWVTdHJ9YDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZm9ybWF0dGluZyB0aW1lc3RhbXA6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuICdKdXN0IG5vdyc7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHRpbWVzdGFtcCA9IGZvcm1hdFRpbWVzdGFtcChtZXNzYWdlLmNyZWF0ZV90aW1lKTtcblxuICAvLyBGYXN0IHR5cGV3cml0ZXIgZWZmZWN0IGZvciBuZXdseSBkaXNwbGF5ZWQgYWdlbnQgbWVzc2FnZXMsIGZpeCBsYXRlclxuICAvLyBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAvLyAgIGlmICghaXNVc2VyICYmICFpc1NwZWNpYWwgJiYgZW5hYmxlVHlwZXdyaXRlciAmJiBtZXNzYWdlLnRleHQgIT09IGxhc3RBbmltYXRlZFJlZi5jdXJyZW50KSB7XG4gIC8vICAgICBsYXN0QW5pbWF0ZWRSZWYuY3VycmVudCA9IG1lc3NhZ2UudGV4dDtcbiAgLy8gICAgIHNldElzVHlwZXdyaXRpbmcodHJ1ZSk7XG4gIC8vICAgICBzZXREaXNwbGF5VGV4dCgnJyk7XG4gIC8vICAgICBsZXQgaSA9IDA7XG4gIC8vICAgICBjb25zdCB0b3RhbCA9IG1lc3NhZ2UudGV4dC5sZW5ndGg7XG4gIC8vICAgICBjb25zdCB0aWNrTXMgPSAxNjtcbiAgLy8gICAgIGNvbnN0IHRhcmdldE1zID0gMTIwMDtcbiAgLy8gICAgIGNvbnN0IGNoYXJzUGVyVGljayA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodG90YWwgLyAodGFyZ2V0TXMgLyB0aWNrTXMpKSk7XG4gIC8vICAgICBjb25zdCBpbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gIC8vICAgICAgIGkgKz0gY2hhcnNQZXJUaWNrO1xuICAvLyAgICAgICBpZiAoaSA+PSB0b3RhbCkge1xuICAvLyAgICAgICAgIHNldERpc3BsYXlUZXh0KG1lc3NhZ2UudGV4dCk7XG4gIC8vICAgICAgICAgc2V0SXNUeXBld3JpdGluZyhmYWxzZSk7XG4gIC8vICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIHNldERpc3BsYXlUZXh0KG1lc3NhZ2UudGV4dC5zbGljZSgwLCBpKSk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0sIHRpY2tNcyk7XG4gIC8vICAgICByZXR1cm4gKCkgPT4gd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAvLyAgIH0gZWxzZSB7XG4gIC8vICAgICBzZXREaXNwbGF5VGV4dChtZXNzYWdlLnRleHQpO1xuICAvLyAgICAgc2V0SXNUeXBld3JpdGluZyhmYWxzZSk7XG4gIC8vICAgfVxuICAvLyB9LCBbbWVzc2FnZS50ZXh0LCBlbmFibGVUeXBld3JpdGVyLCBpc1VzZXIsIGlzU3BlY2lhbF0pO1xuXG4gIC8vIFVwZGF0ZWQgZGVzaWduIGNvbG9yc1xuICBjb25zdCB1c2VyQnViYmxlQmdDb2xvciA9ICcjRTRFNEU3JzsgLy8gZ3JleSBmb3IgdXNlclxuICBjb25zdCB1c2VyVGV4dENvbG9yID0gJyMwMDAwMDAnO1xuICBjb25zdCBhZ2VudFRleHRDb2xvciA9ICcjMDAwMDAwJztcbiAgY29uc3QgZm9udEZhbWlseSA9IHRoZW1lPy5mb250RmFtaWx5IHx8ICdSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmJztcbiAgY29uc3QgZm9udFNpemUgPSB0aGVtZT8uZm9udFNpemUgfHwgJzE1cHgnO1xuXG4gIGNvbnN0IG1lc3NhZ2VDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBtYXJnaW5Cb3R0b206IGlzUHJldlNhbWVTcGVha2VyID8gJzhweCcgOiAnOHB4JyxcbiAgICBtYXJnaW5Ub3A6IGlzUHJldlNhbWVTcGVha2VyID8gJzBweCcgOiAnMTZweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYWxpZ25JdGVtczogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcbiAgfTtcblxuICBjb25zdCBtZXNzYWdlUm93U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAganVzdGlmeUNvbnRlbnQ6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcsXG4gIH07XG5cbiAgY29uc3QgbGFiZWxSb3dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiBpc1ByZXZTYW1lU3BlYWtlciA/ICdub25lJyA6ICdmbGV4JyxcbiAgICB3aWR0aDogJzgwJScsXG4gICAganVzdGlmeUNvbnRlbnQ6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcsXG4gICAgYWxpZ25JdGVtczogJ2Jhc2VsaW5lJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIG1hcmdpbkJvdHRvbTogJzZweCcsXG4gIH07XG5cbiAgY29uc3QgbWVzc2FnZUxhYmVsU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBjb2xvcjogJyMwMDAwMDAnLFxuICAgIGxpbmVIZWlnaHQ6IDEsXG4gICAgZm9udFdlaWdodDogNjAwLFxuICB9O1xuXG4gIGNvbnN0IHRvcFRpbWVzdGFtcFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTNweCcsXG4gICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICBsaW5lSGVpZ2h0OiAxLFxuICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VCdWJibGVDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgbWF4V2lkdGg6ICc4MCUnLFxuICB9O1xuXG4gIC8vIE9ubHkgdXNlcidzIG1lc3NhZ2VzIHNob3VsZCByZW5kZXIgYXMgYnViYmxlcy5cbiAgLy8gQWdlbnQgbWVzc2FnZXMgYXJlIHBsYWluIHRleHQgd2l0aCBubyBjb250YWluZXIgYmFja2dyb3VuZC5cbiAgY29uc3QgYnViYmxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSBpc1VzZXJcbiAgICA/IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB1c2VyQnViYmxlQmdDb2xvcixcbiAgICAgICAgY29sb3I6IHVzZXJUZXh0Q29sb3IsXG4gICAgICAgIHBhZGRpbmc6ICcxMnB4IDE2cHgnLFxuICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4IDAgMTJweCAxMnB4JyxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxuICAgICAgICBsaW5lSGVpZ2h0OiAxLjQsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICBib3hTaGFkb3c6ICcwIDFweCAycHggcmdiYSgwLDAsMCwwLjA4KSdcbiAgICAgIH1cbiAgICA6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICBjb2xvcjogYWdlbnRUZXh0Q29sb3IsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxuICAgICAgICBsaW5lSGVpZ2h0OiAxLjQsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICBib3hTaGFkb3c6ICdub25lJ1xuICAgICAgfTtcblxuICBjb25zdCBhdHRhY2htZW50c0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIG1hcmdpblRvcDogJzhweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGdhcDogJzhweCcsXG4gIH07XG5cbiAgY29uc3QgZ2V0RmlsZUljb24gPSAoZmlsZVR5cGU6IHN0cmluZykgPT4ge1xuICAgIGlmIChmaWxlVHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkgcmV0dXJuIDxGaWxlSW1hZ2Ugc2l6ZT17MjR9IGNvbG9yPVwiIzZEMjhEOVwiIC8+O1xuICAgIGlmIChmaWxlVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicpIHJldHVybiA8RmlsZVRleHQgc2l6ZT17MjR9IGNvbG9yPVwiI0I5MUMxQ1wiIC8+O1xuICAgIGlmIChmaWxlVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSByZXR1cm4gPEZpbGVKc29uIHNpemU9ezI0fSBjb2xvcj1cIiMxRDRFRDhcIiAvPjtcbiAgICByZXR1cm4gPEZpbGVUZXh0IHNpemU9ezI0fSBjb2xvcj1cIiM0QjU1NjNcIiAvPjtcbiAgfTtcblxuICBjb25zdCBhdHRhY2htZW50Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBhZGRpbmc6ICcxMHB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzVXNlciA/ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSknIDogJ3JnYmEoMCwgMCwgMCwgMC4wNSknLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gIH07XG5cbiAgY29uc3QgaW1hZ2VBdHRhY2htZW50U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICB9O1xuXG4gIGNvbnN0IGZpbGVBdHRhY2htZW50U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBhZGRpbmc6ICcxMHB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzVXNlciA/ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSknIDogJ3JnYmEoMCwgMCwgMCwgMC4wNSknLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gIH07XG5cbiAgY29uc3QgZmlsZUluZm9TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBtYXJnaW5MZWZ0OiAnMTBweCcsXG4gICAgZmxleDogMSxcbiAgfTtcbiAgXG4gIGNvbnN0IGZpbGVOYW1lU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICB9O1xuICBcbiAgY29uc3QgZmlsZVNpemVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzEycHgnLFxuICAgIG9wYWNpdHk6IDAuOCxcbiAgfTtcblxuICAvLyBObyBib3R0b20gdGltZXN0YW1wIGluIHRoZSBuZXcgZGVzaWduXG4gIGNvbnN0IHRpbWVzdGFtcFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0geyBkaXNwbGF5OiAnbm9uZScgfTtcbiAgY29uc3Qgc3BlYWtlckxhYmVsID0gaXNVc2VyID8gJ1lvdScgOiBpc1NwZWNpYWwgPyAnU3lzdGVtJyA6ICdBZ2VudCc7XG5cbiAgLy8gRmVlZGJhY2sgc3RhdGUgYW5kIFVJICh0aHVtYnMgdXAvZG93bikgZm9yIGFnZW50IG1lc3NhZ2VzXG4gIGNvbnN0IGZlZWRiYWNrVmFsdWUgPSAobWVzc2FnZS5mZWVkYmFjayAmJiBtZXNzYWdlLmZlZWRiYWNrLmxlbmd0aCA+IDApXG4gICAgPyBtZXNzYWdlLmZlZWRiYWNrW21lc3NhZ2UuZmVlZGJhY2subGVuZ3RoIC0gMV0uZmVlZGJhY2tcbiAgICA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBwcmltYXJ5Q29sb3IgPSB0aGVtZT8ucHJpbWFyeUNvbG9yIHx8ICcjMjk2MkZGJztcbiAgY29uc3QgdGh1bWJzU2hvdWxkU2hvdyA9ICFpc1VzZXIgJiYgIWlzU3BlY2lhbCAmJiBpc0hvdmVyZWQgJiYgIWZlZWRiYWNrVmFsdWU7XG4gIGNvbnN0IHNob3dUaHVtYnNBcmVhID0gIWlzVXNlciAmJiAhaXNTcGVjaWFsOyAvLyBPbmx5IGFnZW50cyBoYXZlIHRodW1icyBhcmVhXG5cbiAgY29uc3QgZmVlZGJhY2tSb3dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiBzaG93VGh1bWJzQXJlYSA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBtYXJnaW5Ub3A6IDgsXG4gICAgYWxpZ25TZWxmOiAnZmxleC1zdGFydCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgaGVpZ2h0OiAyMCxcbiAgICBnYXA6IDgsXG4gICAgdmlzaWJpbGl0eTogdGh1bWJzU2hvdWxkU2hvdyB8fCAhIWZlZWRiYWNrVmFsdWUgPyAndmlzaWJsZScgOiAnaGlkZGVuJyxcbiAgfTtcblxuICBjb25zdCBpY29uQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBwYWRkaW5nOiAwLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGNvbG9yOiAnIzljYTNhZicsXG4gICAgZGlzcGxheTogdGh1bWJzU2hvdWxkU2hvdyA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfTtcblxuICBjb25zdCBzZXBhcmF0b3JTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogMSxcbiAgICBoZWlnaHQ6IDE0LFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNlNWU3ZWInLFxuICAgIGRpc3BsYXk6IHRodW1ic1Nob3VsZFNob3cgPyAnYmxvY2snIDogJ25vbmUnLFxuICB9O1xuXG4gIGNvbnN0IHNpbmdsZUljb25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBjb2xvcjogJyMwMDAwMDAnLFxuICAgIGRpc3BsYXk6IGZlZWRiYWNrVmFsdWUgPyAnZmxleCcgOiAnbm9uZScsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH07XG5cbiAgbGV0IHdlbGNvbWVUaXRsZSA9IHdlbGNvbWVUaXRsZVByb3AgfHwgJyc7XG4gIGxldCB3ZWxjb21lQ29udGVudCA9ICcnO1xuICBcbiAgaWYgKGlzV2VsY29tZU1lc3NhZ2UpIHtcbiAgICBjb25zdCBtZXNzYWdlVGV4dCA9IG1lc3NhZ2UudGV4dDtcbiAgICBpZiAoIXdlbGNvbWVUaXRsZVByb3ApIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gbWVzc2FnZVRleHQuc3BsaXQoL1tcXG5cXC4hP10vKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAwKSB3ZWxjb21lVGl0bGUgPSAocGFydHNbMF0gfHwgJycpLnRyaW0oKTtcbiAgICAgIHdlbGNvbWVDb250ZW50ID0gbWVzc2FnZVRleHQuc3Vic3RyaW5nKHdlbGNvbWVUaXRsZS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgIHdlbGNvbWVDb250ZW50ID0gd2VsY29tZUNvbnRlbnQucmVwbGFjZSgvXlssLiE/XFxzXSsvLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdlbGNvbWVDb250ZW50ID0gbWVzc2FnZVRleHQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVzc2FnZUxpbmVzID0gIWlzV2VsY29tZU1lc3NhZ2UgPyBkaXNwbGF5VGV4dC5zcGxpdCgnXFxuJykubWFwKChsaW5lLCBpKSA9PiAoXG4gICAgPFJlYWN0LkZyYWdtZW50IGtleT17aX0+XG4gICAgICB7bGluZX1cbiAgICAgIHtpIDwgZGlzcGxheVRleHQuc3BsaXQoJ1xcbicpLmxlbmd0aCAtIDEgJiYgPGJyIC8+fVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICkpIDogbnVsbDtcblxuICAvLyBIYW5kbGUgc3BlY2lhbCBtZXNzYWdlcyAobGlrZSB0YWtlb3ZlciBpbmRpY2F0b3JzKVxuICBpZiAoaXNTcGVjaWFsKSB7XG4gICAgY29uc3Qgc3BlY2lhbE1lc3NhZ2VTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgbWFyZ2luOiAnMTZweCAwJyxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgfTtcblxuICAgIC8vIERldGVybWluZSBpY29uIGFuZCBzdHlsZSBiYXNlZCBvbiBtZXNzYWdlIGNvbnRlbnRcbiAgICBsZXQgaWNvbjtcbiAgICBsZXQgYmFja2dyb3VuZENvbG9yID0gJyNFM0YyRkQnO1xuICAgIGxldCB0ZXh0Q29sb3IgPSAnIzE5NzZEMic7XG4gICAgXG4gICAgaWYgKG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdvZmZsaW5lJykgfHwgbWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2luYWN0aXZlJykpIHtcbiAgICAgIGljb24gPSA8QWxlcnRDaXJjbGUgc2l6ZT17MTh9IC8+O1xuICAgICAgYmFja2dyb3VuZENvbG9yID0gJyNGRkYzRTAnO1xuICAgICAgdGV4dENvbG9yID0gJyNGNTdDMDAnO1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Rvb2sgb3ZlcicpIHx8IG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd0YWtlb3ZlcicpKSB7XG4gICAgICBpY29uID0gPFVzZXJYIHNpemU9ezE4fSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWNvbiA9IDxVc2VyIHNpemU9ezE4fSAvPjtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjaWFsQnViYmxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgcGFkZGluZzogJzhweCAxNnB4JyxcbiAgICAgIGJvcmRlclJhZGl1czogJzE2cHgnLFxuICAgICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICAgIGZvbnRGYW1pbHksXG4gICAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgZ2FwOiAnOHB4JyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3NwZWNpYWxNZXNzYWdlU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtzcGVjaWFsQnViYmxlU3R5bGV9PlxuICAgICAgICAgIHtpY29ufVxuICAgICAgICAgIHttZXNzYWdlLnRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc1dlbGNvbWVNZXNzYWdlKSB7XG4gICAgY29uc3QgcHJpbWFyeUNvbG9yID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzVCM0RGNSc7XG4gICAgY29uc3QgY2hpcFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnlDb2xvcixcbiAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICBwYWRkaW5nOiAnOHB4IDEycHgnLFxuICAgICAgYm9yZGVyUmFkaXVzOiAxMixcbiAgICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgICBtYXJnaW5SaWdodDogOCxcbiAgICAgIG1hcmdpbkJvdHRvbTogOCxcbiAgICAgIGN1cnNvcjogb25RdWlja1F1ZXJ5ID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnLFxuICAgICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIH07XG4gICAgY29uc3QgY2hpcENvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgIG1hcmdpblRvcDogOCxcbiAgICB9O1xuICAgIGNvbnN0IGltYWdlQm94U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICB3aWR0aDogMTIwLFxuICAgICAgaGVpZ2h0OiAxMjAsXG4gICAgICBib3JkZXJSYWRpdXM6IDEyLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2U1ZTdlYicsXG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgIGNvbG9yOiAnIzZiNzI4MCcsXG4gICAgICBmb250U2l6ZTogMTIsXG4gICAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgfTtcbiAgICBjb25zdCB3ZWxjb21lVGl0bGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIGZvbnRTaXplOiAnMjJweCcsXG4gICAgICBmb250V2VpZ2h0OiA3MDAsXG4gICAgICBtYXJnaW46ICc4cHggMCA0cHggMCcsXG4gICAgICBjb2xvcjogYWdlbnRUZXh0Q29sb3IsXG4gICAgICBmb250RmFtaWx5LFxuICAgIH07XG4gICAgY29uc3Qgd2VsY29tZVN1YnRpdGxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICAgIG1hcmdpbjogMCxcbiAgICAgIGZvbnRGYW1pbHksXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlQnViYmxlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA4IH19PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogMTYgfX0+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e2ltYWdlQm94U3R5bGV9PlxuICAgICAgICAgICAgICAgIHt3ZWxjb21lSW1hZ2VVcmwgPyAoXG4gICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvYWx0LXRleHRcbiAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPXt3ZWxjb21lSW1hZ2VVcmx9IHN0eWxlPXt7IHdpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnLCBvYmplY3RGaXQ6ICdjb3ZlcicgfX0gLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPGRpdj5JTUFHRSAxMjAgw5cgMTIwIHB4PC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHt3ZWxjb21lVGl0bGUgJiYgPGRpdiBzdHlsZT17d2VsY29tZVRpdGxlU3R5bGV9Pnt3ZWxjb21lVGl0bGV9PC9kaXY+fVxuICAgICAgICAgICAge3dlbGNvbWVDb250ZW50ICYmIDxkaXYgc3R5bGU9e3dlbGNvbWVTdWJ0aXRsZVN0eWxlfT57d2VsY29tZUNvbnRlbnR9PC9kaXY+fVxuICAgICAgICAgICAge3Bvc3NpYmxlUXVlcmllcyAmJiBwb3NzaWJsZVF1ZXJpZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e2NoaXBDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAge3Bvc3NpYmxlUXVlcmllcy5tYXAoKHEsIGlkeCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtpZHh9IHN0eWxlPXtjaGlwU3R5bGV9IG9uQ2xpY2s9eygpID0+IG9uUXVpY2tRdWVyeSAmJiBvblF1aWNrUXVlcnkocSl9PlxuICAgICAgICAgICAgICAgICAgICB7cX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgXG4gICAgICBzdHlsZT17bWVzc2FnZUNvbnRhaW5lclN0eWxlfVxuICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRJc0hvdmVyZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHsgaWYgKCFlZGl0aW5nRmVlZGJhY2spIHNldElzSG92ZXJlZChmYWxzZSk7IH19XG4gICAgPlxuICAgICAgPGRpdiBzdHlsZT17bGFiZWxSb3dTdHlsZX0+XG4gICAgICAgIHtpc1VzZXIgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3RvcFRpbWVzdGFtcFN0eWxlfT57dGltZXN0YW1wfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bWVzc2FnZUxhYmVsU3R5bGV9PllvdTwvZGl2PlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlTGFiZWxTdHlsZX0+QWdlbnQ8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3RvcFRpbWVzdGFtcFN0eWxlfT57dGltZXN0YW1wfTwvZGl2PlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHttZXNzYWdlLmF0dGFjaG1lbnRzICYmIG1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uYXR0YWNobWVudHNDb250YWluZXJTdHlsZSwgYWxpZ25JdGVtczogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAgICB7bWVzc2FnZS5hdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGdhcDogJzEycHgnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcxMnB4IDE0cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaXNVc2VyID8gJ3JnYmEoMjU1LDI1NSwyNTUsMC4xMiknIDogJyNmNWY1ZjUnLFxuICAgICAgICAgICAgICAgIGJvcmRlcjogaXNVc2VyID8gJzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTgpJyA6ICcxcHggc29saWQgI2U1ZTVlNScsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXG4gICAgICAgICAgICAgICAgbWluV2lkdGg6ICcyNjBweCcsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6ICczNjBweCcsXG4gICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7YXR0YWNobWVudC50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpID8gKFxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIHNyYz17YXR0YWNobWVudC51cmx9XG4gICAgICAgICAgICAgICAgICBhbHQ9e2F0dGFjaG1lbnQubmFtZX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiA1NiwgaGVpZ2h0OiA1NiwgYm9yZGVyUmFkaXVzOiA4LCBvYmplY3RGaXQ6ICdjb3ZlcicgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDQwLCBoZWlnaHQ6IDQwLCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICB7Z2V0RmlsZUljb24oYXR0YWNobWVudC50eXBlKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFdlaWdodDogNjAwLCBmb250U2l6ZTogMTQgfX0+e2F0dGFjaG1lbnQubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgb3BhY2l0eTogMC44IH19PlxuICAgICAgICAgICAgICAgICAge2F0dGFjaG1lbnQudHlwZS5pbmNsdWRlcygnLycpID8gYXR0YWNobWVudC50eXBlLnNwbGl0KCcvJylbMV0udG9VcHBlckNhc2UoKSA6IGF0dGFjaG1lbnQudHlwZX1cbiAgICAgICAgICAgICAgICAgIHthdHRhY2htZW50LnNpemUgPyBgIMK3ICR7KGF0dGFjaG1lbnQuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYCA6ICcnfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHttZXNzYWdlLnRleHQgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzhweCcsIGFsaWduU2VsZjogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLmJ1YmJsZVN0eWxlLCBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9fT5cbiAgICAgICAgICAgIHttZXNzYWdlTGluZXN9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgey8qIEZlZWRiYWNrIHJvdyBiZWxvdyBhZ2VudCBtZXNzYWdlICovfVxuICAgICAge3Nob3dUaHVtYnNBcmVhICYmIChcbiAgICAgICAgPGRpdiBzdHlsZT17ZmVlZGJhY2tSb3dTdHlsZX0+XG4gICAgICAgICAge2ZlZWRiYWNrVmFsdWUgPyAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtzaW5nbGVJY29uU3R5bGV9PlxuICAgICAgICAgICAgICB7ZmVlZGJhY2tWYWx1ZSA9PT0gJ2dvb2QnID8gKFxuICAgICAgICAgICAgICAgIDxUaHVtYnNVcCBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VGh1bWJzRG93biBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e2ljb25CdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICB0aXRsZT1cIlRodW1icyB1cFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWVzc2FnZV9pZCAmJiBvbkZlZWRiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRmVlZGJhY2sobWVzc2FnZS5tZXNzYWdlX2lkLCAnZ29vZCcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8VGh1bWJzVXAgc2l6ZT17MTh9IC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtzZXBhcmF0b3JTdHlsZX0gLz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHN0eWxlPXtpY29uQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgdGl0bGU9XCJUaHVtYnMgZG93blwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWVzc2FnZV9pZCAmJiBvbkZlZWRiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRmVlZGJhY2sobWVzc2FnZS5tZXNzYWdlX2lkLCAnYmFkJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUaHVtYnNEb3duIHNpemU9ezE4fSAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iXX0=