@pie-lib/math-input-mathlive 1.1.5-beta.6 → 1.1.5-beta.7

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.
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
7
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _react2 = require("@testing-library/react");
10
+ var _keypad = _interopRequireWildcard(require("../keypad"));
11
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
12
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
+ /**
15
+ * Keypad behaviour that is new in this package: labels are static markup from
16
+ * convertLatexToMarkup (the MathQuill version created a live StaticMath per
17
+ * button), with a raw-latex fallback when the engine is unavailable.
18
+ */
19
+ describe('LatexLabel', function () {
20
+ it('falls back to raw latex when MathLive is unavailable', function () {
21
+ // jsdom cannot load MathLive, so latexToMarkup returns '' - the button must
22
+ // still show something rather than render blank.
23
+ var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_keypad.LatexLabel, {
24
+ latex: '\\pi'
25
+ })),
26
+ container = _render.container;
27
+ expect(container.textContent).toContain('\\pi');
28
+ });
29
+ it('re-renders when the latex prop changes', function () {
30
+ var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_keypad.LatexLabel, {
31
+ latex: '\\pi'
32
+ })),
33
+ container = _render2.container,
34
+ rerender = _render2.rerender;
35
+ rerender(/*#__PURE__*/_react["default"].createElement(_keypad.LatexLabel, {
36
+ latex: '\\theta'
37
+ }));
38
+ expect(container.textContent).toContain('\\theta');
39
+ });
40
+ it('does not warn more than once about a missing engine', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
41
+ var a, b;
42
+ return _regenerator["default"].wrap(function (_context) {
43
+ while (1) switch (_context.prev = _context.next) {
44
+ case 0:
45
+ _keypad.LatexLabel.warned = false;
46
+ a = new _keypad.LatexLabel({
47
+ latex: '\\pi'
48
+ });
49
+ b = new _keypad.LatexLabel({
50
+ latex: '\\theta'
51
+ });
52
+ a.state = {
53
+ markup: ''
54
+ };
55
+ b.state = {
56
+ markup: ''
57
+ };
58
+ a.setState = function () {};
59
+ b.setState = function () {};
60
+ _context.next = 1;
61
+ return a.componentDidMount();
62
+ case 1:
63
+ _context.next = 2;
64
+ return b.componentDidMount();
65
+ case 2:
66
+ expect(_keypad.LatexLabel.warned).toBe(true);
67
+ case 3:
68
+ case "end":
69
+ return _context.stop();
70
+ }
71
+ }, _callee);
72
+ })));
73
+ });
74
+ describe('KeyPad', function () {
75
+ var key = function key() {
76
+ var over = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
77
+ return _objectSpread({
78
+ name: 'x',
79
+ label: 'x',
80
+ write: 'x',
81
+ category: 'vars'
82
+ }, over);
83
+ };
84
+ it('renders a button per key', function () {
85
+ var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_keypad["default"], {
86
+ onPress: function onPress() {},
87
+ baseSet: [[key(), key({
88
+ name: 'y',
89
+ label: 'y'
90
+ })]]
91
+ })),
92
+ container = _render3.container;
93
+ expect(container.querySelectorAll('button').length).toBe(2);
94
+ });
95
+ it('calls onPress with the whole key definition', function () {
96
+ var onPress = jest.fn();
97
+ var k = key();
98
+ var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_keypad["default"], {
99
+ onPress: onPress,
100
+ baseSet: [[k]]
101
+ })),
102
+ container = _render4.container;
103
+ container.querySelector('button').click();
104
+ expect(onPress).toHaveBeenCalledWith(k);
105
+ });
106
+ it('renders a latex key through LatexLabel', function () {
107
+ var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_keypad["default"], {
108
+ onPress: function onPress() {},
109
+ baseSet: [[{
110
+ name: 'pi',
111
+ latex: '\\pi'
112
+ }]]
113
+ })),
114
+ container = _render5.container;
115
+ expect(container.textContent).toContain('\\pi');
116
+ });
117
+ it('disables the decimal separators when noDecimal is set', function () {
118
+ var dot = key({
119
+ name: '.',
120
+ label: '.',
121
+ write: '.'
122
+ });
123
+ var comma = key({
124
+ name: ',',
125
+ label: ',',
126
+ write: ','
127
+ });
128
+ var _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_keypad["default"], {
129
+ onPress: function onPress() {},
130
+ noDecimal: true,
131
+ baseSet: [[dot, comma]]
132
+ })),
133
+ container = _render6.container;
134
+ var disabled = Array.from(container.querySelectorAll('button')).filter(function (b) {
135
+ return b.disabled;
136
+ });
137
+ expect(disabled.length).toBe(2);
138
+ });
139
+ it('leaves the separators enabled otherwise', function () {
140
+ var dot = key({
141
+ name: '.',
142
+ label: '.',
143
+ write: '.'
144
+ });
145
+ var _render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_keypad["default"], {
146
+ onPress: function onPress() {},
147
+ baseSet: [[dot]]
148
+ })),
149
+ container = _render7.container;
150
+ expect(container.querySelector('button').disabled).toBe(false);
151
+ });
152
+ it('renders a placeholder for empty grid slots', function () {
153
+ expect(function () {
154
+ return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_keypad["default"], {
155
+ onPress: function onPress() {},
156
+ baseSet: [[null]]
157
+ }));
158
+ }).not.toThrow();
159
+ });
160
+ it('notifies setKeypadInteraction on pointer interaction', function () {
161
+ var setKeypadInteraction = jest.fn();
162
+ var _render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_keypad["default"], {
163
+ onPress: function onPress() {},
164
+ setKeypadInteraction: setKeypadInteraction,
165
+ baseSet: [[key()]]
166
+ })),
167
+ container = _render8.container;
168
+ container.firstChild.dispatchEvent(new MouseEvent('mousedown', {
169
+ bubbles: true
170
+ }));
171
+ expect(setKeypadInteraction).toHaveBeenCalledWith(true);
172
+ });
173
+ it('uses the mode as a class so mode-specific styling applies', function () {
174
+ var _render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_keypad["default"], {
175
+ onPress: function onPress() {},
176
+ mode: "language",
177
+ baseSet: [[key()]]
178
+ })),
179
+ container = _render9.container;
180
+ expect(container.firstChild.className).toContain('language');
181
+ });
182
+ it('drops the base set for the modes that supply their own keys', function () {
183
+ var _render0 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_keypad["default"], {
184
+ onPress: function onPress() {},
185
+ mode: "language",
186
+ baseSet: [[key(), key()]],
187
+ additionalKeys: [[key()]]
188
+ })),
189
+ container = _render0.container;
190
+
191
+ // base set ignored, only the additional key renders
192
+ expect(container.querySelectorAll('button').length).toBe(1);
193
+ });
194
+ it('unmounts without throwing', function () {
195
+ var _render1 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_keypad["default"], {
196
+ onPress: function onPress() {},
197
+ controlledKeypadMode: true,
198
+ baseSet: [[key()]]
199
+ })),
200
+ unmount = _render1.unmount;
201
+ expect(function () {
202
+ return unmount();
203
+ }).not.toThrow();
204
+ });
205
+ });
206
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfa2V5cGFkIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVzY3JpYmUiLCJpdCIsIl9yZW5kZXIiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiTGF0ZXhMYWJlbCIsImxhdGV4IiwiY29udGFpbmVyIiwiZXhwZWN0IiwidGV4dENvbnRlbnQiLCJ0b0NvbnRhaW4iLCJfcmVuZGVyMiIsInJlcmVuZGVyIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJhIiwiYiIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0Iiwid2FybmVkIiwic3RhdGUiLCJtYXJrdXAiLCJzZXRTdGF0ZSIsImNvbXBvbmVudERpZE1vdW50IiwidG9CZSIsInN0b3AiLCJrZXkiLCJvdmVyIiwidW5kZWZpbmVkIiwibmFtZSIsImxhYmVsIiwid3JpdGUiLCJjYXRlZ29yeSIsIl9yZW5kZXIzIiwib25QcmVzcyIsImJhc2VTZXQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiamVzdCIsImZuIiwiayIsIl9yZW5kZXI0IiwicXVlcnlTZWxlY3RvciIsImNsaWNrIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJfcmVuZGVyNSIsImRvdCIsImNvbW1hIiwiX3JlbmRlcjYiLCJub0RlY2ltYWwiLCJkaXNhYmxlZCIsIkFycmF5IiwiZnJvbSIsIl9yZW5kZXI3Iiwibm90IiwidG9UaHJvdyIsInNldEtleXBhZEludGVyYWN0aW9uIiwiX3JlbmRlcjgiLCJmaXJzdENoaWxkIiwiZGlzcGF0Y2hFdmVudCIsIk1vdXNlRXZlbnQiLCJidWJibGVzIiwiX3JlbmRlcjkiLCJtb2RlIiwiY2xhc3NOYW1lIiwiX3JlbmRlcjAiLCJhZGRpdGlvbmFsS2V5cyIsIl9yZW5kZXIxIiwiY29udHJvbGxlZEtleXBhZE1vZGUiLCJ1bm1vdW50Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9rZXlwYWQtcmVuZGVyLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcblxuaW1wb3J0IEtleVBhZCwgeyBMYXRleExhYmVsIH0gZnJvbSAnLi4va2V5cGFkJztcblxuLyoqXG4gKiBLZXlwYWQgYmVoYXZpb3VyIHRoYXQgaXMgbmV3IGluIHRoaXMgcGFja2FnZTogbGFiZWxzIGFyZSBzdGF0aWMgbWFya3VwIGZyb21cbiAqIGNvbnZlcnRMYXRleFRvTWFya3VwICh0aGUgTWF0aFF1aWxsIHZlcnNpb24gY3JlYXRlZCBhIGxpdmUgU3RhdGljTWF0aCBwZXJcbiAqIGJ1dHRvbiksIHdpdGggYSByYXctbGF0ZXggZmFsbGJhY2sgd2hlbiB0aGUgZW5naW5lIGlzIHVuYXZhaWxhYmxlLlxuICovXG5kZXNjcmliZSgnTGF0ZXhMYWJlbCcsICgpID0+IHtcbiAgaXQoJ2ZhbGxzIGJhY2sgdG8gcmF3IGxhdGV4IHdoZW4gTWF0aExpdmUgaXMgdW5hdmFpbGFibGUnLCAoKSA9PiB7XG4gICAgLy8ganNkb20gY2Fubm90IGxvYWQgTWF0aExpdmUsIHNvIGxhdGV4VG9NYXJrdXAgcmV0dXJucyAnJyAtIHRoZSBidXR0b24gbXVzdFxuICAgIC8vIHN0aWxsIHNob3cgc29tZXRoaW5nIHJhdGhlciB0aGFuIHJlbmRlciBibGFuay5cbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxMYXRleExhYmVsIGxhdGV4PXsnXFxcXHBpJ30gLz4pO1xuXG4gICAgZXhwZWN0KGNvbnRhaW5lci50ZXh0Q29udGVudCkudG9Db250YWluKCdcXFxccGknKTtcbiAgfSk7XG5cbiAgaXQoJ3JlLXJlbmRlcnMgd2hlbiB0aGUgbGF0ZXggcHJvcCBjaGFuZ2VzJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGFpbmVyLCByZXJlbmRlciB9ID0gcmVuZGVyKDxMYXRleExhYmVsIGxhdGV4PXsnXFxcXHBpJ30gLz4pO1xuXG4gICAgcmVyZW5kZXIoPExhdGV4TGFiZWwgbGF0ZXg9eydcXFxcdGhldGEnfSAvPik7XG5cbiAgICBleHBlY3QoY29udGFpbmVyLnRleHRDb250ZW50KS50b0NvbnRhaW4oJ1xcXFx0aGV0YScpO1xuICB9KTtcblxuICBpdCgnZG9lcyBub3Qgd2FybiBtb3JlIHRoYW4gb25jZSBhYm91dCBhIG1pc3NpbmcgZW5naW5lJywgYXN5bmMgKCkgPT4ge1xuICAgIExhdGV4TGFiZWwud2FybmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBhID0gbmV3IExhdGV4TGFiZWwoeyBsYXRleDogJ1xcXFxwaScgfSk7XG4gICAgY29uc3QgYiA9IG5ldyBMYXRleExhYmVsKHsgbGF0ZXg6ICdcXFxcdGhldGEnIH0pO1xuXG4gICAgYS5zdGF0ZSA9IHsgbWFya3VwOiAnJyB9O1xuICAgIGIuc3RhdGUgPSB7IG1hcmt1cDogJycgfTtcbiAgICBhLnNldFN0YXRlID0gKCkgPT4ge307XG4gICAgYi5zZXRTdGF0ZSA9ICgpID0+IHt9O1xuXG4gICAgYXdhaXQgYS5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGF3YWl0IGIuY29tcG9uZW50RGlkTW91bnQoKTtcblxuICAgIGV4cGVjdChMYXRleExhYmVsLndhcm5lZCkudG9CZSh0cnVlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0tleVBhZCcsICgpID0+IHtcbiAgY29uc3Qga2V5ID0gKG92ZXIgPSB7fSkgPT4gKHsgbmFtZTogJ3gnLCBsYWJlbDogJ3gnLCB3cml0ZTogJ3gnLCBjYXRlZ29yeTogJ3ZhcnMnLCAuLi5vdmVyIH0pO1xuXG4gIGl0KCdyZW5kZXJzIGEgYnV0dG9uIHBlciBrZXknLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8S2V5UGFkIG9uUHJlc3M9eygpID0+IHt9fSBiYXNlU2V0PXtbW2tleSgpLCBrZXkoeyBuYW1lOiAneScsIGxhYmVsOiAneScgfSldXX0gLz4pO1xuXG4gICAgZXhwZWN0KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKS5sZW5ndGgpLnRvQmUoMik7XG4gIH0pO1xuXG4gIGl0KCdjYWxscyBvblByZXNzIHdpdGggdGhlIHdob2xlIGtleSBkZWZpbml0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IG9uUHJlc3MgPSBqZXN0LmZuKCk7XG4gICAgY29uc3QgayA9IGtleSgpO1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPEtleVBhZCBvblByZXNzPXtvblByZXNzfSBiYXNlU2V0PXtbW2tdXX0gLz4pO1xuXG4gICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpLmNsaWNrKCk7XG5cbiAgICBleHBlY3Qob25QcmVzcykudG9IYXZlQmVlbkNhbGxlZFdpdGgoayk7XG4gIH0pO1xuXG4gIGl0KCdyZW5kZXJzIGEgbGF0ZXgga2V5IHRocm91Z2ggTGF0ZXhMYWJlbCcsICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxLZXlQYWQgb25QcmVzcz17KCkgPT4ge319IGJhc2VTZXQ9e1tbeyBuYW1lOiAncGknLCBsYXRleDogJ1xcXFxwaScgfV1dfSAvPik7XG5cbiAgICBleHBlY3QoY29udGFpbmVyLnRleHRDb250ZW50KS50b0NvbnRhaW4oJ1xcXFxwaScpO1xuICB9KTtcblxuICBpdCgnZGlzYWJsZXMgdGhlIGRlY2ltYWwgc2VwYXJhdG9ycyB3aGVuIG5vRGVjaW1hbCBpcyBzZXQnLCAoKSA9PiB7XG4gICAgY29uc3QgZG90ID0ga2V5KHsgbmFtZTogJy4nLCBsYWJlbDogJy4nLCB3cml0ZTogJy4nIH0pO1xuICAgIGNvbnN0IGNvbW1hID0ga2V5KHsgbmFtZTogJywnLCBsYWJlbDogJywnLCB3cml0ZTogJywnIH0pO1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPEtleVBhZCBvblByZXNzPXsoKSA9PiB7fX0gbm9EZWNpbWFsIGJhc2VTZXQ9e1tbZG90LCBjb21tYV1dfSAvPik7XG5cbiAgICBjb25zdCBkaXNhYmxlZCA9IEFycmF5LmZyb20oY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpKS5maWx0ZXIoKGIpID0+IGIuZGlzYWJsZWQpO1xuXG4gICAgZXhwZWN0KGRpc2FibGVkLmxlbmd0aCkudG9CZSgyKTtcbiAgfSk7XG5cbiAgaXQoJ2xlYXZlcyB0aGUgc2VwYXJhdG9ycyBlbmFibGVkIG90aGVyd2lzZScsICgpID0+IHtcbiAgICBjb25zdCBkb3QgPSBrZXkoeyBuYW1lOiAnLicsIGxhYmVsOiAnLicsIHdyaXRlOiAnLicgfSk7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8S2V5UGFkIG9uUHJlc3M9eygpID0+IHt9fSBiYXNlU2V0PXtbW2RvdF1dfSAvPik7XG5cbiAgICBleHBlY3QoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpLmRpc2FibGVkKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgYSBwbGFjZWhvbGRlciBmb3IgZW1wdHkgZ3JpZCBzbG90cycsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gcmVuZGVyKDxLZXlQYWQgb25QcmVzcz17KCkgPT4ge319IGJhc2VTZXQ9e1tbbnVsbF1dfSAvPikpLm5vdC50b1Rocm93KCk7XG4gIH0pO1xuXG4gIGl0KCdub3RpZmllcyBzZXRLZXlwYWRJbnRlcmFjdGlvbiBvbiBwb2ludGVyIGludGVyYWN0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IHNldEtleXBhZEludGVyYWN0aW9uID0gamVzdC5mbigpO1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICA8S2V5UGFkIG9uUHJlc3M9eygpID0+IHt9fSBzZXRLZXlwYWRJbnRlcmFjdGlvbj17c2V0S2V5cGFkSW50ZXJhY3Rpb259IGJhc2VTZXQ9e1tba2V5KCldXX0gLz4sXG4gICAgKTtcblxuICAgIGNvbnRhaW5lci5maXJzdENoaWxkLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlZG93bicsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG5cbiAgICBleHBlY3Qoc2V0S2V5cGFkSW50ZXJhY3Rpb24pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHRydWUpO1xuICB9KTtcblxuICBpdCgndXNlcyB0aGUgbW9kZSBhcyBhIGNsYXNzIHNvIG1vZGUtc3BlY2lmaWMgc3R5bGluZyBhcHBsaWVzJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPEtleVBhZCBvblByZXNzPXsoKSA9PiB7fX0gbW9kZT1cImxhbmd1YWdlXCIgYmFzZVNldD17W1trZXkoKV1dfSAvPik7XG5cbiAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQuY2xhc3NOYW1lKS50b0NvbnRhaW4oJ2xhbmd1YWdlJyk7XG4gIH0pO1xuXG4gIGl0KCdkcm9wcyB0aGUgYmFzZSBzZXQgZm9yIHRoZSBtb2RlcyB0aGF0IHN1cHBseSB0aGVpciBvd24ga2V5cycsICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgPEtleVBhZCBvblByZXNzPXsoKSA9PiB7fX0gbW9kZT1cImxhbmd1YWdlXCIgYmFzZVNldD17W1trZXkoKSwga2V5KCldXX0gYWRkaXRpb25hbEtleXM9e1tba2V5KCldXX0gLz4sXG4gICAgKTtcblxuICAgIC8vIGJhc2Ugc2V0IGlnbm9yZWQsIG9ubHkgdGhlIGFkZGl0aW9uYWwga2V5IHJlbmRlcnNcbiAgICBleHBlY3QoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpLmxlbmd0aCkudG9CZSgxKTtcbiAgfSk7XG5cbiAgaXQoJ3VubW91bnRzIHdpdGhvdXQgdGhyb3dpbmcnLCAoKSA9PiB7XG4gICAgY29uc3QgeyB1bm1vdW50IH0gPSByZW5kZXIoPEtleVBhZCBvblByZXNzPXsoKSA9PiB7fX0gY29udHJvbGxlZEtleXBhZE1vZGUgYmFzZVNldD17W1trZXkoKV1dfSAvPik7XG5cbiAgICBleHBlY3QoKCkgPT4gdW5tb3VudCgpKS5ub3QudG9UaHJvdygpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsT0FBQSxHQUFBQyx1QkFBQSxDQUFBSCxPQUFBO0FBQStDLFNBQUFHLHdCQUFBQyxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBSCx1QkFBQSxZQUFBQSx3QkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLG1CQUFBVCxDQUFBLGlCQUFBQSxDQUFBLGdCQUFBVSxPQUFBLENBQUFWLENBQUEsMEJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxH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