genassist-chat-react 1.0.21 → 1.0.23

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
@@ -62,10 +62,16 @@ function App() {
62
62
  tenant="your-tenant-id"
63
63
  userData={userData}
64
64
  theme={theme}
65
+ useWS={true}
66
+ reCaptchaKey={your-recaptcha-site-key}
65
67
  headerTitle="Customer Support"
66
68
  placeholder="Ask a question..."
67
69
  onError={() => {}}
68
70
  onTakeover={handleTakeover}
71
+ noColorAnimation={false}
72
+ useFile={false}
73
+ useAudio={false}
74
+ allowedExtensions={['image/*']}
69
75
  />
70
76
  </div>
71
77
  );
@@ -86,6 +92,13 @@ export default App;
86
92
  | theme | object | No | - | Custom theme options |
87
93
  | headerTitle | string | No | 'Chat' | Title displayed in the chat header |
88
94
  | placeholder | string | No | 'Type a message...' | Placeholder text for the input |
95
+ | useWS | boolean | false | true | 'Enable or disable websocket...' |
96
+ | useAudio | boolean | false | false | 'Enable or disable audio on chat input...' |
97
+ | useFile | boolean | false | false | 'Enable or disable file attachments on chat input...' |
98
+ | reCaptchaKey | string | false | undefined | 'Use google reCaptchaV3 site-key...' |
99
+ | allowedExtensions | string[] | false | undefined | 'Look for type AllowedExtension and see the supported list of extensions' |
100
+
101
+
89
102
 
90
103
  ## Theme Options
91
104
 
@@ -37,10 +37,15 @@ export var AttachmentPreview = function (_a) {
37
37
  overflow: 'hidden',
38
38
  whiteSpace: 'nowrap',
39
39
  textOverflow: 'ellipsis',
40
+ width: '100%',
40
41
  };
41
42
  var fileNameStyle = {
43
+ width: '90%',
42
44
  fontWeight: 'bold',
43
45
  fontSize: '14px',
46
+ overflow: 'hidden',
47
+ textOverflow: 'ellipsis',
48
+ whiteSpace: 'nowrap',
44
49
  };
45
50
  var fileSizeStyle = {
46
51
  fontSize: '12px',
@@ -67,6 +72,6 @@ export var AttachmentPreview = function (_a) {
67
72
  justifyContent: 'center',
68
73
  borderRadius: '8px',
69
74
  };
70
- 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(Spinner, { size: 24, color: "#000" }) }))] }));
75
+ 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 ? file.size / 1024 : 0).toFixed(2), " KB"] })] }), !uploading && (_jsx("button", { onClick: onRemove, style: removeButtonStyle, title: "Remove file", children: "\u2715" })), uploading && (_jsx("div", { style: uploadingOverlayStyle, children: _jsx(Spinner, { size: 24, color: "#000" }) }))] }));
71
76
  };
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0YWNobWVudFByZXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9BdHRhY2htZW50UHJldmlldy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVE3QyxNQUFNLENBQUMsSUFBTSxpQkFBaUIsR0FBcUMsVUFBQyxFQUFxQztRQUFuQyxJQUFJLFVBQUEsRUFBRSxRQUFRLGNBQUEsRUFBRSxpQkFBaUIsRUFBakIsU0FBUyxtQkFBRyxLQUFLLEtBQUE7SUFDckcsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUMzQixJQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLElBQUEsS0FBa0MsS0FBSyxDQUFDLFFBQVEsQ0FBZ0IsSUFBSSxDQUFDLEVBQXBFLFlBQVksUUFBQSxFQUFFLGVBQWUsUUFBdUMsQ0FBQztJQUU1RSxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQU0sUUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEMsUUFBTSxDQUFDLFNBQVMsR0FBRztnQkFDakIsZUFBZSxDQUFDLFFBQU0sQ0FBQyxNQUFnQixDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDO1lBQ0YsUUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFcEIsSUFBTSxjQUFjLEdBQXdCO1FBQzFDLE9BQU8sRUFBRSxNQUFNO1FBQ2YsVUFBVSxFQUFFLFFBQVE7UUFDcEIsT0FBTyxFQUFFLEtBQUs7UUFDZCxlQUFlLEVBQUUsU0FBUztRQUMxQixZQUFZLEVBQUUsS0FBSztRQUNuQixRQUFRLEVBQUUsVUFBVTtRQUNwQixRQUFRLEVBQUUsT0FBTztLQUNsQixDQUFDO0lBRUYsSUFBTSxVQUFVLEdBQXdCO1FBQ3RDLEtBQUssRUFBRSxNQUFNO1FBQ2IsTUFBTSxFQUFFLE1BQU07UUFDZCxZQUFZLEVBQUUsS0FBSztRQUNuQixTQUFTLEVBQUUsT0FBTztRQUNsQixXQUFXLEVBQUUsTUFBTTtLQUNwQixDQUFDO0lBRUYsSUFBTSxhQUFhLEdBQXdCO1FBQ3pDLElBQUksRUFBRSxDQUFDO1FBQ1AsUUFBUSxFQUFFLFFBQVE7UUFDbEIsVUFBVSxFQUFFLFFBQVE7UUFDcEIsWUFBWSxFQUFFLFVBQVU7S0FDekIsQ0FBQztJQUVGLElBQU0sYUFBYSxHQUF3QjtRQUN6QyxVQUFVLEVBQUUsTUFBTTtRQUNsQixRQUFRLEVBQUUsTUFBTTtLQUNqQixDQUFDO0lBRUYsSUFBTSxhQUFhLEdBQXdCO1FBQ3pDLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLEtBQUssRUFBRSxNQUFNO0tBQ2QsQ0FBQztJQUVGLElBQU0saUJBQWlCLEdBQXdCO1FBQzdDLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLFNBQVM7UUFDakIsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsVUFBVTtRQUNwQixHQUFHLEVBQUUsS0FBSztRQUNWLEtBQUssRUFBRSxLQUFLO0tBQ2IsQ0FBQztJQUVGLElBQU0scUJBQXFCLEdBQXdCO1FBQ2pELFFBQVEsRUFBRSxVQUFVO1FBQ3BCLEdBQUcsRUFBRSxDQUFDO1FBQ04sSUFBSSxFQUFFLENBQUM7UUFDUCxLQUFLLEVBQUUsQ0FBQztRQUNSLE1BQU0sRUFBRSxDQUFDO1FBQ1QsZUFBZSxFQUFFLDBCQUEwQjtRQUMzQyxPQUFPLEVBQUUsTUFBTTtRQUNmLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLGNBQWMsRUFBRSxRQUFRO1FBQ3hCLFlBQVksRUFBRSxLQUFLO0tBQ3BCLENBQUM7SUFFRixPQUFPLENBQ0wsZUFBSyxLQUFLLEVBQUUsY0FBYyxhQUN2QixPQUFPLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUN6QixjQUFLLEdBQUcsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsR0FBSSxDQUM5RCxDQUFDLENBQUMsQ0FBQyxDQUNGLGNBQUssS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxZQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBTyxDQUNuRSxFQUNELGVBQUssS0FBSyxFQUFFLGFBQWEsYUFDdkIsY0FBSyxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxZQUFHLElBQUksQ0FBQyxJQUFJLEdBQU8sRUFDOUQsZUFBSyxLQUFLLEVBQUUsYUFBYSxhQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVUsSUFDL0QsRUFDTCxDQUFDLFNBQVMsSUFBSSxDQUNiLGlCQUFRLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBQyxhQUFhLHVCQUUvRCxDQUNWLEVBQ0EsU0FBUyxJQUFJLENBQ1osY0FBSyxLQUFLLEVBQUUscUJBQXFCLFlBQy9CLEtBQUMsT0FBTyxJQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFDLE1BQU0sR0FBRyxHQUM5QixDQUNQLElBQ0csQ0FDUCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuL1NwaW5uZXInO1xuaW1wb3J0IHsgZ2V0RmlsZUljb24gfSBmcm9tICcuL0ZpbGVUeXBlSWNvbic7XG5cbmludGVyZmFjZSBBdHRhY2htZW50UHJldmlld1Byb3BzIHtcbiAgZmlsZTogRmlsZTtcbiAgb25SZW1vdmU6ICgpID0+IHZvaWQ7XG4gIHVwbG9hZGluZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBBdHRhY2htZW50UHJldmlldzogUmVhY3QuRkM8QXR0YWNobWVudFByZXZpZXdQcm9wcz4gPSAoeyBmaWxlLCBvblJlbW92ZSwgdXBsb2FkaW5nID0gZmFsc2UgfSkgPT4ge1xuICBjb25zdCBmaWxlVHlwZSA9IGZpbGUudHlwZTtcbiAgY29uc3QgaXNJbWFnZSA9IGZpbGVUeXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpO1xuICBjb25zdCBbaW1hZ2VQcmV2aWV3LCBzZXRJbWFnZVByZXZpZXddID0gUmVhY3QudXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNJbWFnZSkge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICAgIHNldEltYWdlUHJldmlldyhyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgfVxuICB9LCBbZmlsZSwgaXNJbWFnZV0pO1xuXG4gIGNvbnN0IGNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwYWRkaW5nOiAnOHB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjBmMGYwJyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIG1heFdpZHRoOiAnMjUwcHgnLFxuICB9O1xuXG4gIGNvbnN0IGltYWdlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgd2lkdGg6ICc0MHB4JyxcbiAgICBoZWlnaHQ6ICc0MHB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgICBtYXJnaW5SaWdodDogJzEwcHgnLFxuICB9O1xuXG4gIGNvbnN0IGZpbGVJbmZvU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICB9O1xuXG4gIGNvbnN0IGZpbGVOYW1lU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGZvbnRTaXplOiAnMTRweCcsXG4gIH07XG5cbiAgY29uc3QgZmlsZVNpemVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzEycHgnLFxuICAgIGNvbG9yOiAnIzY2NicsXG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZDogJ25vbmUnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIHBhZGRpbmc6ICc0cHgnLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogJzRweCcsXG4gICAgcmlnaHQ6ICc0cHgnLFxuICB9O1xuXG4gIGNvbnN0IHVwbG9hZGluZ092ZXJsYXlTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHN0eWxlPXtjb250YWluZXJTdHlsZX0+XG4gICAgICB7aXNJbWFnZSAmJiBpbWFnZVByZXZpZXcgPyAoXG4gICAgICAgIDxpbWcgc3JjPXtpbWFnZVByZXZpZXd9IGFsdD17ZmlsZS5uYW1lfSBzdHlsZT17aW1hZ2VTdHlsZX0gLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6ICcxMHB4JyB9fT57Z2V0RmlsZUljb24oZmlsZVR5cGUpfTwvZGl2PlxuICAgICAgKX1cbiAgICAgIDxkaXYgc3R5bGU9e2ZpbGVJbmZvU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtmaWxlTmFtZVN0eWxlfSB0aXRsZT17ZmlsZS5uYW1lfT57ZmlsZS5uYW1lfTwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPXtmaWxlU2l6ZVN0eWxlfT57KGZpbGUuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMil9IEtCPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHshdXBsb2FkaW5nICYmIChcbiAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtvblJlbW92ZX0gc3R5bGU9e3JlbW92ZUJ1dHRvblN0eWxlfSB0aXRsZT1cIlJlbW92ZSBmaWxlXCI+XG4gICAgICAgICAgJiN4MjcxNTtcbiAgICAgICAgPC9idXR0b24+XG4gICAgICApfVxuICAgICAge3VwbG9hZGluZyAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3VwbG9hZGluZ092ZXJsYXlTdHlsZX0+XG4gICAgICAgICAgPFNwaW5uZXIgc2l6ZT17MjR9IGNvbG9yPVwiIzAwMFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbiJdfQ==
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0YWNobWVudFByZXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9BdHRhY2htZW50UHJldmlldy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVE3QyxNQUFNLENBQUMsSUFBTSxpQkFBaUIsR0FBcUMsVUFBQyxFQUFxQztRQUFuQyxJQUFJLFVBQUEsRUFBRSxRQUFRLGNBQUEsRUFBRSxpQkFBaUIsRUFBakIsU0FBUyxtQkFBRyxLQUFLLEtBQUE7SUFDckcsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUMzQixJQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLElBQUEsS0FBa0MsS0FBSyxDQUFDLFFBQVEsQ0FBZ0IsSUFBSSxDQUFDLEVBQXBFLFlBQVksUUFBQSxFQUFFLGVBQWUsUUFBdUMsQ0FBQztJQUU1RSxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQU0sUUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEMsUUFBTSxDQUFDLFNBQVMsR0FBRztnQkFDakIsZUFBZSxDQUFDLFFBQU0sQ0FBQyxNQUFnQixDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDO1lBQ0YsUUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFcEIsSUFBTSxjQUFjLEdBQXdCO1FBQzFDLE9BQU8sRUFBRSxNQUFNO1FBQ2YsVUFBVSxFQUFFLFFBQVE7UUFDcEIsT0FB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aW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuL1NwaW5uZXInO1xuaW1wb3J0IHsgZ2V0RmlsZUljb24gfSBmcm9tICcuL0ZpbGVUeXBlSWNvbic7XG5cbmludGVyZmFjZSBBdHRhY2htZW50UHJldmlld1Byb3BzIHtcbiAgZmlsZTogRmlsZTtcbiAgb25SZW1vdmU6ICgpID0+IHZvaWQ7XG4gIHVwbG9hZGluZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBBdHRhY2htZW50UHJldmlldzogUmVhY3QuRkM8QXR0YWNobWVudFByZXZpZXdQcm9wcz4gPSAoeyBmaWxlLCBvblJlbW92ZSwgdXBsb2FkaW5nID0gZmFsc2UgfSkgPT4ge1xuICBjb25zdCBmaWxlVHlwZSA9IGZpbGUudHlwZTtcbiAgY29uc3QgaXNJbWFnZSA9IGZpbGVUeXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpO1xuICBjb25zdCBbaW1hZ2VQcmV2aWV3LCBzZXRJbWFnZVByZXZpZXddID0gUmVhY3QudXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNJbWFnZSkge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICAgIHNldEltYWdlUHJldmlldyhyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgfVxuICB9LCBbZmlsZSwgaXNJbWFnZV0pO1xuXG4gIGNvbnN0IGNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwYWRkaW5nOiAnOHB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjBmMGYwJyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIG1heFdpZHRoOiAnMjUwcHgnLFxuICB9O1xuXG4gIGNvbnN0IGltYWdlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgd2lkdGg6ICc0MHB4JyxcbiAgICBoZWlnaHQ6ICc0MHB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgICBtYXJnaW5SaWdodDogJzEwcHgnLFxuICB9O1xuXG4gIGNvbnN0IGZpbGVJbmZvU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gIH07XG5cbiAgY29uc3QgZmlsZU5hbWVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogJzkwJScsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgfTtcblxuICBjb25zdCBmaWxlU2l6ZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgY29sb3I6ICcjNjY2JyxcbiAgfTtcblxuICBjb25zdCByZW1vdmVCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kOiAnbm9uZScsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgcGFkZGluZzogJzRweCcsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnNHB4JyxcbiAgICByaWdodDogJzRweCcsXG4gIH07XG5cbiAgY29uc3QgdXBsb2FkaW5nT3ZlcmxheVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e2NvbnRhaW5lclN0eWxlfT5cbiAgICAgIHtpc0ltYWdlICYmIGltYWdlUHJldmlldyA/IChcbiAgICAgICAgPGltZyBzcmM9e2ltYWdlUHJldmlld30gYWx0PXtmaWxlLm5hbWV9IHN0eWxlPXtpbWFnZVN0eWxlfSAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5SaWdodDogJzEwcHgnIH19PntnZXRGaWxlSWNvbihmaWxlVHlwZSl9PC9kaXY+XG4gICAgICApfVxuICAgICAgPGRpdiBzdHlsZT17ZmlsZUluZm9TdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2ZpbGVOYW1lU3R5bGV9IHRpdGxlPXtmaWxlLm5hbWV9PntmaWxlLm5hbWV9PC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9e2ZpbGVTaXplU3R5bGV9PnsoZmlsZS5zaXplID8gZmlsZS5zaXplIC8gMTAyNCA6IDApLnRvRml4ZWQoMil9IEtCPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHshdXBsb2FkaW5nICYmIChcbiAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtvblJlbW92ZX0gc3R5bGU9e3JlbW92ZUJ1dHRvblN0eWxlfSB0aXRsZT1cIlJlbW92ZSBmaWxlXCI+XG4gICAgICAgICAgJiN4MjcxNTtcbiAgICAgICAgPC9idXR0b24+XG4gICAgICApfVxuICAgICAge3VwbG9hZGluZyAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3VwbG9hZGluZ092ZXJsYXlTdHlsZX0+XG4gICAgICAgICAgPFNwaW5uZXIgc2l6ZT17MjR9IGNvbG9yPVwiIzAwMFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbiJdfQ==
@@ -1,6 +1,5 @@
1
1
  import React from 'react';
