@pie-lib/math-evaluator 2.2.0-beta.3 → 2.2.0-beta.5

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/CHANGELOG.md CHANGED
@@ -3,6 +3,46 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [2.2.0-beta.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.5) (2025-07-25)
7
+
8
+ **Note:** Version bump only for package @pie-lib/math-evaluator
9
+
10
+
11
+
12
+
13
+
14
+ # [2.2.0-beta.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.4) (2025-07-25)
15
+
16
+ **Note:** Version bump only for package @pie-lib/math-evaluator
17
+
18
+
19
+
20
+
21
+
22
+ # [2.2.0-beta.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.3) (2025-07-25)
23
+
24
+ **Note:** Version bump only for package @pie-lib/math-evaluator
25
+
26
+
27
+
28
+
29
+
30
+ # [2.2.0-beta.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.4) (2025-07-23)
31
+
32
+ **Note:** Version bump only for package @pie-lib/math-evaluator
33
+
34
+
35
+
36
+
37
+
38
+ # [2.2.0-beta.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.3) (2025-07-23)
39
+
40
+ **Note:** Version bump only for package @pie-lib/math-evaluator
41
+
42
+
43
+
44
+
45
+
6
46
  # [2.2.0-beta.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.3) (2025-07-20)
7
47
 
8
48
  **Note:** Version bump only for package @pie-lib/math-evaluator