2
2
  import { ChatMessage, ScheduleItem, Translations } from '../types';
3
- export { AttachmentPreview } from './AttachmentPreview';
4
3
  interface ChatMessageProps {
5
4
  message: ChatMessage;
6
5
  theme?: {
@@ -31,3 +30,4 @@ interface ChatMessageProps {
31
30
  isAgentTyping?: boolean;
32
31
  }
33
32
  export declare const ChatMessageComponent: React.FC<ChatMessageProps>;
33
+ export {};
@@ -14,11 +14,10 @@ import React from 'react';
14
14
  import { WelcomeCard } from './WelcomeCard';
15
15
  import { User, UserX, AlertCircle, ThumbsUp, ThumbsDown } from 'lucide-react';
16
16
  import { formatTimestamp } from '../utils/time';
17
- import { getFileIcon } from './FileTypeIcon';
18
17
  import { InteractiveContent } from './InteractiveContent';
19
18
  import { parseInteractiveContentBlocks } from '../utils/interactiveContent';
20
19
  import { defaultTranslations, getTranslationString, mergeTranslations } from '../utils/i18n';
21
- export { AttachmentPreview } from './AttachmentPreview';
20
+ import { UploadFilePreview } from './common/UploadFilePreview';
22
21
  export var ChatMessageComponent = function (_a) {
23
22
  var message = _a.message, theme = _a.theme, onPlayAudio = _a.onPlayAudio, _b = _a.isFirstMessage, isFirstMessage = _b === void 0 ? false : _b, _c = _a.isPrevSameSpeaker, isPrevSameSpeaker = _c === void 0 ? false : _c, onFeedback = _a.onFeedback, welcomeImageUrl = _a.welcomeImageUrl, welcomeTitleProp = _a.welcomeTitle, possibleQueries = _a.possibleQueries, onQuickQuery = _a.onQuickQuery, _d = _a.isLastMessage, isLastMessage = _d === void 0 ? false : _d, onQuickAction = _a.onQuickAction, onScheduleConfirm = _a.onScheduleConfirm, customTranslations = _a.translations, language = _a.language, agentName = _a.agentName, _e = _a.isAgentTyping, isAgentTyping = _e === void 0 ? false : _e;
24
23
  // Merge translations with defaults
@@ -33,7 +32,7 @@ export var ChatMessageComponent = function (_a) {
33
32
  var _f = React.useState(false), isHovered = _f[0], setIsHovered = _f[1];
34
33
  var editingFeedback = React.useState(false)[0];
35
34
  var displayText = React.useState(message.text)[0];
36
- var contentBlocks = React.useMemo(function () { return parseInteractiveContentBlocks(displayText); }, [displayText]);
35
+ var contentBlocks = React.useMemo(function () { return parseInteractiveContentBlocks(displayText, message === null || message === void 0 ? void 0 : message.type); }, [displayText]);
37
36
  // Format timestamp with translations
38
37
  var timestamp = React.useMemo(function () {
39
38
  var timeTranslations = (translations === null || translations === void 0 ? void 0 : translations.time) ? {
@@ -238,18 +237,7 @@ export var ChatMessageComponent = function (_a) {
238
237
  return (_jsx("div", { style: messageContainerStyle, children: _jsx("div", { style: __assign({}, messageBubbleContainerStyle), children: _jsx(WelcomeCard, { theme: theme, imageUrl: welcomeImageUrl, title: welcomeTitle, content: welcomeContent, possibleQueries: possibleQueries, onQuickQuery: onQuickQuery, isAgentTyping: isAgentTyping }) }) }));
239
238
  }
240
239
  return (_jsxs("div", { style: messageContainerStyle, onMouseEnter: function () { return setIsHovered(true); }, onMouseLeave: function () { if (!editingFeedback)
241
- setIsHovered(false); }, children: [_jsx("div", { style: labelRowStyle, children: isUser ? (_jsxs(_Fragment, { children: [_jsx("div", { style: topTimestampStyle, children: timestamp }), _jsx("div", { style: messageLabelStyle, children: t('labels.you') })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { style: messageLabelStyle, children: agentName || t('labels.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: {
242
- display: 'flex',
243
- alignItems: 'center',
244
- gap: '12px',
245
- padding: '12px 14px',
246
- backgroundColor: isUser ? 'rgba(255,255,255,0.12)' : '#f5f5f5',
247
- border: isUser ? '1px solid rgba(255,255,255,0.18)' : '1px solid #e5e5e5',
248
- borderRadius: '12px',
249
- minWidth: '260px',
250
- maxWidth: '360px',
251
- pointerEvents: 'none',
252
- }, 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: _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 12 }, children: _jsx(InteractiveContent, { blocks: contentBlocks, primaryColor: primaryColor, textColor: bubbleTextColor, isActionable: !isUser && isLastMessage && !isAgentTyping, onQuickAction: onQuickAction, onScheduleConfirm: onScheduleConfirm }) }) }) })), 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: t('feedback.thumbsUp'), onClick: function () {
240
+ setIsHovered(false); }, children: [_jsx("div", { style: labelRowStyle, children: isUser ? (_jsxs(_Fragment, { children: [_jsx("div", { style: topTimestampStyle, children: timestamp }), _jsx("div", { style: messageLabelStyle, children: t('labels.you') })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { style: messageLabelStyle, children: agentName || t('labels.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 (_jsx(UploadFilePreview, { file: attachment }, 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: _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 12 }, children: _jsx(InteractiveContent, { blocks: contentBlocks, primaryColor: primaryColor, textColor: bubbleTextColor, isActionable: !isUser && isLastMessage && !isAgentTyping, onQuickAction: onQuickAction, onScheduleConfirm: onScheduleConfirm }) }) }) })), 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: t('feedback.thumbsUp'), onClick: function () {
253
241
  // Use message_id from socket, fallback to id if message_id doesn't exist
254
242
  var msgId = message.message_id || message.id;
255
243
  if (msgId && onFeedback) {
@@ -269,4 +257,4 @@ export var ChatMessageComponent = function (_a) {
269
257
  }
270
258
  }, children: _jsx(ThumbsDown, { size: 18 }) })] })) }))] }));
271
259
  };
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhdE1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DaGF0TWVzc2FnZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBZ0N4RCxNQUFNLENBQUMsSUFBTSxvQkFBb0IsR0FBK0IsVUFBQyxFQWtCaEU7UUFqQkMsT0FBTyxhQUFBLEVBQ1AsS0FBSyxXQUFBLEVBQ0wsV0FBVyxpQkFBQSxFQUNYLHNCQUFzQixFQUF0QixjQUFjLG1CQUFHLEtBQUssS0FBQSxFQUN0Qix5QkFBeUIsRUFBekIsaUJBQWlCLG1CQUFHLEtBQUssS0FBQSxFQUN6QixVQUFVLGdCQUFBLEVBQ1YsZUFBZSxxQkFBQSxFQUNELGdCQUFnQixrQkFBQSxFQUM5QixlQUFlLHFCQUFBLEVBQ2YsWUFBWSxrQkFBQSxFQUNaLHFCQUFxQixFQUFyQixhQUFhLG1CQUFHLEtBQUssS0FBQSxFQUNyQixhQUFhLG1CQUFBLEVBQ2IsaUJB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SSxFQUFFLEVBQUUsR0FBSSxHQUNmLEVBQ1QsY0FBSyxLQUFLLEVBQUUsY0FBYyxHQUFJLEVBQzlCLGlCQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsS0FBSyxFQUFFLGVBQWUsRUFDdEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUMvQixPQUFPLEVBQUU7Z0NBQ1AseUVBQXlFO2dDQUN6RSxJQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFLLE9BQWUsQ0FBQyxFQUFFLENBQUM7Z0NBQ3hELElBQUksS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO29DQUN4QixVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dDQUMzQixDQUFDO3FDQUFNLENBQUM7b0NBQ04sU0FBUztnQ0FDWCxDQUFDOzRCQUNILENBQUMsWUFFRCxLQUFDLFVBQVUsSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLEdBQ2pCLElBQ1IsQ0FDSixHQUNHLENBQ1AsSUFDRyxDQUNQLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgV2VsY29tZUNhcmQgfSBmcm9tICcuL1dlbGNvbWVDYXJkJztcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBTY2hlZHVsZUl0ZW0sIFRyYW5zbGF0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFVzZXIsIFVzZXJYLCBBbGVydENpcmNsZSwgVGh1bWJzVXAsIFRodW1ic0Rvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgZm9ybWF0VGltZXN0YW1wIH0gZnJvbSAnLi4vdXRpbHMvdGltZSc7XG5pbXBvcnQgeyBnZXRGaWxlSWNvbiB9IGZyb20gJy4vRmlsZVR5cGVJY29uJztcbmltcG9ydCB7IEludGVyYWN0aXZlQ29udGVudCB9IGZyb20gJy4vSW50ZXJhY3RpdmVDb250ZW50JztcbmltcG9ydCB7IHBhcnNlSW50ZXJhY3RpdmVDb250ZW50QmxvY2tzIH0gZnJvbSAnLi4vdXRpbHMvaW50ZXJhY3RpdmVDb250ZW50JztcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMsIGdldFRyYW5zbGF0aW9uU3RyaW5nLCBtZXJnZVRyYW5zbGF0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2kxOG4nO1xuZXhwb3J0IHsgQXR0YWNobWVudFByZXZpZXcgfSBmcm9tICcuL0F0dGFjaG1lbnRQcmV2aWV3JztcblxuaW50ZXJmYWNlIENoYXRNZXNzYWdlUHJvcHMge1xuICBtZXNzYWdlOiBDaGF0TWVzc2FnZTtcbiAgdGhlbWU/OiB7XG4gICAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICAgIHNlY29uZGFyeUNvbG9yPzogc3RyaW5nO1xuICAgIGZvbnRGYW1pbHk/OiBzdHJpbmc7XG4gICAgZm9udFNpemU/OiBzdHJpbmc7XG4gICAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAgIHRleHRDb2xvcj86IHN0cmluZztcbiAgfTtcbiAgb25QbGF5QXVkaW8/OiAodGV4dDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBpc1BsYXlpbmdBdWRpbz86IGJvb2xlYW47XG4gIGlzRmlyc3RNZXNzYWdlPzogYm9vbGVhbjtcbiAgaXNOZXh0U2FtZVNwZWFrZXI/OiBib29sZWFuO1xuICBpc1ByZXZTYW1lU3BlYWtlcj86IGJvb2xlYW47XG4gIG9uRmVlZGJhY2s/OiAobWVzc2FnZUlkOiBzdHJpbmcsIHZhbHVlOiAnZ29vZCcgfCAnYmFkJykgPT4gdm9pZDtcbiAgZW5hYmxlVHlwZXdyaXRlcj86IGJvb2xlYW47XG4gIHdlbGNvbWVJbWFnZVVybD86IHN0cmluZztcbiAgd2VsY29tZVRpdGxlPzogc3RyaW5nO1xuICBwb3NzaWJsZVF1ZXJpZXM/OiBzdHJpbmdbXTtcbiAgb25RdWlja1F1ZXJ5PzogKHF1ZXJ5OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuO1xuICBvblF1aWNrQWN0aW9uPzogKHRleHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25TY2hlZHVsZUNvbmZpcm0/OiAoc2NoZWR1bGU6IFNjaGVkdWxlSXRlbSkgPT4gdm9pZDtcbiAgdHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zO1xuICBsYW5ndWFnZT86IHN0cmluZztcbiAgYWdlbnROYW1lPzogc3RyaW5nOyAvLyBDdXN0b20gYWdlbnQgbmFtZSB0byBkaXNwbGF5IGluc3RlYWQgb2YgdHJhbnNsYXRpb25cbiAgaXNBZ2VudFR5cGluZz86IGJvb2xlYW47IC8vIFdoZXRoZXIgYWdlbnQgaXMgY3VycmVudGx5IHR5cGluZy90aGlua2luZ1xufVxuXG5leHBvcnQgY29uc3QgQ2hhdE1lc3NhZ2VDb21wb25lbnQ6IFJlYWN0LkZDPENoYXRNZXNzYWdlUHJvcHM+ID0gKHtcbiAgbWVzc2FnZSxcbiAgdGhlbWUsXG4gIG9uUGxheUF1ZGlvLFxuICBpc0ZpcnN0TWVzc2FnZSA9IGZhbHNlLFxuICBpc1ByZXZTYW1lU3BlYWtlciA9IGZhbHNlLFxuICBvbkZlZWRiYWNrLFxuICB3ZWxjb21lSW1hZ2VVcmwsXG4gIHdlbGNvbWVUaXRsZTogd2VsY29tZVRpdGxlUHJvcCxcbiAgcG9zc2libGVRdWVyaWVzLFxuICBvblF1aWNrUXVlcnksXG4gIGlzTGFzdE1lc3NhZ2UgPSBmYWxzZSxcbiAgb25RdWlja0FjdGlvbixcbiAgb25TY2hlZHVsZUNvbmZpcm0sXG4gIHRyYW5zbGF0aW9uczogY3VzdG9tVHJhbnNsYXRpb25zLFxuICBsYW5ndWFnZSxcbiAgYWdlbnROYW1lLFxuICBpc0FnZW50VHlwaW5nID0gZmFsc2UsXG59KSA9PiB7XG4gIC8vIE1lcmdlIHRyYW5zbGF0aW9ucyB3aXRoIGRlZmF1bHRzXG4gIGNvbnN0IHRyYW5zbGF0aW9ucyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gbWVyZ2VUcmFuc2xhdGlvbnMoY3VzdG9tVHJhbnNsYXRpb25zLCBkZWZhdWx0VHJhbnNsYXRpb25zKSxcbiAgICBbY3VzdG9tVHJhbnNsYXRpb25zXVxuICApO1xuXG4gIC8vIFRyYW5zbGF0aW9uIGhlbHBlclxuICBjb25zdCB0ID0gKGtleTogc3RyaW5nLCBmYWxsYmFjaz86IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIGdldFRyYW5zbGF0aW9uU3RyaW5nKGtleSwgdHJhbnNsYXRpb25zLCBmYWxsYmFjayk7XG4gIH07XG4gIGNvbnN0IGlzVXNlciA9IG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2N1c3RvbWVyJztcbiAgY29uc3QgaXNTcGVjaWFsID0gbWVzc2FnZS5zcGVha2VyID09PSAnc3BlY2lhbCc7XG4gIGNvbnN0IGlzV2VsY29tZU1lc3NhZ2UgPSAhaXNVc2VyICYmICFpc1NwZWNpYWwgJiYgaXNGaXJzdE1lc3NhZ2U7XG4gIGNvbnN0IFtpc0hvdmVyZWQsIHNldElzSG92ZXJlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtlZGl0aW5nRmVlZGJhY2tdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZGlzcGxheVRleHRdID0gUmVhY3QudXNlU3RhdGU8c3RyaW5nPihtZXNzYWdlLnRleHQpO1xuICBjb25zdCBjb250ZW50QmxvY2tzID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiBwYXJzZUludGVyYWN0aXZlQ29udGVudEJsb2NrcyhkaXNwbGF5VGV4dCksXG4gICAgW2Rpc3BsYXlUZXh0XVxuICApO1xuXG4gIC8vIEZvcm1hdCB0aW1lc3RhbXAgd2l0aCB0cmFuc2xhdGlvbnNcbiAgY29uc3QgdGltZXN0YW1wID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgdGltZVRyYW5zbGF0aW9ucyA9IHRyYW5zbGF0aW9ucz8udGltZSA/IHtcbiAgICAgIGp1c3ROb3c6IHRyYW5zbGF0aW9ucy50aW1lLmp1c3ROb3csXG4gICAgICB0b2RheTogdHJhbnNsYXRpb25zLnRpbWUudG9kYXksXG4gICAgICB5ZXN0ZXJkYXk6IHRyYW5zbGF0aW9ucy50aW1lLnllc3RlcmRheSxcbiAgICB9IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBmb3JtYXRUaW1lc3RhbXAobWVzc2FnZS5jcmVhdGVfdGltZSwgbGFuZ3VhZ2UsIHRpbWVUcmFuc2xhdGlvbnMpO1xuICB9LCBbbWVzc2FnZS5jcmVhdGVfdGltZSwgbGFuZ3VhZ2UsIHRyYW5zbGF0aW9uc10pO1xuXG4gIC8vIEZhc3QgdHlwZXdyaXRlciBlZmZlY3QgZm9yIG5ld2x5IGRpc3BsYXllZCBhZ2VudCBtZXNzYWdlcywgZml4IGxhdGVyXG4gIC8vIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gIC8vICAgaWYgKCFpc1VzZXIgJiYgIWlzU3BlY2lhbCAmJiBlbmFibGVUeXBld3JpdGVyICYmIG1lc3NhZ2UudGV4dCAhPT0gbGFzdEFuaW1hdGVkUmVmLmN1cnJlbnQpIHtcbiAgLy8gICAgIGxhc3RBbmltYXRlZFJlZi5jdXJyZW50ID0gbWVzc2FnZS50ZXh0O1xuICAvLyAgICAgc2V0SXNUeXBld3JpdGluZyh0cnVlKTtcbiAgLy8gICAgIHNldERpc3BsYXlUZXh0KCcnKTtcbiAgLy8gICAgIGxldCBpID0gMDtcbiAgLy8gICAgIGNvbnN0IHRvdGFsID0gbWVzc2FnZS50ZXh0Lmxlbmd0aDtcbiAgLy8gICAgIGNvbnN0IHRpY2tNcyA9IDE2O1xuICAvLyAgICAgY29uc3QgdGFyZ2V0TXMgPSAxMjAwO1xuICAvLyAgICAgY29uc3QgY2hhcnNQZXJUaWNrID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCh0b3RhbCAvICh0YXJnZXRNcyAvIHRpY2tNcykpKTtcbiAgLy8gICAgIGNvbnN0IGludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgLy8gICAgICAgaSArPSBjaGFyc1BlclRpY2s7XG4gIC8vICAgICAgIGlmIChpID49IHRvdGFsKSB7XG4gIC8vICAgICAgICAgc2V0RGlzcGxheVRleHQobWVzc2FnZS50ZXh0KTtcbiAgLy8gICAgICAgICBzZXRJc1R5cGV3cml0aW5nKGZhbHNlKTtcbiAgLy8gICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gIC8vICAgICAgIH0gZWxzZSB7XG4gIC8vICAgICAgICAgc2V0RGlzcGxheVRleHQobWVzc2FnZS50ZXh0LnNsaWNlKDAsIGkpKTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSwgdGlja01zKTtcbiAgLy8gICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHNldERpc3BsYXlUZXh0KG1lc3NhZ2UudGV4dCk7XG4gIC8vICAgICBzZXRJc1R5cGV3cml0aW5nKGZhbHNlKTtcbiAgLy8gICB9XG4gIC8vIH0sIFttZXNzYWdlLnRleHQsIGVuYWJsZVR5cGV3cml0ZXIsIGlzVXNlciwgaXNTcGVjaWFsXSk7XG5cbiAgLy8gVXBkYXRlZCBkZXNpZ24gY29sb3JzXG4gIGNvbnN0IHVzZXJCdWJibGVCZ0NvbG9yID0gJyNFNEU0RTcnOyAvLyBncmV5IGZvciB1c2VyXG4gIGNvbnN0IHVzZXJUZXh0Q29sb3IgPSAnIzAwMDAwMCc7XG4gIGNvbnN0IGFnZW50VGV4dENvbG9yID0gdGhlbWU/LnRleHRDb2xvciB8fCAnIzAwMDAwMCc7XG4gIGNvbnN0IHByaW1hcnlDb2xvciA9IHRoZW1lPy5wcmltYXJ5Q29sb3IgfHwgJyM0ZjQ2ZTUnO1xuICBjb25zdCBmb250RmFtaWx5ID0gdGhlbWU/LmZvbnRGYW1pbHkgfHwgJ1JvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYnO1xuICBjb25zdCBmb250U2l6ZSA9IHRoZW1lPy5mb250U2l6ZSB8fCAnMTVweCc7XG4gIGNvbnN0IGJ1YmJsZVRleHRDb2xvciA9IGlzVXNlciA/IHVzZXJUZXh0Q29sb3IgOiBhZ2VudFRleHRDb2xvcjtcblxuICBjb25zdCBtZXNzYWdlQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgbWFyZ2luQm90dG9tOiBpc1ByZXZTYW1lU3BlYWtlciA/ICc4cHgnIDogJzhweCcsXG4gICAgbWFyZ2luVG9wOiBpc1ByZXZTYW1lU3BlYWtlciA/ICcwcHgnIDogJzE2cHgnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGFsaWduSXRlbXM6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcsXG4gIH07XG5cbiAgY29uc3QgbGFiZWxSb3dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiBpc1ByZXZTYW1lU3BlYWtlciA/ICdub25lJyA6ICdmbGV4JyxcbiAgICB3aWR0aDogJzgwJScsXG4gICAganVzdGlmeUNvbnRlbnQ6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcsXG4gICAgYWxpZ25JdGVtczogJ2Jhc2VsaW5lJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIG1hcmdpbkJvdHRvbTogJzZweCcsXG4gIH07XG5cbiAgY29uc3QgbWVzc2FnZUxhYmVsU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBjb2xvcjogJyMwMDAwMDAnLFxuICAgIGxpbmVIZWlnaHQ6IDEsXG4gICAgZm9udFdlaWdodDogNjAwLFxuICB9O1xuXG4gIGNvbnN0IHRvcFRpbWVzdGFtcFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTNweCcsXG4gICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICBsaW5lSGVpZ2h0OiAxLFxuICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VCdWJibGVDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgbWF4V2lkdGg6ICc4MCUnLFxuICB9O1xuXG4gIC8vIE9ubHkgdXNlcidzIG1lc3NhZ2VzIHNob3VsZCByZW5kZXIgYXMgYnViYmxlcy5cbiAgLy8gQWdlbnQgbWVzc2FnZXMgYXJlIHBsYWluIHRleHQgd2l0aCBubyBjb250YWluZXIgYmFja2dyb3VuZC5cbiAgY29uc3QgYnViYmxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSBpc1VzZXJcbiAgICA/IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB1c2VyQnViYmxlQmdDb2xvcixcbiAgICAgICAgY29sb3I6IHVzZXJUZXh0Q29sb3IsXG4gICAgICAgIHBhZGRpbmc6ICcxMnB4IDE2cHgnLFxuICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4IDAgMTJweCAxMnB4JyxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxuICAgICAgICBsaW5lSGVpZ2h0OiAxLjQsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICBib3hTaGFkb3c6ICcwIDFweCAycHggcmdiYSgwLDAsMCwwLjA4KSdcbiAgICAgIH1cbiAgICA6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICBjb2xvcjogYWdlbnRUZXh0Q29sb3IsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxuICAgICAgICBsaW5lSGVpZ2h0OiAxLjQsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICBib3hTaGFkb3c6ICdub25lJ1xuICAgICAgfTtcblxuICBjb25zdCBhdHRhY2htZW50c0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIG1hcmdpblRvcDogJzhweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGdhcDogJzhweCcsXG4gIH07XG5cbiAgLy8gRmVlZGJhY2sgc3RhdGUgYW5kIFVJICh0aHVtYnMgdXAvZG93bikgZm9yIGFnZW50IG1lc3NhZ2VzXG4gIGNvbnN0IGZlZWRiYWNrVmFsdWUgPSAobWVzc2FnZS5mZWVkYmFjayAmJiBtZXNzYWdlLmZlZWRiYWNrLmxlbmd0aCA+IDApXG4gICAgPyBtZXNzYWdlLmZlZWRiYWNrW21lc3NhZ2UuZmVlZGJhY2subGVuZ3RoIC0gMV0uZmVlZGJhY2tcbiAgICA6IHVuZGVmaW5lZDtcblxuICBjb25zdCB0aHVtYnNTaG91bGRTaG93ID0gIWlzVXNlciAmJiAhaXNTcGVjaWFsICYmIGlzSG92ZXJlZCAmJiAhZmVlZGJhY2tWYWx1ZTtcbiAgY29uc3Qgc2hvd1RodW1ic0FyZWEgPSAhaXNVc2VyICYmICFpc1NwZWNpYWw7IC8vIE9ubHkgYWdlbnRzIGhhdmUgdGh1bWJzIGFyZWFcblxuICBjb25zdCBmZWVkYmFja1Jvd1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6IHNob3dUaHVtYnNBcmVhID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgIG1hcmdpblRvcDogOCxcbiAgICBhbGlnblNlbGY6ICdmbGV4LXN0YXJ0JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBoZWlnaHQ6IDIwLFxuICAgIGdhcDogOCxcbiAgICB2aXNpYmlsaXR5OiB0aHVtYnNTaG91bGRTaG93IHx8ICEhZmVlZGJhY2tWYWx1ZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nLFxuICB9O1xuXG4gIGNvbnN0IGljb25CdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgY29sb3I6ICcjOWNhM2FmJyxcbiAgICBkaXNwbGF5OiB0aHVtYnNTaG91bGRTaG93ID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9O1xuXG4gIGNvbnN0IHNlcGFyYXRvclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHdpZHRoOiAxLFxuICAgIGhlaWdodDogMTQsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2U1ZTdlYicsXG4gICAgZGlzcGxheTogdGh1bWJzU2hvdWxkU2hvdyA/ICdibG9jaycgOiAnbm9uZScsXG4gIH07XG5cbiAgY29uc3Qgc2luZ2xlSWNvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGNvbG9yOiAnIzAwMDAwMCcsXG4gICAgZGlzcGxheTogZmVlZGJhY2tWYWx1ZSA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfTtcblxuICBsZXQgd2VsY29tZVRpdGxlID0gd2VsY29tZVRpdGxlUHJvcCB8fCAnJztcbiAgbGV0IHdlbGNvbWVDb250ZW50ID0gJyc7XG4gIFxuICBpZiAoaXNXZWxjb21lTWVzc2FnZSkge1xuICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gbWVzc2FnZS50ZXh0O1xuICAgIGlmICghd2VsY29tZVRpdGxlUHJvcCkge1xuICAgICAgY29uc3QgcGFydHMgPSBtZXNzYWdlVGV4dC5zcGxpdCgvW1xcblxcLiE/XS8pO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDApIHdlbGNvbWVUaXRsZSA9IChwYXJ0c1swXSB8fCAnJykudHJpbSgpO1xuICAgICAgd2VsY29tZUNvbnRlbnQgPSBtZXNzYWdlVGV4dC5zdWJzdHJpbmcod2VsY29tZVRpdGxlLmxlbmd0aCkudHJpbSgpO1xuICAgICAgd2VsY29tZUNvbnRlbnQgPSB3ZWxjb21lQ29udGVudC5yZXBsYWNlKC9eWywuIT9cXHNdKy8sICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2VsY29tZUNvbnRlbnQgPSBtZXNzYWdlVGV4dDtcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgc3BlY2lhbCBtZXNzYWdlcyAobGlrZSB0YWtlb3ZlciBpbmRpY2F0b3JzKVxuICBpZiAoaXNTcGVjaWFsKSB7XG4gICAgY29uc3Qgc3BlY2lhbE1lc3NhZ2VTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgbWFyZ2luOiAnMTZweCAwJyxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgfTtcblxuICAgIC8vIERldGVybWluZSBpY29uIGFuZCBzdHlsZSBiYXNlZCBvbiBtZXNzYWdlIGNvbnRlbnRcbiAgICBsZXQgaWNvbjtcbiAgICBsZXQgYmFja2dyb3VuZENvbG9yID0gJyNFM0YyRkQnO1xuICAgIGxldCB0ZXh0Q29sb3IgPSAnIzE5NzZEMic7XG4gICAgXG4gICAgaWYgKG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdvZmZsaW5lJykgfHwgbWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2luYWN0aXZlJykpIHtcbiAgICAgIGljb24gPSA8QWxlcnRDaXJjbGUgc2l6ZT17MTh9IC8+O1xuICAgICAgYmFja2dyb3VuZENvbG9yID0gJyNGRkYzRTAnO1xuICAgICAgdGV4dENvbG9yID0gJyNGNTdDMDAnO1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Rvb2sgb3ZlcicpIHx8IG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd0YWtlb3ZlcicpKSB7XG4gICAgICBpY29uID0gPFVzZXJYIHNpemU9ezE4fSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWNvbiA9IDxVc2VyIHNpemU9ezE4fSAvPjtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjaWFsQnViYmxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgcGFkZGluZzogJzhweCAxNnB4JyxcbiAgICAgIGJvcmRlclJhZGl1czogJzE2cHgnLFxuICAgICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICAgIGZvbnRGYW1pbHksXG4gICAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgZ2FwOiAnOHB4JyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3NwZWNpYWxNZXNzYWdlU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtzcGVjaWFsQnViYmxlU3R5bGV9PlxuICAgICAgICAgIHtpY29ufVxuICAgICAgICAgIHttZXNzYWdlLnRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc1dlbGNvbWVNZXNzYWdlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e21lc3NhZ2VDb250YWluZXJTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4ubWVzc2FnZUJ1YmJsZUNvbnRhaW5lclN0eWxlIH19PlxuICAgICAgICAgIDxXZWxjb21lQ2FyZFxuICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgaW1hZ2VVcmw9e3dlbGNvbWVJbWFnZVVybH1cbiAgICAgICAgICAgIHRpdGxlPXt3ZWxjb21lVGl0bGV9XG4gICAgICAgICAgICBjb250ZW50PXt3ZWxjb21lQ29udGVudH1cbiAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcz17cG9zc2libGVRdWVyaWVzfVxuICAgICAgICAgICAgb25RdWlja1F1ZXJ5PXtvblF1aWNrUXVlcnl9XG4gICAgICAgICAgICBpc0FnZW50VHlwaW5nPXtpc0FnZW50VHlwaW5nfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBcbiAgICAgIHN0eWxlPXttZXNzYWdlQ29udGFpbmVyU3R5bGV9XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldElzSG92ZXJlZCh0cnVlKX1cbiAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4geyBpZiAoIWVkaXRpbmdGZWVkYmFjaykgc2V0SXNIb3ZlcmVkKGZhbHNlKTsgfX1cbiAgICA+XG4gICAgICA8ZGl2IHN0eWxlPXtsYWJlbFJvd1N0eWxlfT5cbiAgICAgICAge2lzVXNlciA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17dG9wVGltZXN0YW1wU3R5bGV9Pnt0aW1lc3RhbXB9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlTGFiZWxTdHlsZX0+e3QoJ2xhYmVscy55b3UnKX08L2Rpdj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bWVzc2FnZUxhYmVsU3R5bGV9PnthZ2VudE5hbWUgfHwgdCgnbGFiZWxzLmFnZW50Jyl9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt0b3BUaW1lc3RhbXBTdHlsZX0+e3RpbWVzdGFtcH08L2Rpdj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7bWVzc2FnZS5hdHRhY2htZW50cyAmJiBtZXNzYWdlLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLmF0dGFjaG1lbnRzQ29udGFpbmVyU3R5bGUsIGFsaWduSXRlbXM6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcgfX0+XG4gICAgICAgICAge21lc3NhZ2UuYXR0YWNobWVudHMubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBnYXA6ICcxMnB4JyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCAxNHB4JyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzVXNlciA/ICdyZ2JhKDI1NSwyNTUsMjU1LDAuMTIpJyA6ICcjZjVmNWY1JyxcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlzVXNlciA/ICcxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjE4KScgOiAnMXB4IHNvbGlkICNlNWU1ZTUnLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMjYwcHgnLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMzYwcHgnLFxuICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2F0dGFjaG1lbnQudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSA/IChcbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICBzcmM9e2F0dGFjaG1lbnQudXJsfVxuICAgICAgICAgICAgICAgICAgYWx0PXthdHRhY2htZW50Lm5hbWV9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogNTYsIGhlaWdodDogNTYsIGJvcmRlclJhZGl1czogOCwgb2JqZWN0Rml0OiAnY292ZXInIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiA0MCwgaGVpZ2h0OiA0MCwgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInIH19PlxuICAgICAgICAgICAgICAgICAge2dldEZpbGVJY29uKGF0dGFjaG1lbnQudHlwZSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRXZWlnaHQ6IDYwMCwgZm9udFNpemU6IDE0IH19PnthdHRhY2htZW50Lm5hbWV9PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTIsIG9wYWNpdHk6IDAuOCB9fT5cbiAgICAgICAgICAgICAgICAgIHthdHRhY2htZW50LnR5cGUuaW5jbHVkZXMoJy8nKSA/IGF0dGFjaG1lbnQudHlwZS5zcGxpdCgnLycpWzFdLnRvVXBwZXJDYXNlKCkgOiBhdHRhY2htZW50LnR5cGV9XG4gICAgICAgICAgICAgICAgICB7YXR0YWNobWVudC5zaXplID8gYCDCtyAkeyhhdHRhY2htZW50LnNpemUgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQmAgOiAnJ31cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7bWVzc2FnZS50ZXh0ICYmIChcbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc4cHgnLCBhbGlnblNlbGY6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcgfX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyAuLi5idWJibGVTdHlsZSwgcG9zaXRpb246ICdyZWxhdGl2ZScgfX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogMTIgfX0+XG4gICAgICAgICAgICAgIDxJbnRlcmFjdGl2ZUNvbnRlbnRcbiAgICAgICAgICAgICAgICBibG9ja3M9e2NvbnRlbnRCbG9ja3N9XG4gICAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICAgICAgdGV4dENvbG9yPXtidWJibGVUZXh0Q29sb3J9XG4gICAgICAgICAgICAgICAgaXNBY3Rpb25hYmxlPXshaXNVc2VyICYmIGlzTGFzdE1lc3NhZ2UgJiYgIWlzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgICAgb25RdWlja0FjdGlvbj17b25RdWlja0FjdGlvbn1cbiAgICAgICAgICAgICAgICBvblNjaGVkdWxlQ29uZmlybT17b25TY2hlZHVsZUNvbmZpcm19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7LyogRmVlZGJhY2sgcm93IGJlbG93IGFnZW50IG1lc3NhZ2UgKi99XG4gICAgICB7c2hvd1RodW1ic0FyZWEgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXtmZWVkYmFja1Jvd1N0eWxlfT5cbiAgICAgICAgICB7ZmVlZGJhY2tWYWx1ZSA/IChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3NpbmdsZUljb25TdHlsZX0+XG4gICAgICAgICAgICAgIHtmZWVkYmFja1ZhbHVlID09PSAnZ29vZCcgPyAoXG4gICAgICAgICAgICAgICAgPFRodW1ic1VwIHNpemU9ezE4fSAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxUaHVtYnNEb3duIHNpemU9ezE4fSAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17aWNvbkJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgIHRpdGxlPXt0KCdmZWVkYmFjay50aHVtYnNVcCcpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFVzZSBtZXNzYWdlX2lkIGZyb20gc29ja2V0LCBmYWxsYmFjayB0byBpZCBpZiBtZXNzYWdlX2lkIGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID0gbWVzc2FnZS5tZXNzYWdlX2lkIHx8IChtZXNzYWdlIGFzIGFueSkuaWQ7XG4gICAgICAgICAgICAgICAgICBpZiAobXNnSWQgJiYgb25GZWVkYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBvbkZlZWRiYWNrKG1zZ0lkLCAnZ29vZCcpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUaHVtYnNVcCBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3NlcGFyYXRvclN0eWxlfSAvPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e2ljb25CdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICB0aXRsZT17dCgnZmVlZGJhY2sudGh1bWJzRG93bicpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFVzZSBtZXNzYWdlX2lkIGZyb20gc29ja2V0LCBmYWxsYmFjayB0byBpZCBpZiBtZXNzYWdlX2lkIGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID0gbWVzc2FnZS5tZXNzYWdlX2lkIHx8IChtZXNzYWdlIGFzIGFueSkuaWQ7XG4gICAgICAgICAgICAgICAgICBpZiAobXNnSWQgJiYgb25GZWVkYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBvbkZlZWRiYWNrKG1zZ0lkLCAnYmFkJyk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFRodW1ic0Rvd24gc2l6ZT17MTh9IC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcbiJdfQ==
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhdE1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DaGF0TWVzc2FnZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFnQy9ELE1BQU0sQ0FBQyxJQUFNLG9CQUFvQixHQUErQixVQUFDLEVBa0JoRTtRQWpCQyxPQUFPLGFBQUEsRUFDUCxLQUFLLFdBQUEsRUFDTCxXQUFXLGlCQUFBLEVBQ1gsc0JBQXNCLEVBQXRCLGNBQWMsbUJBQUcsS0FBSyxLQUFBLEVBQ3RCLHlCQUF5QixFQUF6QixpQkFBaUIsbUJBQUcsS0FBSyxLQUFBLEVBQ3pCLFVBQVUsZ0JBQUEsRUFDVixlQUFlLHFCQUFBLEVBQ0QsZ0JBQWdCLGtCQUFBLEVBQzlCLGVBQWUscUJBQUEsRUFDZixZQUFZLGtCQUFBLEVBQ1oscUJBQXFCLEVBQXJCLGFBQWEsbUJBQUcsS0FBSyxLQUFBLEVBQ3JCLGFBQWEsbUJBQUEsRUFDYixpQkFBaUIsdUJBQUEsRUFDSCxrQkFBa0Isa0JBQUEsRUFDaEMsUUFBUSxjQUFB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Q0FDWCxDQUFDOzRCQUNILENBQUMsWUFFRCxLQUFDLFVBQVUsSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLEdBQ2pCLElBQ1IsQ0FDSixHQUNHLENBQ1AsSUFDRyxDQUNQLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgV2VsY29tZUNhcmQgfSBmcm9tICcuL1dlbGNvbWVDYXJkJztcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBTY2hlZHVsZUl0ZW0sIFRyYW5zbGF0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFVzZXIsIFVzZXJYLCBBbGVydENpcmNsZSwgVGh1bWJzVXAsIFRodW1ic0Rvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgZm9ybWF0VGltZXN0YW1wIH0gZnJvbSAnLi4vdXRpbHMvdGltZSc7XG5pbXBvcnQgeyBJbnRlcmFjdGl2ZUNvbnRlbnQgfSBmcm9tICcuL0ludGVyYWN0aXZlQ29udGVudCc7XG5pbXBvcnQgeyBwYXJzZUludGVyYWN0aXZlQ29udGVudEJsb2NrcyB9IGZyb20gJy4uL3V0aWxzL2ludGVyYWN0aXZlQ29udGVudCc7XG5pbXBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zLCBnZXRUcmFuc2xhdGlvblN0cmluZywgbWVyZ2VUcmFuc2xhdGlvbnMgfSBmcm9tICcuLi91dGlscy9pMThuJztcbmltcG9ydCB7IFVwbG9hZEZpbGVQcmV2aWV3IH0gZnJvbSAnLi9jb21tb24vVXBsb2FkRmlsZVByZXZpZXcnO1xuXG5pbnRlcmZhY2UgQ2hhdE1lc3NhZ2VQcm9wcyB7XG4gIG1lc3NhZ2U6IENoYXRNZXNzYWdlO1xuICB0aGVtZT86IHtcbiAgICBwcmltYXJ5Q29sb3I/OiBzdHJpbmc7XG4gICAgc2Vjb25kYXJ5Q29sb3I/OiBzdHJpbmc7XG4gICAgZm9udEZhbWlseT86IHN0cmluZztcbiAgICBmb250U2l6ZT86IHN0cmluZztcbiAgICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gICAgdGV4dENvbG9yPzogc3RyaW5nO1xuICB9O1xuICBvblBsYXlBdWRpbz86ICh0ZXh0OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIGlzUGxheWluZ0F1ZGlvPzogYm9vbGVhbjtcbiAgaXNGaXJzdE1lc3NhZ2U/OiBib29sZWFuO1xuICBpc05leHRTYW1lU3BlYWtlcj86IGJvb2xlYW47XG4gIGlzUHJldlNhbWVTcGVha2VyPzogYm9vbGVhbjtcbiAgb25GZWVkYmFjaz86IChtZXNzYWdlSWQ6IHN0cmluZywgdmFsdWU6ICdnb29kJyB8ICdiYWQnKSA9PiB2b2lkO1xuICBlbmFibGVUeXBld3JpdGVyPzogYm9vbGVhbjtcbiAgd2VsY29tZUltYWdlVXJsPzogc3RyaW5nO1xuICB3ZWxjb21lVGl0bGU/OiBzdHJpbmc7XG4gIHBvc3NpYmxlUXVlcmllcz86IHN0cmluZ1tdO1xuICBvblF1aWNrUXVlcnk/OiAocXVlcnk6IHN0cmluZykgPT4gdm9pZDtcbiAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW47XG4gIG9uUXVpY2tBY3Rpb24/OiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblNjaGVkdWxlQ29uZmlybT86IChzY2hlZHVsZTogU2NoZWR1bGVJdGVtKSA9PiB2b2lkO1xuICB0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnM7XG4gIGxhbmd1YWdlPzogc3RyaW5nO1xuICBhZ2VudE5hbWU/OiBzdHJpbmc7IC8vIEN1c3RvbSBhZ2VudCBuYW1lIHRvIGRpc3BsYXkgaW5zdGVhZCBvZiB0cmFuc2xhdGlvblxuICBpc0FnZW50VHlwaW5nPzogYm9vbGVhbjsgLy8gV2hldGhlciBhZ2VudCBpcyBjdXJyZW50bHkgdHlwaW5nL3RoaW5raW5nXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0TWVzc2FnZUNvbXBvbmVudDogUmVhY3QuRkM8Q2hhdE1lc3NhZ2VQcm9wcz4gPSAoe1xuICBtZXNzYWdlLFxuICB0aGVtZSxcbiAgb25QbGF5QXVkaW8sXG4gIGlzRmlyc3RNZXNzYWdlID0gZmFsc2UsXG4gIGlzUHJldlNhbWVTcGVha2VyID0gZmFsc2UsXG4gIG9uRmVlZGJhY2ssXG4gIHdlbGNvbWVJbWFnZVVybCxcbiAgd2VsY29tZVRpdGxlOiB3ZWxjb21lVGl0bGVQcm9wLFxuICBwb3NzaWJsZVF1ZXJpZXMsXG4gIG9uUXVpY2tRdWVyeSxcbiAgaXNMYXN0TWVzc2FnZSA9IGZhbHNlLFxuICBvblF1aWNrQWN0aW9uLFxuICBvblNjaGVkdWxlQ29uZmlybSxcbiAgdHJhbnNsYXRpb25zOiBjdXN0b21UcmFuc2xhdGlvbnMsXG4gIGxhbmd1YWdlLFxuICBhZ2VudE5hbWUsXG4gIGlzQWdlbnRUeXBpbmcgPSBmYWxzZSxcbn0pID0+IHtcbiAgLy8gTWVyZ2UgdHJhbnNsYXRpb25zIHdpdGggZGVmYXVsdHNcbiAgY29uc3QgdHJhbnNsYXRpb25zID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiBtZXJnZVRyYW5zbGF0aW9ucyhjdXN0b21UcmFuc2xhdGlvbnMsIGRlZmF1bHRUcmFuc2xhdGlvbnMpLFxuICAgIFtjdXN0b21UcmFuc2xhdGlvbnNdXG4gICk7XG5cbiAgLy8gVHJhbnNsYXRpb24gaGVscGVyXG4gIGNvbnN0IHQgPSAoa2V5OiBzdHJpbmcsIGZhbGxiYWNrPzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gZ2V0VHJhbnNsYXRpb25TdHJpbmcoa2V5LCB0cmFuc2xhdGlvbnMsIGZhbGxiYWNrKTtcbiAgfTtcbiAgY29uc3QgaXNVc2VyID0gbWVzc2FnZS5zcGVha2VyID09PSAnY3VzdG9tZXInO1xuICBjb25zdCBpc1NwZWNpYWwgPSBtZXNzYWdlLnNwZWFrZXIgPT09ICdzcGVjaWFsJztcbiAgY29uc3QgaXNXZWxjb21lTWVzc2FnZSA9ICFpc1VzZXIgJiYgIWlzU3BlY2lhbCAmJiBpc0ZpcnN0TWVzc2FnZTtcbiAgY29uc3QgW2lzSG92ZXJlZCwgc2V0SXNIb3ZlcmVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2VkaXRpbmdGZWVkYmFja10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtkaXNwbGF5VGV4dF0gPSBSZWFjdC51c2VTdGF0ZTxzdHJpbmc+KG1lc3NhZ2UudGV4dCk7XG4gIGNvbnN0IGNvbnRlbnRCbG9ja3MgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IHBhcnNlSW50ZXJhY3RpdmVDb250ZW50QmxvY2tzKGRpc3BsYXlUZXh0LCBtZXNzYWdlPy50eXBlIGFzICdmaWxlJyB8ICdtZXNzYWdlJyB8IHVuZGVmaW5lZCksXG4gICAgW2Rpc3BsYXlUZXh0XVxuICApO1xuXG4gIC8vIEZvcm1hdCB0aW1lc3RhbXAgd2l0aCB0cmFuc2xhdGlvbnNcbiAgY29uc3QgdGltZXN0YW1wID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgdGltZVRyYW5zbGF0aW9ucyA9IHRyYW5zbGF0aW9ucz8udGltZSA/IHtcbiAgICAgIGp1c3ROb3c6IHRyYW5zbGF0aW9ucy50aW1lLmp1c3ROb3csXG4gICAgICB0b2RheTogdHJhbnNsYXRpb25zLnRpbWUudG9kYXksXG4gICAgICB5ZXN0ZXJkYXk6IHRyYW5zbGF0aW9ucy50aW1lLnllc3RlcmRheSxcbiAgICB9IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBmb3JtYXRUaW1lc3RhbXAobWVzc2FnZS5jcmVhdGVfdGltZSwgbGFuZ3VhZ2UsIHRpbWVUcmFuc2xhdGlvbnMpO1xuICB9LCBbbWVzc2FnZS5jcmVhdGVfdGltZSwgbGFuZ3VhZ2UsIHRyYW5zbGF0aW9uc10pO1xuXG4gIC8vIEZhc3QgdHlwZXdyaXRlciBlZmZlY3QgZm9yIG5ld2x5IGRpc3BsYXllZCBhZ2VudCBtZXNzYWdlcywgZml4IGxhdGVyXG4gIC8vIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gIC8vICAgaWYgKCFpc1VzZXIgJiYgIWlzU3BlY2lhbCAmJiBlbmFibGVUeXBld3JpdGVyICYmIG1lc3NhZ2UudGV4dCAhPT0gbGFzdEFuaW1hdGVkUmVmLmN1cnJlbnQpIHtcbiAgLy8gICAgIGxhc3RBbmltYXRlZFJlZi5jdXJyZW50ID0gbWVzc2FnZS50ZXh0O1xuICAvLyAgICAgc2V0SXNUeXBld3JpdGluZyh0cnVlKTtcbiAgLy8gICAgIHNldERpc3BsYXlUZXh0KCcnKTtcbiAgLy8gICAgIGxldCBpID0gMDtcbiAgLy8gICAgIGNvbnN0IHRvdGFsID0gbWVzc2FnZS50ZXh0Lmxlbmd0aDtcbiAgLy8gICAgIGNvbnN0IHRpY2tNcyA9IDE2O1xuICAvLyAgICAgY29uc3QgdGFyZ2V0TXMgPSAxMjAwO1xuICAvLyAgICAgY29uc3QgY2hhcnNQZXJUaWNrID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCh0b3RhbCAvICh0YXJnZXRNcyAvIHRpY2tNcykpKTtcbiAgLy8gICAgIGNvbnN0IGludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgLy8gICAgICAgaSArPSBjaGFyc1BlclRpY2s7XG4gIC8vICAgICAgIGlmIChpID49IHRvdGFsKSB7XG4gIC8vICAgICAgICAgc2V0RGlzcGxheVRleHQobWVzc2FnZS50ZXh0KTtcbiAgLy8gICAgICAgICBzZXRJc1R5cGV3cml0aW5nKGZhbHNlKTtcbiAgLy8gICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gIC8vICAgICAgIH0gZWxzZSB7XG4gIC8vICAgICAgICAgc2V0RGlzcGxheVRleHQobWVzc2FnZS50ZXh0LnNsaWNlKDAsIGkpKTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSwgdGlja01zKTtcbiAgLy8gICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHNldERpc3BsYXlUZXh0KG1lc3NhZ2UudGV4dCk7XG4gIC8vICAgICBzZXRJc1R5cGV3cml0aW5nKGZhbHNlKTtcbiAgLy8gICB9XG4gIC8vIH0sIFttZXNzYWdlLnRleHQsIGVuYWJsZVR5cGV3cml0ZXIsIGlzVXNlciwgaXNTcGVjaWFsXSk7XG5cbiAgLy8gVXBkYXRlZCBkZXNpZ24gY29sb3JzXG4gIGNvbnN0IHVzZXJCdWJibGVCZ0NvbG9yID0gJyNFNEU0RTcnOyAvLyBncmV5IGZvciB1c2VyXG4gIGNvbnN0IHVzZXJUZXh0Q29sb3IgPSAnIzAwMDAwMCc7XG4gIGNvbnN0IGFnZW50VGV4dENvbG9yID0gdGhlbWU/LnRleHRDb2xvciB8fCAnIzAwMDAwMCc7XG4gIGNvbnN0IHByaW1hcnlDb2xvciA9IHRoZW1lPy5wcmltYXJ5Q29sb3IgfHwgJyM0ZjQ2ZTUnO1xuICBjb25zdCBmb250RmFtaWx5ID0gdGhlbWU/LmZvbnRGYW1pbHkgfHwgJ1JvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYnO1xuICBjb25zdCBmb250U2l6ZSA9IHRoZW1lPy5mb250U2l6ZSB8fCAnMTVweCc7XG4gIGNvbnN0IGJ1YmJsZVRleHRDb2xvciA9IGlzVXNlciA/IHVzZXJUZXh0Q29sb3IgOiBhZ2VudFRleHRDb2xvcjtcblxuICBjb25zdCBtZXNzYWdlQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgbWFyZ2luQm90dG9tOiBpc1ByZXZTYW1lU3BlYWtlciA/ICc4cHgnIDogJzhweCcsXG4gICAgbWFyZ2luVG9wOiBpc1ByZXZTYW1lU3BlYWtlciA/ICcwcHgnIDogJzE2cHgnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGFsaWduSXRlbXM6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcsXG4gIH07XG5cbiAgY29uc3QgbGFiZWxSb3dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiBpc1ByZXZTYW1lU3BlYWtlciA/ICdub25lJyA6ICdmbGV4JyxcbiAgICB3aWR0aDogJzgwJScsXG4gICAganVzdGlmeUNvbnRlbnQ6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcsXG4gICAgYWxpZ25JdGVtczogJ2Jhc2VsaW5lJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIG1hcmdpbkJvdHRvbTogJzZweCcsXG4gIH07XG5cbiAgY29uc3QgbWVzc2FnZUxhYmVsU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBjb2xvcjogJyMwMDAwMDAnLFxuICAgIGxpbmVIZWlnaHQ6IDEsXG4gICAgZm9udFdlaWdodDogNjAwLFxuICB9O1xuXG4gIGNvbnN0IHRvcFRpbWVzdGFtcFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTNweCcsXG4gICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICBsaW5lSGVpZ2h0OiAxLFxuICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VCdWJibGVDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgbWF4V2lkdGg6ICc4MCUnLFxuICB9O1xuXG4gIC8vIE9ubHkgdXNlcidzIG1lc3NhZ2VzIHNob3VsZCByZW5kZXIgYXMgYnViYmxlcy5cbiAgLy8gQWdlbnQgbWVzc2FnZXMgYXJlIHBsYWluIHRleHQgd2l0aCBubyBjb250YWluZXIgYmFja2dyb3VuZC5cbiAgY29uc3QgYnViYmxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSBpc1VzZXJcbiAgICA/IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB1c2VyQnViYmxlQmdDb2xvcixcbiAgICAgICAgY29sb3I6IHVzZXJUZXh0Q29sb3IsXG4gICAgICAgIHBhZGRpbmc6ICcxMnB4IDE2cHgnLFxuICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4IDAgMTJweCAxMnB4JyxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxuICAgICAgICBsaW5lSGVpZ2h0OiAxLjQsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICBib3hTaGFkb3c6ICcwIDFweCAycHggcmdiYSgwLDAsMCwwLjA4KSdcbiAgICAgIH1cbiAgICA6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICBjb2xvcjogYWdlbnRUZXh0Q29sb3IsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxuICAgICAgICBsaW5lSGVpZ2h0OiAxLjQsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICBib3hTaGFkb3c6ICdub25lJ1xuICAgICAgfTtcblxuICBjb25zdCBhdHRhY2htZW50c0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIG1hcmdpblRvcDogJzhweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGdhcDogJzhweCcsXG4gIH07XG5cbiAgLy8gRmVlZGJhY2sgc3RhdGUgYW5kIFVJICh0aHVtYnMgdXAvZG93bikgZm9yIGFnZW50IG1lc3NhZ2VzXG4gIGNvbnN0IGZlZWRiYWNrVmFsdWUgPSAobWVzc2FnZS5mZWVkYmFjayAmJiBtZXNzYWdlLmZlZWRiYWNrLmxlbmd0aCA+IDApXG4gICAgPyBtZXNzYWdlLmZlZWRiYWNrW21lc3NhZ2UuZmVlZGJhY2subGVuZ3RoIC0gMV0uZmVlZGJhY2tcbiAgICA6IHVuZGVmaW5lZDtcblxuICBjb25zdCB0aHVtYnNTaG91bGRTaG93ID0gIWlzVXNlciAmJiAhaXNTcGVjaWFsICYmIGlzSG92ZXJlZCAmJiAhZmVlZGJhY2tWYWx1ZTtcbiAgY29uc3Qgc2hvd1RodW1ic0FyZWEgPSAhaXNVc2VyICYmICFpc1NwZWNpYWw7IC8vIE9ubHkgYWdlbnRzIGhhdmUgdGh1bWJzIGFyZWFcblxuICBjb25zdCBmZWVkYmFja1Jvd1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6IHNob3dUaHVtYnNBcmVhID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgIG1hcmdpblRvcDogOCxcbiAgICBhbGlnblNlbGY6ICdmbGV4LXN0YXJ0JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBoZWlnaHQ6IDIwLFxuICAgIGdhcDogOCxcbiAgICB2aXNpYmlsaXR5OiB0aHVtYnNTaG91bGRTaG93IHx8ICEhZmVlZGJhY2tWYWx1ZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nLFxuICB9O1xuXG4gIGNvbnN0IGljb25CdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgY29sb3I6ICcjOWNhM2FmJyxcbiAgICBkaXNwbGF5OiB0aHVtYnNTaG91bGRTaG93ID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9O1xuXG4gIGNvbnN0IHNlcGFyYXRvclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHdpZHRoOiAxLFxuICAgIGhlaWdodDogMTQsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2U1ZTdlYicsXG4gICAgZGlzcGxheTogdGh1bWJzU2hvdWxkU2hvdyA/ICdibG9jaycgOiAnbm9uZScsXG4gIH07XG5cbiAgY29uc3Qgc2luZ2xlSWNvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGNvbG9yOiAnIzAwMDAwMCcsXG4gICAgZGlzcGxheTogZmVlZGJhY2tWYWx1ZSA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfTtcblxuICBsZXQgd2VsY29tZVRpdGxlID0gd2VsY29tZVRpdGxlUHJvcCB8fCAnJztcbiAgbGV0IHdlbGNvbWVDb250ZW50ID0gJyc7XG4gIFxuICBpZiAoaXNXZWxjb21lTWVzc2FnZSkge1xuICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gbWVzc2FnZS50ZXh0O1xuICAgIGlmICghd2VsY29tZVRpdGxlUHJvcCkge1xuICAgICAgY29uc3QgcGFydHMgPSBtZXNzYWdlVGV4dC5zcGxpdCgvW1xcblxcLiE/XS8pO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDApIHdlbGNvbWVUaXRsZSA9IChwYXJ0c1swXSB8fCAnJykudHJpbSgpO1xuICAgICAgd2VsY29tZUNvbnRlbnQgPSBtZXNzYWdlVGV4dC5zdWJzdHJpbmcod2VsY29tZVRpdGxlLmxlbmd0aCkudHJpbSgpO1xuICAgICAgd2VsY29tZUNvbnRlbnQgPSB3ZWxjb21lQ29udGVudC5yZXBsYWNlKC9eWywuIT9cXHNdKy8sICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2VsY29tZUNvbnRlbnQgPSBtZXNzYWdlVGV4dDtcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgc3BlY2lhbCBtZXNzYWdlcyAobGlrZSB0YWtlb3ZlciBpbmRpY2F0b3JzKVxuICBpZiAoaXNTcGVjaWFsKSB7XG4gICAgY29uc3Qgc3BlY2lhbE1lc3NhZ2VTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgbWFyZ2luOiAnMTZweCAwJyxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgfTtcblxuICAgIC8vIERldGVybWluZSBpY29uIGFuZCBzdHlsZSBiYXNlZCBvbiBtZXNzYWdlIGNvbnRlbnRcbiAgICBsZXQgaWNvbjtcbiAgICBsZXQgYmFja2dyb3VuZENvbG9yID0gJyNFM0YyRkQnO1xuICAgIGxldCB0ZXh0Q29sb3IgPSAnIzE5NzZEMic7XG4gICAgXG4gICAgaWYgKG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdvZmZsaW5lJykgfHwgbWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2luYWN0aXZlJykpIHtcbiAgICAgIGljb24gPSA8QWxlcnRDaXJjbGUgc2l6ZT17MTh9IC8+O1xuICAgICAgYmFja2dyb3VuZENvbG9yID0gJyNGRkYzRTAnO1xuICAgICAgdGV4dENvbG9yID0gJyNGNTdDMDAnO1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Rvb2sgb3ZlcicpIHx8IG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd0YWtlb3ZlcicpKSB7XG4gICAgICBpY29uID0gPFVzZXJYIHNpemU9ezE4fSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWNvbiA9IDxVc2VyIHNpemU9ezE4fSAvPjtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjaWFsQnViYmxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgcGFkZGluZzogJzhweCAxNnB4JyxcbiAgICAgIGJvcmRlclJhZGl1czogJzE2cHgnLFxuICAgICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICAgIGZvbnRGYW1pbHksXG4gICAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgZ2FwOiAnOHB4JyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3NwZWNpYWxNZXNzYWdlU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtzcGVjaWFsQnViYmxlU3R5bGV9PlxuICAgICAgICAgIHtpY29ufVxuICAgICAgICAgIHttZXNzYWdlLnRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc1dlbGNvbWVNZXNzYWdlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e21lc3NhZ2VDb250YWluZXJTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4ubWVzc2FnZUJ1YmJsZUNvbnRhaW5lclN0eWxlIH19PlxuICAgICAgICAgIDxXZWxjb21lQ2FyZFxuICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgaW1hZ2VVcmw9e3dlbGNvbWVJbWFnZVVybH1cbiAgICAgICAgICAgIHRpdGxlPXt3ZWxjb21lVGl0bGV9XG4gICAgICAgICAgICBjb250ZW50PXt3ZWxjb21lQ29udGVudH1cbiAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcz17cG9zc2libGVRdWVyaWVzfVxuICAgICAgICAgICAgb25RdWlja1F1ZXJ5PXtvblF1aWNrUXVlcnl9XG4gICAgICAgICAgICBpc0FnZW50VHlwaW5nPXtpc0FnZW50VHlwaW5nfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBcbiAgICAgIHN0eWxlPXttZXNzYWdlQ29udGFpbmVyU3R5bGV9XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldElzSG92ZXJlZCh0cnVlKX1cbiAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4geyBpZiAoIWVkaXRpbmdGZWVkYmFjaykgc2V0SXNIb3ZlcmVkKGZhbHNlKTsgfX1cbiAgICA+XG4gICAgICA8ZGl2IHN0eWxlPXtsYWJlbFJvd1N0eWxlfT5cbiAgICAgICAge2lzVXNlciA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17dG9wVGltZXN0YW1wU3R5bGV9Pnt0aW1lc3RhbXB9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlTGFiZWxTdHlsZX0+e3QoJ2xhYmVscy55b3UnKX08L2Rpdj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bWVzc2FnZUxhYmVsU3R5bGV9PnthZ2VudE5hbWUgfHwgdCgnbGFiZWxzLmFnZW50Jyl9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt0b3BUaW1lc3RhbXBTdHlsZX0+e3RpbWVzdGFtcH08L2Rpdj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7bWVzc2FnZS5hdHRhY2htZW50cyAmJiBtZXNzYWdlLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLmF0dGFjaG1lbnRzQ29udGFpbmVyU3R5bGUsIGFsaWduSXRlbXM6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcgfX0+XG4gICAgICAgICAge21lc3NhZ2UuYXR0YWNobWVudHMubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPFVwbG9hZEZpbGVQcmV2aWV3IGtleT17aW5kZXh9IGZpbGU9e2F0dGFjaG1lbnR9IC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAge21lc3NhZ2UudGV4dCAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnOHB4JywgYWxpZ25TZWxmOiBpc1VzZXIgPyAnZmxleC1lbmQnIDogJ2ZsZXgtc3RhcnQnIH19PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uYnViYmxlU3R5bGUsIHBvc2l0aW9uOiAncmVsYXRpdmUnIH19PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDEyIH19PlxuICAgICAgICAgICAgICA8SW50ZXJhY3RpdmVDb250ZW50XG4gICAgICAgICAgICAgICAgYmxvY2tzPXtjb250ZW50QmxvY2tzfVxuICAgICAgICAgICAgICAgIHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgICAgIHRleHRDb2xvcj17YnViYmxlVGV4dENvbG9yfVxuICAgICAgICAgICAgICAgIGlzQWN0aW9uYWJsZT17IWlzVXNlciAmJiBpc0xhc3RNZXNzYWdlICYmICFpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAgIG9uUXVpY2tBY3Rpb249e29uUXVpY2tBY3Rpb259XG4gICAgICAgICAgICAgICAgb25TY2hlZHVsZUNvbmZpcm09e29uU2NoZWR1bGVDb25maXJtfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgey8qIEZlZWRiYWNrIHJvdyBiZWxvdyBhZ2VudCBtZXNzYWdlICovfVxuICAgICAge3Nob3dUaHVtYnNBcmVhICYmIChcbiAgICAgICAgPGRpdiBzdHlsZT17ZmVlZGJhY2tSb3dTdHlsZX0+XG4gICAgICAgICAge2ZlZWRiYWNrVmFsdWUgPyAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtzaW5nbGVJY29uU3R5bGV9PlxuICAgICAgICAgICAgICB7ZmVlZGJhY2tWYWx1ZSA9PT0gJ2dvb2QnID8gKFxuICAgICAgICAgICAgICAgIDxUaHVtYnNVcCBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VGh1bWJzRG93biBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e2ljb25CdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICB0aXRsZT17dCgnZmVlZGJhY2sudGh1bWJzVXAnKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBVc2UgbWVzc2FnZV9pZCBmcm9tIHNvY2tldCwgZmFsbGJhY2sgdG8gaWQgaWYgbWVzc2FnZV9pZCBkb2Vzbid0IGV4aXN0XG4gICAgICAgICAgICAgICAgICBjb25zdCBtc2dJZCA9IG1lc3NhZ2UubWVzc2FnZV9pZCB8fCAobWVzc2FnZSBhcyBhbnkpLmlkO1xuICAgICAgICAgICAgICAgICAgaWYgKG1zZ0lkICYmIG9uRmVlZGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgb25GZWVkYmFjayhtc2dJZCwgJ2dvb2QnKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8VGh1bWJzVXAgc2l6ZT17MTh9IC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtzZXBhcmF0b3JTdHlsZX0gLz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHN0eWxlPXtpY29uQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgdGl0bGU9e3QoJ2ZlZWRiYWNrLnRodW1ic0Rvd24nKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBVc2UgbWVzc2FnZV9pZCBmcm9tIHNvY2tldCwgZmFsbGJhY2sgdG8gaWQgaWYgbWVzc2FnZV9pZCBkb2Vzbid0IGV4aXN0XG4gICAgICAgICAgICAgICAgICBjb25zdCBtc2dJZCA9IG1lc3NhZ2UubWVzc2FnZV9pZCB8fCAobWVzc2FnZSBhcyBhbnkpLmlkO1xuICAgICAgICAgICAgICAgICAgaWYgKG1zZ0lkICYmIG9uRmVlZGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgb25GZWVkYmFjayhtc2dJZCwgJ2JhZCcpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUaHVtYnNEb3duIHNpemU9ezE4fSAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iXX0=