@@ -0,0 +1,314 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
8
+
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+
11
+ var _index = _interopRequireWildcard(require("../index"));
12
+
13
+ var _lodash = _interopRequireDefault(require("lodash"));
14
+
15
+ var _templateObject, _templateObject2, _templateObject3;
16
+
17
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
18
+
19
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
20
+
21
+ describe('math-evaluator', function () {
22
+ describe('latexToText', function () {
23
+ var assertLatexToText = function assertLatexToText(input, expected) {
24
+ it("".concat(input, " => ").concat(expected), function () {
25
+ var result = (0, _index.latexToText)(input);
26
+ expect(result).toEqual(expected);
27
+ });
28
+ };
29
+
30
+ assertLatexToText('\\frac{ \\frac{1}{3}}{3}', '(1/3)/3');
31
+ assertLatexToText('\\neq', '0 != 0');
32
+ assertLatexToText('10 \\neq 20', '10 != 20');
33
+ assertLatexToText('10 \\neq', '10 != 0');
34
+ assertLatexToText('\\neq 10', '0 != 10');
35
+ assertLatexToText('40%', 'percent(40)');
36
+ assertLatexToText('%', 'percent(0)');
37
+ assertLatexToText('12%', 'percent(12)');
38
+ assertLatexToText('12\\%', 'percent(12)');
39
+ assertLatexToText('-12.5%', '- percent(12.5)');
40
+ assertLatexToText('-12.5\\%', '- percent(12.5)');
41
+ });
42
+
43
+ var assert = function assert(isEqual, opts) {
44
+ return function (label) {
45
+ return function () {
46
+ var args = Array.from(arguments);
47
+
48
+ var pairs = _lodash["default"].chunk(args, 2);
49
+
50
+ describe(label, function () {
51
+ pairs.forEach(function (_ref) {
52
+ var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
53
+ a = _ref2[0],
54
+ b = _ref2[1];
55
+
56
+ it("".concat(a, " === ").concat(b, " ? ").concat(isEqual), function () {
57
+ expect((0, _index["default"])(a, b, opts)).toBe(isEqual);
58
+ });
59
+ });
60
+ });
61
+ };
62
+ };
63
+ };
64
+
65
+ var assertEqual = assert(true);
66
+ var assertNotEqual = assert(false);
67
+ var assertLatexEqual = assert(true, {
68
+ isLatex: true
69
+ });
70
+ var assertLatexNotEqual = assert(false, {
71
+ isLatex: true
72
+ });
73
+
74
+ var _amjs = function _amjs(only) {
75
+ return function (a, b, equal) {
76
+ var fn = only ? it.only : it;
77
+ fn("".concat(a, " === ").concat(b, " => ").concat(equal), function () {
78
+ var as = (0, _index.latexToText)(a);
79
+ var bs = (0, _index.latexToText)(b);
80
+ expect((0, _index.ave)(as, bs)).toEqual(equal);
81
+ });
82
+ };
83
+ };
84
+
85
+ var assertThroughMathJs = _amjs(false);
86
+
87
+ assertThroughMathJs.only = _amjs(true);
88
+
89
+ var _als = function _als(only) {
90
+ return function (input, expected) {
91
+ var fn = only ? it.only : it;
92
+ fn("".concat(input, " => ").concat(expected), function () {
93
+ expect((0, _index.latexToText)(input)).toEqual(expected);
94
+ });
95
+ };
96
+ };
97
+
98
+ var assertLatexFromString = _als(false);
99
+
100
+ assertLatexFromString.only = _als(true);
101
+ describe('ch6456', function () {
102
+ assertEqual('percent')('-12.5%', '-12.5%');
103
+ assertEqual('percent')('-12.5\\%', '-12.5%');
104
+ assertNotEqual('percent')('-11.5%', '-12.5%');
105
+ });
106
+ describe('ch6456 - latex', function () {
107
+ assertLatexEqual('percent')('\\frac{1}{2} -12.5%', '\\frac{2}{4} -12.5%');
108
+ assertLatexEqual('percent')('\\frac{1}{2} -12.5%', '\\frac{2}{4} -12.5\\%');
109
+ assertLatexNotEqual('percent')('\\frac{4}{2} -12.5%', '\\frac{2}{4} -12.5\\%');
110
+ assertLatexNotEqual('percent')('\\frac{2}{2} -12.5%', '\\frac{2}{4} -12.5\\%');
111
+ });
112
+ describe('PIE-188-math-expressions', function () {
113
+ // it('parses expressions correctly', async () => {
114
+ // geometry
115
+ // MULTIPLY WITH VARIABLE BASED
116
+ assertThroughMathJs('\\parallel x', '\\parallel x', true);
117
+ assertThroughMathJs('\\parallel x', '\\parallel x', true);
118
+ assertThroughMathJs('\\parallel x', '\\parallel 0', false);
119
+ assertThroughMathJs('\\overrightarrow{x + 4}', '\\overrightarrow {4 + x}', true);
120
+ assertThroughMathJs('\\overrightarrow{4x^2 + 4}', '\\overrightarrow {4x^2 + 8 - 4}', true);
121
+ assertThroughMathJs('\\overrightarrow{21*2*x}', '\\overrightarrow {42x}', true);
122
+ assertLatexFromString('\\nparallel x', 'nparallel x');
123
+ assertLatexFromString('\\overrightarrow{x}', 'overrightarrow x');
124
+ assertLatexFromString('\\overleftrightarrow{x}', 'overleftrightarrow x');
125
+ assertLatexFromString('\\perp x', 'perp x');
126
+ assertLatexFromString('\\angle x', 'angle x');
127
+ assertLatexFromString('\\overarc x', 'overarc x');
128
+ assertLatexFromString('\\measuredangle x', 'measuredangle x');
129
+ assertLatexFromString('\\triangle x', 'triangle x');
130
+ assertLatexFromString('\\parallelogram x', 'parallelogram x');
131
+ assertLatexFromString('\\odot x', 'odot x');
132
+ assertLatexFromString('\\degree x', 'degree x');
133
+ assertLatexFromString('\\sim x', 'sim x');
134
+ assertLatexFromString('\\cong x', 'cong x');
135
+ assertLatexFromString('\\ncong x', 'ncong x');
136
+ assertLatexFromString('\\napprox x', 'napprox x'); // UNRECOGNIZED BY LEARNOSITY
137
+
138
+ assertLatexFromString('\\nim x', 'nim x'); // UNRECOGNIZED BY LEARNOSITY
139
+
140
+ assertLatexFromString('\\sim x', 'sim x');
141
+ expect(function () {
142
+ return (0, _index.latexToText)('\\sim 4', {
143
+ unknownCommandBehavior: 'error'
144
+ });
145
+ }).toThrow(); // comparisons
146
+
147
+ assertLatexFromString('1 \\lt 2', '1 < 2');
148
+ assertLatexFromString('1 \\gt 2', '1 > 2');
149
+ assertLatexFromString('1 \\le 2', '1 ≤ 2');
150
+ assertLatexFromString('1 \\ge 2', '1 ≥ 2'); // exponents
151
+
152
+ assertLatexFromString('2^2', '2^2');
153
+ assertLatexFromString('2^{3}', '2^3'); // roots
154
+
155
+ assertLatexFromString('\\sqrt{2}', 'sqrt(2)');
156
+ assertLatexFromString('\\sqrt[{3}]{3}', '3^(1/3)'); // fractions
157
+
158
+ assertLatexFromString('\\frac{3}{3}', '3/3');
159
+ assertLatexFromString('\\frac{x}{3}', 'x/3');
160
+ assertLatexFromString('x\\frac{5}{3}', 'x (5/3)'); // ACTUAL OPERATOR BASED
161
+
162
+ assertLatexFromString('\\overline{x}', 'overline x');
163
+ assertLatexFromString('\\pm', 'pm');
164
+ assertLatexFromString('\\approx x', 'approx x'); // logarithms
165
+
166
+ assertLatexFromString("4'", "4'");
167
+ assertLatexFromString('\\log 4', 'log(4)');
168
+ assertLatexFromString('\\log(4x)', 'log(4 x)');
169
+ assertLatexFromString('\\ln 4', 'ln(4)');
170
+ assertLatexFromString('|4|', '|4|');
171
+ assertLatexFromString('(4)', '4');
172
+ assertLatexFromString('(4 + x) * 5', '(4 + x) * 5');
173
+ assertLatexFromString('[4]', '4');
174
+ assertLatexFromString('\\mu', 'μ');
175
+ assertLatexFromString('\\Sigma', 'Σ');
176
+ assertLatexFromString('x^{15}', 'x^15');
177
+ assertLatexFromString('x_{15}', 'x_15'); // Trigo
178
+
179
+ assertLatexFromString('\\sin(x)', 'sin(x)');
180
+ assertLatexFromString('\\cos(x)', 'cos(x)');
181
+ assertLatexFromString('\\tan(x)', 'tan(x)');
182
+ assertLatexFromString('\\sec(x)', 'sec(x)');
183
+ assertLatexFromString('\\csc(x)', 'csc(x)');
184
+ assertLatexFromString('\\cot(x)', 'cot(x)');
185
+ }); // assertNotEqual('custom latex')('1530', `\\odot`);
186
+
187
+ assertNotEqual('evaluates simple expressions correctly')('0', 'x', '3x', '4x');
188
+ assertEqual('evaluates simple expressions correctly')('x', 'x', '2x', '2x');
189
+ describe('bad frac throws error', function () {
190
+ it('throws an error', function () {
191
+ expect(function () {
192
+ return (0, _index["default"])('\\frac12', '\\frac34', {
193
+ isLatex: true
194
+ });
195
+ }).toThrow('Expecting {');
196
+ });
197
+ });
198
+ describe('7119', function () {
199
+ it.each(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n v | isEqual\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n "])), '4.5', true, '3.2 + 1.3', true, '(4 - \\frac{4}{5}) + 1.3', true, '\\frac{9}{2}', true, '4 \\frac{1}{2}', true, '\\frac{10}{2} - 0.5', true, '4.55', false)('$a == $isEqual', function (_ref3) {
200
+ var v = _ref3.v,
201
+ isEqual = _ref3.isEqual;
202
+ var result = (0, _index["default"])('4 \\frac{1}{2}', v, {
203
+ isLatex: true
204
+ });
205
+ expect(result).toEqual(isEqual);
206
+ });
207
+ it('?', function () {
208
+ expect((0, _index.latexToText)('4\\frac{1}{2}')).toEqual('4 + 1/2');
209
+ });
210
+ });
211
+ assertEqual('evaluates simple expressions correctly 2')('100', '100', '50 + 50', '25 * 4', '200 / 2', '20 * 5', '2.5 * 40', '10 * 10');
212
+ assertNotEqual('evaluates simple expressions correctly 2')('100', '0', '0', '50 * 2', '44 + 57', '100', '44 + 57', '50 * 3');
213
+ assertEqual('evaluates simple expressions correctly 3')('50 + 50', '100', '100 / 2 + 50', '100', '2 + 2', '4', '1/2 + .5', '1');
214
+ assertNotEqual('evaluates simple expressions correctly 3')('50 + 51', '100', '25 * 2 + 51', '100', '1/2 + .5', '1.9', '1/2 + .5', '1.1');
215
+ assertEqual('evaluates simple expressions correctly 4')('50 + 50', '100', '100 / 2 + 50', '100', '2 + 2', '4', '1/2 + .5', '1', '13/2', '13/2', '26/4', '13/2', '6 + 1/2', '13/2', '6.5', '13/2');
216
+ assertNotEqual('evaluates simple expressions correctly 4')('50 + 51', '100', '25 * 2 + 51', '100', '1/2 + .5', '1.9', '1/2 + .5', '1.1', '14/2', '13/2', '6.6', '13/2');
217
+ it.each(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n a | b\n ", " | ", "\n "])), '((x^2 + x) / x) - 1', 'x')('$a == $b', function (_ref4) {
218
+ var a = _ref4.a,
219
+ b = _ref4.b;
220
+ expect((0, _index["default"])(a, b)).toBe(true);
221
+ });
222
+ assertEqual('evaluates simple variable expressions correctly')('x', 'x', 'x + 0', 'x', '(x-2) + 2', 'x', '((x^2 + x) / x) - 1', 'x', '2x/2', 'x', '(x + 2)^2', '(x + 2)^2', 'x^2 + 4x + 4', '(x + 2)^2', 'x^2 + 4(x+1)', '(x + 2)^2', 'x^2 + 8 ((x+1) / 2)', '(x + 2)^2');
223
+ assertNotEqual('evaluates simple variable expressions correctly')('y', 'x', 'x + 1', 'x', 'x^3 + 4x + 4', '(x + 2)^2', 'x^2 + 4(x+2)', '(x + 2)^2');
224
+ assertEqual('evaluates simple variable expressions correctly 2')('(2 + x)^2', '(x + 2)^2', 'x^2 + 4x + 4', '(x + 2)^2', 'x^2 + 4(x+1)', '(x + 2)^2', 'x^2 + 8 ((x+1) / 2)', '(x + 2)^2');
225
+ assertEqual('evaluates expressions correctly with variable exponents')('(2 + x)^2x', '(x + 2)^2x', 'y^(2 x)', 'y^(x+x)');
226
+ assertEqual('evaluates function expressions correctly with variable parameters')('sqrt(4x)', 'sqrt(2x+2x)', 'sqrt(x^2)', 'sqrt(((x+1)^2) - ((x+1)^2) + x^2)');
227
+ assertNotEqual('evaluates simple variable expressions correctly 2')('x^3 + 4x + 4', '(x + 2)^2', 'x^2 + 4(x+2)', '(x + 2)^2');
228
+ it('correctly consumes allowDecimals option', function () {
229
+ expect((0, _index["default"])('123', '123', {
230
+ allowDecimals: true
231
+ })).toEqual(true);
232
+ expect((0, _index["default"])('123', '123.0', {
233
+ allowDecimals: true
234
+ })).toEqual(true);
235
+ expect((0, _index["default"])('123,0', '123.0', {
236
+ allowDecimals: true
237
+ })).toEqual(true);
238
+ expect((0, _index["default"])('123,0', '123.0', {
239
+ allowDecimals: false
240
+ })).toEqual(false);
241
+ expect((0, _index["default"])('123', '123.0', {
242
+ allowDecimals: false
243
+ })).toEqual(false);
244
+ expect((0, _index["default"])('123', '123,0', {
245
+ allowDecimals: false
246
+ })).toEqual(false);
247
+ });
248
+ it('correctly consumes allowDecimals option for complex examples too', function () {
249
+ expect((0, _index["default"])('1500000', '1500000', {
250
+ allowDecimals: true
251
+ })).toEqual(true);
252
+ expect((0, _index["default"])('1,500,000', '1,500,000', {
253
+ allowDecimals: true
254
+ })).toEqual(true);
255
+ expect((0, _index["default"])('1500000', '1,500,000', {
256
+ allowDecimals: true
257
+ })).toEqual(true);
258
+ expect((0, _index["default"])('1500000', '1,500,000.00', {
259
+ allowDecimals: true
260
+ })).toEqual(true);
261
+ expect((0, _index["default"])('1500000', '1,500,000.0', {
262
+ allowDecimals: true
263
+ })).toEqual(true);
264
+ expect((0, _index["default"])('1,500,000.0', '1,500,000.00', {
265
+ allowDecimals: true
266
+ })).toEqual(true);
267
+ expect((0, _index["default"])('1500000', '1,500000', {
268
+ allowDecimals: true
269
+ })).toEqual(false);
270
+ expect((0, _index["default"])('1500000', '1500,000', {
271
+ allowDecimals: true
272
+ })).toEqual(false);
273
+ expect((0, _index["default"])('1500000', '1,500,000.01', {
274
+ allowDecimals: true
275
+ })).toEqual(false);
276
+ expect((0, _index["default"])('1500000', '1,500,00,0', {
277
+ allowDecimals: true
278
+ })).toEqual(false);
279
+ expect((0, _index["default"])('1500000', '1500,000', {
280
+ allowDecimals: true
281
+ })).toEqual(false);
282
+ expect((0, _index["default"])('1500000', ',1500,000', {
283
+ allowDecimals: true
284
+ })).toEqual(false);
285
+ });
286
+ it('evaluates simple trigo expressions correctly', function () {
287
+ expect((0, _index["default"])('sin(x)', 'sin(x)')).toEqual(true);
288
+ expect((0, _index["default"])('tan(x)', 'tan(x)')).toEqual(true);
289
+ });
290
+ it('correctly creates math expressions 1', function () {
291
+ expect((0, _index["default"])('f^{-1}\\left(x\\right)=\\sqrt{x-1}+3', 'f^{-1}\\left(x\\right)=\\sqrt{x-1}+3', {
292
+ allowDecimals: true,
293
+ isLatex: true
294
+ })).toEqual(true);
295
+ });
296
+ it('correctly creates math expressions 2', function () {
297
+ expect((0, _index["default"])('72\\div12=6\\text{eggs}', '72\\div12=6\\text{eggs}', {
298
+ allowDecimals: true,
299
+ isLatex: true
300
+ })).toEqual(true);
301
+ });
302
+ describe('PD-3', function () {
303
+ it.each(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n a | b\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", "\n ", "\n "])), '\\left(x\\right)^{ \\frac{1}{\\left(y + 3\\right)}}', '\\sqrt[\\left(y + 3\\right)]{x}', '\\left(x\\right)^{\\frac{1}{3}}', '\\sqrt[3]{x}', '\\left(x\\right)^{\\frac{1}{n}}', '\\sqrt[n]{x}', '\\left(x\\right)^{\\frac{1}{2}}', '\\sqrt{x}', '\\left(x-1\\right)^{\\frac{1}{2}}+3', '\\sqrt{x-1}+3', 'f^{-1}\\left(x\\right)=\\left(x-1\\right)^{\\frac{1}{2}}+3', 'f^{-1}\\left(x\\right)=\\sqrt{x-1}+3')('$a == $b', function (_ref5) {
304
+ var a = _ref5.a,
305
+ b = _ref5.b;
306
+ var opts = {
307
+ allowDecimals: true,
308
+ isLatex: true
309
+ };
310
+ expect((0, _index["default"])(a, b, opts)).toBeTruthy();
311
+ });
312
+ });
313
+ });
314
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsImFzc2VydExhdGV4VG9UZXh0IiwiaW5wdXQiLCJleHBlY3RlZCIsIml0IiwicmVzdWx0IiwiZXhwZWN0IiwidG9FcXVhbCIsImFzc2VydCIsImlzRXF1YWwiLCJvcHRzIiwibGFiZWwiLCJhcmdzIiwiQXJyYXkiLCJmcm9tIiwiYXJndW1lbnRzIiwicGFpcnMiLCJfIiwiY2h1bmsiLCJmb3JFYWNoIiwiYSIsImIiLCJ0b0JlIiwiYXNzZXJ0RXF1YWwiLCJhc3NlcnROb3RFcXVhbCIsImFzc2VydExhdGV4RXF1YWwiLCJpc0xhdGV4IiwiYXNzZXJ0TGF0ZXhOb3RFcXVhbCIsIl9hbWpzIiwib25seSIsImVxdWFsIiwiZm4iLCJhcyIsImJzIiwiYXNzZXJ0VGhyb3VnaE1hdGhKcyIsIl9hbHMiLCJhc3NlcnRMYXRleEZyb21TdHJpbmciLCJ1bmtub3duQ29tbWFuZEJlaGF2aW9yIiwidG9UaHJvdyIsImVhY2giLCJ2IiwiYWxsb3dEZWNpbWFscyIsInRvQmVUcnV0aHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7Ozs7Ozs7QUFFQUEsUUFBUSxDQUFDLGdCQUFELEVBQW1CLFlBQU07QUFDL0JBLEVBQUFBLFFBQVEsQ0FBQyxhQUFELEVBQWdCLFlBQU07QUFDNUIsUUFBTUMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFvQixDQUFDQyxLQUFELEVBQVFDLFFBQVIsRUFBcUI7QUFDN0NDLE1BQUFBLEVBQUUsV0FBSUYsS0FBSixpQkFBZ0JDLFFBQWhCLEdBQTRCLFlBQU07QUFDbEMsWUFBTUUsTUFBTSxHQUFHLHdCQUFZSCxLQUFaLENBQWY7QUFDQUksUUFBQUEsTUFBTSxDQUFDRCxNQUFELENBQU4sQ0FBZUUsT0FBZixDQUF1QkosUUFBdkI7QUFDRCxPQUhDLENBQUY7QUFJRCxLQUxEOztBQU1BRixJQUFBQSxpQkFBaUIsQ0FBQywwQkFBRCxF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QjtBQUF1QmYsUUFBQUEsT0FBTyxFQUFFO0FBQWhDLE9BQWI7QUFDQXBCLE1BQUFBLE1BQU0sQ0FBQyx1QkFBZWMsQ0FBZixFQUFrQkMsQ0FBbEIsRUFBcUJYLElBQXJCLENBQUQsQ0FBTixDQUFtQ2dDLFVBQW5DO0FBQ0QsS0FaRDtBQWFELEdBZE8sQ0FBUjtBQWVELENBelpPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJlVmFsdWVzRXF1YWwsIHsgYXZlLCBsYXRleFRvVGV4dCB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmRlc2NyaWJlKCdtYXRoLWV2YWx1YXRvcicsICgpID0+IHtcbiAgZGVzY3JpYmUoJ2xhdGV4VG9UZXh0JywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydExhdGV4VG9UZXh0ID0gKGlucHV0LCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQoYCR7aW5wdXR9ID0+ICR7ZXhwZWN0ZWR9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBsYXRleFRvVGV4dChpbnB1dCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3NlcnRMYXRleFRvVGV4dCgnXFxcXGZyYWN7IFxcXFxmcmFjezF9ezN9fXszfScsICcoMS8zKS8zJyk7XG4gICAgYXNzZXJ0TGF0ZXhUb1RleHQoJ1xcXFxuZXEnLCAnMCAhPSAwJyk7XG4gICAgYXNzZXJ0TGF0ZXhUb1RleHQoJzEwIFxcXFxuZXEgMjAnLCAnMTAgIT0gMjAnKTtcbiAgICBhc3NlcnRMYXRleFRvVGV4dCgnMTAgXFxcXG5lcScsICcxMCAhPSAwJyk7XG4gICAgYXNzZXJ0TGF0ZXhUb1RleHQoJ1xcXFxuZXEgMTAnLCAnMCAhPSAxMCcpO1xuICAgIGFzc2VydExhdGV4VG9UZXh0KCc0MCUnLCAncGVyY2VudCg0MCknKTtcbiAgICBhc3NlcnRMYXRleFRvVGV4dCgnJScsICdwZXJjZW50KDApJyk7XG4gICAgYXNzZXJ0TGF0ZXhUb1RleHQoJzEyJScsICdwZXJjZW50KDEyKScpO1xuICAgIGFzc2VydExhdGV4VG9UZXh0KCcxMlxcXFwlJywgJ3BlcmNlbnQoMTIpJyk7XG4gICAgYXNzZXJ0TGF0ZXhUb1RleHQoJy0xMi41JScsICctIHBlcmNlbnQoMTIuNSknKTtcbiAgICBhc3NlcnRMYXRleFRvVGV4dCgnLTEyLjVcXFxcJScsICctIHBlcmNlbnQoMTIuNSknKTtcbiAgfSk7XG5cbiAgY29uc3QgYXNzZXJ0ID0gKGlzRXF1YWwsIG9wdHMpID0+IChsYWJlbCkgPT5cbiAgICBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5mcm9tKGFyZ3VtZW50cyk7XG4gICAgICBjb25zdCBwYWlycyA9IF8uY2h1bmsoYXJncywgMik7XG5cbiAgICAgIGRlc2NyaWJlKGxhYmVsLCAoKSA9PiB7XG4gICAgICAgIHBhaXJzLmZvckVhY2goKFthLCBiXSkgPT4ge1xuICAgICAgICAgIGl0KGAke2F9ID09PSAke2J9ID8gJHtpc0VxdWFsfWAsICgpID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbChhLCBiLCBvcHRzKSkudG9CZShpc0VxdWFsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gIGNvbnN0IGFzc2VydEVxdWFsID0gYXNzZXJ0KHRydWUpO1xuICBjb25zdCBhc3NlcnROb3RFcXVhbCA9IGFzc2VydChmYWxzZSk7XG5cbiAgY29uc3QgYXNzZXJ0TGF0ZXhFcXVhbCA9IGFzc2VydCh0cnVlLCB7IGlzTGF0ZXg6IHRydWUgfSk7XG4gIGNvbnN0IGFzc2VydExhdGV4Tm90RXF1YWwgPSBhc3NlcnQoZmFsc2UsIHsgaXNMYXRleDogdHJ1ZSB9KTtcblxuICBjb25zdCBfYW1qcyA9IChvbmx5KSA9PiAoYSwgYiwgZXF1YWwpID0+IHtcbiAgICBjb25zdCBmbiA9IG9ubHkgPyBpdC5vbmx5IDogaXQ7XG4gICAgZm4oYCR7YX0gPT09ICR7Yn0gPT4gJHtlcXVhbH1gLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcyA9IGxhdGV4VG9UZXh0KGEpO1xuICAgICAgY29uc3QgYnMgPSBsYXRleFRvVGV4dChiKTtcbiAgICAgIGV4cGVjdChhdmUoYXMsIGJzKSkudG9FcXVhbChlcXVhbCk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgYXNzZXJ0VGhyb3VnaE1hdGhKcyA9IF9hbWpzKGZhbHNlKTtcbiAgYXNzZXJ0VGhyb3VnaE1hdGhKcy5vbmx5ID0gX2FtanModHJ1ZSk7XG5cbiAgY29uc3QgX2FscyA9IChvbmx5KSA9PiAoaW5wdXQsIGV4cGVjdGVkKSA9PiB7XG4gICAgY29uc3QgZm4gPSBvbmx5ID8gaXQub25seSA6IGl0O1xuICAgIGZuKGAke2lucHV0fSA9PiAke2V4cGVjdGVkfWAsICgpID0+IHtcbiAgICAgIGV4cGVjdChsYXRleFRvVGV4dChpbnB1dCkpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGFzc2VydExhdGV4RnJvbVN0cmluZyA9IF9hbHMoZmFsc2UpO1xuICBhc3NlcnRMYXRleEZyb21TdHJpbmcub25seSA9IF9hbHModHJ1ZSk7XG5cbiAgZGVzY3JpYmUoJ2NoNjQ1NicsICgpID0+IHtcbiAgICBhc3NlcnRFcXVhbCgncGVyY2VudCcpKCctMTIuNSUnLCAnLTEyLjUlJyk7XG4gICAgYXNzZXJ0RXF1YWwoJ3BlcmNlbnQnKSgnLTEyLjVcXFxcJScsICctMTIuNSUnKTtcbiAgICBhc3NlcnROb3RFcXVhbCgncGVyY2VudCcpKCctMTEuNSUnLCAnLTEyLjUlJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjaDY0NTYgLSBsYXRleCcsICgpID0+IHtcbiAgICBhc3NlcnRMYXRleEVxdWFsKCdwZXJjZW50JykoJ1xcXFxmcmFjezF9ezJ9IC0xMi41JScsICdcXFxcZnJhY3syfXs0fSAtMTIuNSUnKTtcbiAgICBhc3NlcnRMYXRleEVxdWFsKCdwZXJjZW50JykoJ1xcXFxmcmFjezF9ezJ9IC0xMi41JScsICdcXFxcZnJhY3syfXs0fSAtMTIuNVxcXFwlJyk7XG4gICAgYXNzZXJ0TGF0ZXhOb3RFcXVhbCgncGVyY2VudCcpKCdcXFxcZnJhY3s0fXsyfSAtMTIuNSUnLCAnXFxcXGZyYWN7Mn17NH0gLTEyLjVcXFxcJScpO1xuICAgIGFzc2VydExhdGV4Tm90RXF1YWwoJ3BlcmNlbnQnKSgnXFxcXGZyYWN7Mn17Mn0gLTEyLjUlJywgJ1xcXFxmcmFjezJ9ezR9IC0xMi41XFxcXCUnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BJRS0xODgtbWF0aC1leHByZXNzaW9ucycsICgpID0+IHtcbiAgICAvLyBpdCgncGFyc2VzIGV4cHJlc3Npb25zIGNvcnJlY3RseScsIGFzeW5jICgpID0+IHtcblxuICAgIC8vIGdlb21ldHJ5XG5cbiAgICAvLyBNVUxUSVBMWSBXSVRIIFZBUklBQkxFIEJBU0VEXG4gICAgYXNzZXJ0VGhyb3VnaE1hdGhKcygnXFxcXHBhcmFsbGVsIHgnLCAnXFxcXHBhcmFsbGVsIHgnLCB0cnVlKTtcbiAgICBhc3NlcnRUaHJvdWdoTWF0aEpzKCdcXFxccGFyYWxsZWwgeCcsICdcXFxccGFyYWxsZWwgICB4JywgdHJ1ZSk7XG4gICAgYXNzZXJ0VGhyb3VnaE1hdGhKcygnXFxcXHBhcmFsbGVsIHgnLCAnXFxcXHBhcmFsbGVsICAgMCcsIGZhbHNlKTtcbiAgICBhc3NlcnRUaHJvdWdoTWF0aEpzKCdcXFxcb3ZlcnJpZ2h0YXJyb3d7eCArIDR9JywgJ1xcXFxvdmVycmlnaHRhcnJvdyB7NCArIHh9JywgdHJ1ZSk7XG4gICAgYXNzZXJ0VGhyb3VnaE1hdGhKcygnXFxcXG92ZXJyaWdodGFycm93ezR4XjIgKyA0fScsICdcXFxcb3ZlcnJpZ2h0YXJyb3cgezR4XjIgKyA4IC0gNH0nLCB0cnVlKTtcbiAgICBhc3NlcnRUaHJvdWdoTWF0aEpzKCdcXFxcb3ZlcnJpZ2h0YXJyb3d7MjEqMip4fScsICdcXFxcb3ZlcnJpZ2h0YXJyb3cgezQyeH0nLCB0cnVlKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxucGFyYWxsZWwgeCcsICducGFyYWxsZWwgeCcpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXG92ZXJyaWdodGFycm93e3h9JywgJ292ZXJyaWdodGFycm93IHgnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxvdmVybGVmdHJpZ2h0YXJyb3d7eH0nLCAnb3ZlcmxlZnRyaWdodGFycm93IHgnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxwZXJwIHgnLCAncGVycCB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcYW5nbGUgeCcsICdhbmdsZSB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcb3ZlcmFyYyB4JywgJ292ZXJhcmMgeCcpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXG1lYXN1cmVkYW5nbGUgeCcsICdtZWFzdXJlZGFuZ2xlIHgnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFx0cmlhbmdsZSB4JywgJ3RyaWFuZ2xlIHgnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxwYXJhbGxlbG9ncmFtIHgnLCAncGFyYWxsZWxvZ3JhbSB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcb2RvdCB4JywgJ29kb3QgeCcpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXGRlZ3JlZSB4JywgJ2RlZ3JlZSB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcc2ltIHgnLCAnc2ltIHgnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxjb25nIHgnLCAnY29uZyB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcbmNvbmcgeCcsICduY29uZyB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcbmFwcHJveCB4JywgJ25hcHByb3ggeCcpOyAvLyBVTlJFQ09HTklaRUQgQlkgTEVBUk5PU0lUWVxuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXG5pbSB4JywgJ25pbSB4Jyk7IC8vIFVOUkVDT0dOSVpFRCBCWSBMRUFSTk9TSVRZXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcc2ltIHgnLCAnc2ltIHgnKTtcbiAgICBleHBlY3QoKCkgPT4gbGF0ZXhUb1RleHQoJ1xcXFxzaW0gNCcsIHsgdW5rbm93bkNvbW1hbmRCZWhhdmlvcjogJ2Vycm9yJyB9KSkudG9UaHJvdygpO1xuXG4gICAgLy8gY29tcGFyaXNvbnNcblxuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnMSBcXFxcbHQgMicsICcxIDwgMicpO1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCcxIFxcXFxndCAyJywgJzEgPiAyJyk7XG5cbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJzEgXFxcXGxlIDInLCAnMSDiiaQgMicpO1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCcxIFxcXFxnZSAyJywgJzEg4omlIDInKTtcblxuICAgIC8vIGV4cG9uZW50c1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCcyXjInLCAnMl4yJyk7XG5cbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJzJeezN9JywgJzJeMycpO1xuXG4gICAgLy8gcm9vdHNcblxuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXHNxcnR7Mn0nLCAnc3FydCgyKScpO1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcc3FydFt7M31dezN9JywgJzNeKDEvMyknKTtcblxuICAgIC8vIGZyYWN0aW9uc1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcZnJhY3szfXszfScsICczLzMnKTtcblxuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXGZyYWN7eH17M30nLCAneC8zJyk7XG5cbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ3hcXFxcZnJhY3s1fXszfScsICd4ICg1LzMpJyk7XG5cbiAgICAvLyBBQ1RVQUwgT1BFUkFUT1IgQkFTRURcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxvdmVybGluZXt4fScsICdvdmVybGluZSB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxccG0nLCAncG0nKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxhcHByb3ggeCcsICdhcHByb3ggeCcpO1xuXG4gICAgLy8gbG9nYXJpdGhtc1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKFwiNCdcIiwgXCI0J1wiKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxsb2cgNCcsICdsb2coNCknKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxsb2coNHgpJywgJ2xvZyg0IHgpJyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcbG4gNCcsICdsbig0KScpO1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCd8NHwnLCAnfDR8Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCcoNCknLCAnNCcpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnKDQgKyB4KSAqIDUnLCAnKDQgKyB4KSAqIDUnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1s0XScsICc0Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcbXUnLCAnzrwnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxTaWdtYScsICfOoycpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygneF57MTV9JywgJ3heMTUnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ3hfezE1fScsICd4XzE1Jyk7XG5cbiAgICAvLyBUcmlnb1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcc2luKHgpJywgJ3Npbih4KScpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXGNvcyh4KScsICdjb3MoeCknKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFx0YW4oeCknLCAndGFuKHgpJyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcc2VjKHgpJywgJ3NlYyh4KScpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXGNzYyh4KScsICdjc2MoeCknKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxjb3QoeCknLCAnY290KHgpJyk7XG4gIH0pO1xuXG4gIC8vIGFzc2VydE5vdEVxdWFsKCdjdXN0b20gbGF0ZXgnKSgnMTUzMCcsIGBcXFxcb2RvdGApO1xuICBhc3NlcnROb3RFcXVhbCgnZXZhbHVhdGVzIHNpbXBsZSBleHByZXNzaW9ucyBjb3JyZWN0bHknKSgnMCcsICd4JywgJzN4JywgJzR4Jyk7XG5cbiAgYXNzZXJ0RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5JykoJ3gnLCAneCcsICcyeCcsICcyeCcpO1xuXG4gIGRlc2NyaWJlKCdiYWQgZnJhYyB0aHJvd3MgZXJyb3InLCAoKSA9PiB7XG4gICAgaXQoJ3Rocm93cyBhbiBlcnJvcicsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiBhcmVWYWx1ZXNFcXVhbCgnXFxcXGZyYWMxMicsICdcXFxcZnJhYzM0JywgeyBpc0xhdGV4OiB0cnVlIH0pKS50b1Rocm93KCdFeHBlY3RpbmcgeycpO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJzcxMTknLCAoKSA9PiB7XG4gICAgaXQuZWFjaGBcbiAgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXNFcXVhbFxuICAgICAgJHsnNC41J30gICAgICAgICAgICAgICAgICAgICAgfCAke3RydWV9XG4gICAgICAkeyczLjIgKyAxLjMnfSAgICAgICAgICAgICAgICB8ICR7dHJ1ZX1cbiAgICAgICR7Jyg0IC0gXFxcXGZyYWN7NH17NX0pICsgMS4zJ30gfCAke3RydWV9XG4gICAgICAkeydcXFxcZnJhY3s5fXsyfSd9ICAgICAgICAgICAgIHwgJHt0cnVlfVxuICAgICAgJHsnNCBcXFxcZnJhY3sxfXsyfSd9ICAgICAgICAgICB8ICR7dHJ1ZX1cbiAgICAgICR7J1xcXFxmcmFjezEwfXsyfSAtIDAuNSd9ICAgICAgfCAke3RydWV9XG4gICAgICAkeyc0LjU1J30gICAgICAgICAgICAgICAgICAgICB8ICR7ZmFsc2V9XG4gICAgYCgnJGEgPT0gJGlzRXF1YWwnLCAoeyB2LCBpc0VxdWFsIH0pID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFyZVZhbHVlc0VxdWFsKCc0IFxcXFxmcmFjezF9ezJ9JywgdiwgeyBpc0xhdGV4OiB0cnVlIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChpc0VxdWFsKTtcbiAgICB9KTtcblxuICAgIGl0KCc/JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGxhdGV4VG9UZXh0KCc0XFxcXGZyYWN7MX17Mn0nKSkudG9FcXVhbCgnNCArIDEvMicpO1xuICAgIH0pO1xuICB9KTtcblxuICBhc3NlcnRFcXVhbCgnZXZhbHVhdGVzIHNpbXBsZSBleHByZXNzaW9ucyBjb3JyZWN0bHkgMicpKFxuICAgICcxMDAnLFxuICAgICcxMDAnLFxuICAgICc1MCArIDUwJyxcbiAgICAnMjUgKiA0JyxcbiAgICAnMjAwIC8gMicsXG4gICAgJzIwICogNScsXG4gICAgJzIuNSAqIDQwJyxcbiAgICAnMTAgKiAxMCcsXG4gICk7XG5cbiAgYXNzZXJ0Tm90RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5IDInKShcbiAgICAnMTAwJyxcbiAgICAnMCcsXG4gICAgJzAnLFxuICAgICc1MCAqIDInLFxuICAgICc0NCArIDU3JyxcbiAgICAnMTAwJyxcbiAgICAnNDQgKyA1NycsXG4gICAgJzUwICogMycsXG4gICk7XG5cbiAgYXNzZXJ0RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5IDMnKShcbiAgICAnNTAgKyA1MCcsXG4gICAgJzEwMCcsXG4gICAgJzEwMCAvIDIgKyA1MCcsXG4gICAgJzEwMCcsXG4gICAgJzIgKyAyJyxcbiAgICAnNCcsXG4gICAgJzEvMiArIC41JyxcbiAgICAnMScsXG4gICk7XG5cbiAgYXNzZXJ0Tm90RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5IDMnKShcbiAgICAnNTAgKyA1MScsXG4gICAgJzEwMCcsXG4gICAgJzI1ICogMiArIDUxJyxcbiAgICAnMTAwJyxcbiAgICAnMS8yICsgLjUnLFxuICAgICcxLjknLFxuICAgICcxLzIgKyAuNScsXG4gICAgJzEuMScsXG4gICk7XG5cbiAgYXNzZXJ0RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5IDQnKShcbiAgICAnNTAgKyA1MCcsXG4gICAgJzEwMCcsXG4gICAgJzEwMCAvIDIgKyA1MCcsXG4gICAgJzEwMCcsXG4gICAgJzIgKyAyJyxcbiAgICAnNCcsXG4gICAgJzEvMiArIC41JyxcbiAgICAnMScsXG4gICAgJzEzLzInLFxuICAgICcxMy8yJyxcbiAgICAnMjYvNCcsXG4gICAgJzEzLzInLFxuICAgICc2ICsgMS8yJyxcbiAgICAnMTMvMicsXG4gICAgJzYuNScsXG4gICAgJzEzLzInLFxuICApO1xuXG4gIGFzc2VydE5vdEVxdWFsKCdldmFsdWF0ZXMgc2ltcGxlIGV4cHJlc3Npb25zIGNvcnJlY3RseSA0JykoXG4gICAgJzUwICsgNTEnLFxuICAgICcxMDAnLFxuICAgICcyNSAqIDIgKyA1MScsXG4gICAgJzEwMCcsXG4gICAgJzEvMiArIC41JyxcbiAgICAnMS45JyxcbiAgICAnMS8yICsgLjUnLFxuICAgICcxLjEnLFxuICAgICcxNC8yJyxcbiAgICAnMTMvMicsXG4gICAgJzYuNicsXG4gICAgJzEzLzInLFxuICApO1xuXG4gIGl0LmVhY2hgXG4gICAgYSAgICAgICAgICAgICAgICAgICAgICAgIHwgYlxuICAgICR7JygoeF4yICsgeCkgLyB4KSAtIDEnfSB8ICR7J3gnfVxuICBgKCckYSA9PSAkYicsICh7IGEsIGIgfSkgPT4ge1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbChhLCBiKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgYXNzZXJ0RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgdmFyaWFibGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5JykoXG4gICAgJ3gnLFxuICAgICd4JyxcbiAgICAneCArIDAnLFxuICAgICd4JyxcbiAgICAnKHgtMikgKyAyJyxcbiAgICAneCcsXG4gICAgJygoeF4yICsgeCkgLyB4KSAtIDEnLFxuICAgICd4JyxcbiAgICAnMngvMicsXG4gICAgJ3gnLFxuICAgICcoeCArIDIpXjInLFxuICAgICcoeCArIDIpXjInLFxuICAgICd4XjIgKyA0eCArIDQnLFxuICAgICcoeCArIDIpXjInLFxuICAgICd4XjIgKyA0KHgrMSknLFxuICAgICcoeCArIDIpXjInLFxuICAgICd4XjIgKyA4ICgoeCsxKSAvIDIpJyxcbiAgICAnKHggKyAyKV4yJyxcbiAgKTtcblxuICBhc3NlcnROb3RFcXVhbCgnZXZhbHVhdGVzIHNpbXBsZSB2YXJpYWJsZSBleHByZXNzaW9ucyBjb3JyZWN0bHknKShcbiAgICAneScsXG4gICAgJ3gnLFxuICAgICd4ICsgMScsXG4gICAgJ3gnLFxuICAgICd4XjMgKyA0eCArIDQnLFxuICAgICcoeCArIDIpXjInLFxuICAgICd4XjIgKyA0KHgrMiknLFxuICAgICcoeCArIDIpXjInLFxuICApO1xuXG4gIGFzc2VydEVxdWFsKCdldmFsdWF0ZXMgc2ltcGxlIHZhcmlhYmxlIGV4cHJlc3Npb25zIGNvcnJlY3RseSAyJykoXG4gICAgJygyICsgeCleMicsXG4gICAgJyh4ICsgMileMicsXG4gICAgJ3heMiArIDR4ICsgNCcsXG4gICAgJyh4ICsgMileMicsXG4gICAgJ3heMiArIDQoeCsxKScsXG4gICAgJyh4ICsgMileMicsXG4gICAgJ3heMiArIDggKCh4KzEpIC8gMiknLFxuICAgICcoeCArIDIpXjInLFxuICApO1xuXG4gIGFzc2VydEVxdWFsKCdldmFsdWF0ZXMgZXhwcmVzc2lvbnMgY29ycmVjdGx5IHdpdGggdmFyaWFibGUgZXhwb25lbnRzJykoXG4gICAgJygyICsgeCleMngnLFxuICAgICcoeCArIDIpXjJ4JyxcbiAgICAneV4oMiB4KScsXG4gICAgJ3leKHgreCknLFxuICApO1xuXG4gIGFzc2VydEVxdWFsKCdldmFsdWF0ZXMgZnVuY3Rpb24gZXhwcmVzc2lvbnMgY29ycmVjdGx5IHdpdGggdmFyaWFibGUgcGFyYW1ldGVycycpKFxuICAgICdzcXJ0KDR4KScsXG4gICAgJ3NxcnQoMngrMngpJyxcbiAgICAnc3FydCh4XjIpJyxcbiAgICAnc3FydCgoKHgrMSleMikgLSAoKHgrMSleMikgKyB4XjIpJyxcbiAgKTtcblxuICBhc3NlcnROb3RFcXVhbCgnZXZhbHVhdGVzIHNpbXBsZSB2YXJpYWJsZSBleHByZXNzaW9ucyBjb3JyZWN0bHkgMicpKFxuICAgICd4XjMgKyA0eCArIDQnLFxuICAgICcoeCArIDIpXjInLFxuICAgICd4XjIgKyA0KHgrMiknLFxuICAgICcoeCArIDIpXjInLFxuICApO1xuXG4gIGl0KCdjb3JyZWN0bHkgY29uc3VtZXMgYWxsb3dEZWNpbWFscyBvcHRpb24nLCAoKSA9PiB7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxMjMnLCAnMTIzJywgeyBhbGxvd0RlY2ltYWxzOiB0cnVlIH0pKS50b0VxdWFsKHRydWUpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTIzJywgJzEyMy4wJywgeyBhbGxvd0RlY2ltYWxzOiB0cnVlIH0pKS50b0VxdWFsKHRydWUpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTIzLDAnLCAnMTIzLjAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxMjMsMCcsICcxMjMuMCcsIHsgYWxsb3dEZWNpbWFsczogZmFsc2UgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTIzJywgJzEyMy4wJywgeyBhbGxvd0RlY2ltYWxzOiBmYWxzZSB9KSkudG9FcXVhbChmYWxzZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxMjMnLCAnMTIzLDAnLCB7IGFsbG93RGVjaW1hbHM6IGZhbHNlIH0pKS50b0VxdWFsKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ2NvcnJlY3RseSBjb25zdW1lcyBhbGxvd0RlY2ltYWxzIG9wdGlvbiBmb3IgY29tcGxleCBleGFtcGxlcyB0b28nLCAoKSA9PiB7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxNTAwMDAwJywgJzE1MDAwMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxLDUwMCwwMDAnLCAnMSw1MDAsMDAwJywgeyBhbGxvd0RlY2ltYWxzOiB0cnVlIH0pKS50b0VxdWFsKHRydWUpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTUwMDAwMCcsICcxLDUwMCwwMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxNTAwMDAwJywgJzEsNTAwLDAwMC4wMCcsIHsgYWxsb3dEZWNpbWFsczogdHJ1ZSB9KSkudG9FcXVhbCh0cnVlKTtcbiAgICBleHBlY3QoYXJlVmFsdWVzRXF1YWwoJzE1MDAwMDAnLCAnMSw1MDAsMDAwLjAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxLDUwMCwwMDAuMCcsICcxLDUwMCwwMDAuMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxNTAwMDAwJywgJzEsNTAwMDAwJywgeyBhbGxvd0RlY2ltYWxzOiB0cnVlIH0pKS50b0VxdWFsKGZhbHNlKTtcbiAgICBleHBlY3QoYXJlVmFsdWVzRXF1YWwoJzE1MDAwMDAnLCAnMTUwMCwwMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTUwMDAwMCcsICcxLDUwMCwwMDAuMDEnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTUwMDAwMCcsICcxLDUwMCwwMCwwJywgeyBhbGxvd0RlY2ltYWxzOiB0cnVlIH0pKS50b0VxdWFsKGZhbHNlKTtcbiAgICBleHBlY3QoYXJlVmFsdWVzRXF1YWwoJzE1MDAwMDAnLCAnMTUwMCwwMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTUwMDAwMCcsICcsMTUwMCwwMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICB9KTtcblxuICBpdCgnZXZhbHVhdGVzIHNpbXBsZSB0cmlnbyBleHByZXNzaW9ucyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCdzaW4oeCknLCAnc2luKHgpJykpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCd0YW4oeCknLCAndGFuKHgpJykpLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdjb3JyZWN0bHkgY3JlYXRlcyBtYXRoIGV4cHJlc3Npb25zIDEnLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgYXJlVmFsdWVzRXF1YWwoJ2Zeey0xfVxcXFxsZWZ0KHhcXFxccmlnaHQpPVxcXFxzcXJ0e3gtMX0rMycsICdmXnstMX1cXFxcbGVmdCh4XFxcXHJpZ2h0KT1cXFxcc3FydHt4LTF9KzMnLCB7XG4gICAgICAgIGFsbG93RGVjaW1hbHM6IHRydWUsXG4gICAgICAgIGlzTGF0ZXg6IHRydWUsXG4gICAgICB9KSxcbiAgICApLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdjb3JyZWN0bHkgY3JlYXRlcyBtYXRoIGV4cHJlc3Npb25zIDInLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgYXJlVmFsdWVzRXF1YWwoJzcyXFxcXGRpdjEyPTZcXFxcdGV4dHtlZ2dzfScsICc3MlxcXFxkaXYxMj02XFxcXHRleHR7ZWdnc30nLCB7XG4gICAgICAgIGFsbG93RGVjaW1hbHM6IHRydWUsXG4gICAgICAgIGlzTGF0ZXg6IHRydWUsXG4gICAgICB9KSxcbiAgICApLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQRC0zJywgKCkgPT4ge1xuICAgIGl0LmVhY2hgXG4gICAgICBhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiXG4gICAgICAkeydcXFxcbGVmdCh4XFxcXHJpZ2h0KV57IFxcXFxmcmFjezF9e1xcXFxsZWZ0KHkgKyAzXFxcXHJpZ2h0KX19J30gICAgICAgIHwgJHsnXFxcXHNxcnRbXFxcXGxlZnQoeSArIDNcXFxccmlnaHQpXXt4fSd9XG4gICAgICAkeydcXFxcbGVmdCh4XFxcXHJpZ2h0KV57XFxcXGZyYWN7MX17M319J30gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkeydcXFxcc3FydFszXXt4fSd9XG4gICAgICAkeydcXFxcbGVmdCh4XFxcXHJpZ2h0KV57XFxcXGZyYWN7MX17bn19J30gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkeydcXFxcc3FydFtuXXt4fSd9XG4gICAgICAkeydcXFxcbGVmdCh4XFxcXHJpZ2h0KV57XFxcXGZyYWN7MX17Mn19J30gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkeydcXFxcc3FydHt4fSd9XG4gICAgICAkeydcXFxcbGVmdCh4LTFcXFxccmlnaHQpXntcXFxcZnJhY3sxfXsyfX0rMyd9ICAgICAgICAgICAgICAgICAgICAgICAgfCAkeydcXFxcc3FydHt4LTF9KzMnfVxuICAgICAgJHsnZl57LTF9XFxcXGxlZnQoeFxcXFxyaWdodCk9XFxcXGxlZnQoeC0xXFxcXHJpZ2h0KV57XFxcXGZyYWN7MX17Mn19KzMnfVxuICAgICAgJHsnZl57LTF9XFxcXGxlZnQoeFxcXFxyaWdodCk9XFxcXHNxcnR7eC0xfSszJ31cbiAgICBgKCckYSA9PSAkYicsICh7IGEsIGIgfSkgPT4ge1xuICAgICAgY29uc3Qgb3B0cyA9IHsgYWxsb3dEZWNpbWFsczogdHJ1ZSwgaXNMYXRleDogdHJ1ZSB9O1xuICAgICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKGEsIGIsIG9wdHMpKS50b0JlVHJ1dGh5KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "2.2.0-beta.3",
6
+ "version": "2.2.0-beta.5",
7
7
  "description": "Math evaluator tool for comparing expressions for equality",
8
8
  "keywords": [
9
9
  "math",
@@ -23,7 +23,7 @@
23
23
  "mathjs": "^7.0.1"
24
24
  },
25
25
  "devDependencies": {
26
- "@pie-lib/test-utils": "beta"
26
+ "@pie-lib/test-utils": "latest"
27
27
  },
28
28
  "scripts": {},
29
29
  "gitHead": "e2aa3ddac60f49bcb8c2562370f496323642f453"