septima-lang 0.0.5 → 0.0.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.
Files changed (72) hide show
  1. package/main.js +1 -0
  2. package/package.json +3 -3
  3. package/dist/src/ast-node.d.ts +0 -98
  4. package/dist/src/ast-node.js +0 -139
  5. package/dist/src/extract-message.d.ts +0 -1
  6. package/dist/src/extract-message.js +0 -10
  7. package/dist/src/fail-me.d.ts +0 -1
  8. package/dist/src/fail-me.js +0 -11
  9. package/dist/src/find-array-method.d.ts +0 -15
  10. package/dist/src/find-array-method.js +0 -104
  11. package/dist/src/find-string-method.d.ts +0 -2
  12. package/dist/src/find-string-method.js +0 -88
  13. package/dist/src/index.d.ts +0 -1
  14. package/dist/src/index.js +0 -18
  15. package/dist/src/location.d.ts +0 -11
  16. package/dist/src/location.js +0 -3
  17. package/dist/src/parser.d.ts +0 -44
  18. package/dist/src/parser.js +0 -458
  19. package/dist/src/result.d.ts +0 -24
  20. package/dist/src/result.js +0 -29
  21. package/dist/src/runtime.d.ts +0 -27
  22. package/dist/src/runtime.js +0 -343
  23. package/dist/src/scanner.d.ts +0 -23
  24. package/dist/src/scanner.js +0 -88
  25. package/dist/src/septima.d.ts +0 -32
  26. package/dist/src/septima.js +0 -91
  27. package/dist/src/should-never-happen.d.ts +0 -1
  28. package/dist/src/should-never-happen.js +0 -9
  29. package/dist/src/source-code.d.ts +0 -19
  30. package/dist/src/source-code.js +0 -90
  31. package/dist/src/stack.d.ts +0 -11
  32. package/dist/src/stack.js +0 -19
  33. package/dist/src/switch-on.d.ts +0 -1
  34. package/dist/src/switch-on.js +0 -9
  35. package/dist/src/symbol-table.d.ts +0 -6
  36. package/dist/src/symbol-table.js +0 -3
  37. package/dist/src/value.d.ts +0 -128
  38. package/dist/src/value.js +0 -634
  39. package/dist/tests/parser.spec.d.ts +0 -1
  40. package/dist/tests/parser.spec.js +0 -31
  41. package/dist/tests/septima-compute-module.spec.d.ts +0 -1
  42. package/dist/tests/septima-compute-module.spec.js +0 -30
  43. package/dist/tests/septima.spec.d.ts +0 -1
  44. package/dist/tests/septima.spec.js +0 -774
  45. package/dist/tests/value.spec.d.ts +0 -1
  46. package/dist/tests/value.spec.js +0 -355
  47. package/dist/tsconfig.tsbuildinfo +0 -1
  48. package/jest-output.json +0 -1
  49. package/src/a.js +0 -66
  50. package/src/ast-node.ts +0 -249
  51. package/src/extract-message.ts +0 -5
  52. package/src/fail-me.ts +0 -7
  53. package/src/find-array-method.ts +0 -115
  54. package/src/find-string-method.ts +0 -84
  55. package/src/index.ts +0 -1
  56. package/src/location.ts +0 -13
  57. package/src/parser.ts +0 -526
  58. package/src/result.ts +0 -45
  59. package/src/runtime.ts +0 -360
  60. package/src/scanner.ts +0 -106
  61. package/src/septima.ts +0 -114
  62. package/src/should-never-happen.ts +0 -4
  63. package/src/source-code.ts +0 -101
  64. package/src/stack.ts +0 -18
  65. package/src/switch-on.ts +0 -4
  66. package/src/symbol-table.ts +0 -7
  67. package/src/value.ts +0 -742
  68. package/tests/parser.spec.ts +0 -30
  69. package/tests/septima-compute-module.spec.ts +0 -33
  70. package/tests/septima.spec.ts +0 -839
  71. package/tests/value.spec.ts +0 -387
  72. package/tsconfig.json +0 -11
package/dist/src/value.js DELETED
@@ -1,634 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Value = void 0;
4
- const ast_node_1 = require("./ast-node");
5
- const fail_me_1 = require("./fail-me");
6
- const find_array_method_1 = require("./find-array-method");
7
- const find_string_method_1 = require("./find-string-method");
8
- const should_never_happen_1 = require("./should-never-happen");
9
- const switch_on_1 = require("./switch-on");
10
- function inspectValue(u) {
11
- return JSON.stringify(u);
12
- }
13
- const badType = (expected, ...moreExpected) => (_u, _actual, v) => {
14
- if (moreExpected.length === 0) {
15
- throw new Error(`value type error: expected ${expected} but found ${inspectValue(v)}`);
16
- }
17
- throw new Error(`value type error: expected either ${moreExpected.join(', ')} or ${expected} but found ${inspectValue(v)}`);
18
- };
19
- /**
20
- * Allows the caller to "see" the native value held by a Value object. The caller supplies the `cases` object
21
- * which maps a function for each possible Value tag. Returns the return value of the function associated with the tag
22
- * of `v`.
23
- *
24
- * In the code we should perfer to use `select()` over this one as it provides better handling of `sink` values.
25
- *
26
- * @param v the Value object to look into
27
- * @param cases an object which maps Tag values to functions
28
- * @returns the return value of the function mapped to the tag of `v`
29
- */
30
- function selectRaw(v, cases) {
31
- const inner = v.inner;
32
- if (inner.tag === 'arr') {
33
- return cases.arr(inner.val, inner.tag, v);
34
- }
35
- if (inner.tag === 'bool') {
36
- return cases.bool(inner.val, inner.tag, v);
37
- }
38
- if (inner.tag === 'foreign') {
39
- return cases.foreign(inner.val, inner.tag, v);
40
- }
41
- if (inner.tag === 'lambda') {
42
- return cases.lambda(inner.val, inner.tag, v);
43
- }
44
- if (inner.tag === 'num') {
45
- return cases.num(inner.val, inner.tag, v);
46
- }
47
- if (inner.tag === 'obj') {
48
- return cases.obj(inner.val, inner.tag, v);
49
- }
50
- if (inner.tag === 'sink') {
51
- // For sink we provide a default behavior of throwing an exception. Yet, the caller is encouraged to explicitly
52
- // provide a `sink` case as there is broader context at the caller's side which makes it possible to provide more
53
- // meaningful error messages.
54
- if (!cases.sink) {
55
- throw new Error(`Cannot evaluate a sink value`);
56
- }
57
- return cases.sink(inner.val, inner.tag, v);
58
- }
59
- if (inner.tag === 'str') {
60
- return cases.str(inner.val, inner.tag, v);
61
- }
62
- (0, should_never_happen_1.shouldNeverHappen)(inner);
63
- }
64
- /**
65
- * Allows the caller to "see" the native value held by a Value object. The caller supplies the `cases` object
66
- * which maps a function for each possible Value tag. Returns the return value of the function associated with the tag
67
- * of `v`.
68
- *
69
- * if `select()` is invoked on sink value (i.e., `Value.sink()`) it returns the sink value itself. This realizes the
70
- * behavior that an expression involving a sink value evaluates to sink.
71
- *
72
- * @param v the Value object to look into
73
- * @param cases an object which maps Tag values to functions
74
- * @returns the return value of the function mapped to the tag of `v`
75
- */
76
- function select(v, cases) {
77
- if (v.isSink()) {
78
- return v;
79
- }
80
- return Value.from(selectRaw(v, cases));
81
- }
82
- class Value {
83
- constructor(inner) {
84
- this.inner = inner;
85
- }
86
- static bool(val) {
87
- return new Value({ val, tag: 'bool' });
88
- }
89
- static num(val) {
90
- return new Value({ val, tag: 'num' });
91
- }
92
- /**
93
- * Returns a Value which is essentially a "sink": (almost) every computation involving a sink evaluates to sink. A few
94
- * quick examples: `5+sink`, `sink.x`, `sink()`, `Object.keys(sink)`, `if (sink) 4 else 8` all evaluate to `sink`. The
95
- * raitonale is that once an expression evaluates to `sink` all expressions depending on it also evaluate to `sink`.
96
- *
97
- * There are however a few (intentional) exemptions:
98
- * (i) a sink can be passed as an actual parameter in a function call. Hence `(fun (x,y) y)(sink, 5)` will evaluate
99
- * to `5`.
100
- * (ii) a sink can be compared with itself.
101
- * (iii) in `if()` expressions, only one of the branches is evlauated (based on the condition's value). As a result,
102
- * evluation of a sink-producing branch can be skipping. Specifically, `if (true) 5 else sink` evaluates to `5`.
103
- * (iv) in `||` and `&&` expressions, the evaluation of the right hand side can be skipped. Specifically,
104
- * `true || sink` evaluates to `true` and `false && sink` evaluates to `false`.
105
- */
106
- static sink(span, trace, symbols) {
107
- return new Value({
108
- val: undefined,
109
- tag: 'sink',
110
- ...(span ? { span } : {}),
111
- ...(trace ? { trace } : {}),
112
- ...(symbols ? { symbols } : {}),
113
- });
114
- }
115
- static str(val) {
116
- return new Value({ val, tag: 'str' });
117
- }
118
- static arr(val) {
119
- return new Value({ val, tag: 'arr' });
120
- }
121
- static obj(val) {
122
- return new Value({ val, tag: 'obj' });
123
- }
124
- static lambda(ast, table) {
125
- return new Value({ val: { ast, table }, tag: 'lambda' });
126
- }
127
- static foreign(f) {
128
- return new Value({ tag: 'foreign', val: f });
129
- }
130
- isSink() {
131
- return this.inner.tag === 'sink';
132
- }
133
- unwrap() {
134
- return this.inner.val;
135
- }
136
- assertBool() {
137
- const err = badType('bool');
138
- return selectRaw(this, {
139
- arr: err,
140
- bool: a => a,
141
- foreign: err,
142
- lambda: err,
143
- num: err,
144
- obj: err,
145
- sink: err,
146
- str: err,
147
- });
148
- }
149
- assertNum() {
150
- const err = badType('num');
151
- return selectRaw(this, {
152
- arr: err,
153
- bool: err,
154
- foreign: err,
155
- lambda: err,
156
- num: a => a,
157
- obj: err,
158
- sink: err,
159
- str: err,
160
- });
161
- }
162
- assertStr() {
163
- const err = badType('str');
164
- return selectRaw(this, {
165
- arr: err,
166
- bool: err,
167
- foreign: err,
168
- lambda: err,
169
- num: err,
170
- obj: err,
171
- sink: err,
172
- str: a => a,
173
- });
174
- }
175
- assertArr() {
176
- const err = badType('arr');
177
- return selectRaw(this, {
178
- arr: a => a,
179
- bool: err,
180
- foreign: err,
181
- lambda: err,
182
- num: err,
183
- obj: err,
184
- sink: err,
185
- str: err,
186
- });
187
- }
188
- assertObj() {
189
- const err = badType('obj');
190
- return selectRaw(this, {
191
- arr: err,
192
- bool: err,
193
- foreign: err,
194
- lambda: err,
195
- num: err,
196
- obj: a => a,
197
- sink: err,
198
- str: err,
199
- });
200
- }
201
- assertLambda() {
202
- const err = badType('lambda');
203
- return selectRaw(this, {
204
- arr: err,
205
- bool: err,
206
- foreign: err,
207
- lambda: a => a,
208
- num: err,
209
- obj: err,
210
- sink: err,
211
- str: err,
212
- });
213
- }
214
- isLambda() {
215
- return this.inner.tag === 'lambda';
216
- }
217
- ifElse(positive, negative) {
218
- const err = badType('bool');
219
- return select(this, {
220
- arr: err,
221
- bool: c => (c ? positive() : negative()),
222
- foreign: err,
223
- lambda: err,
224
- num: err,
225
- obj: err,
226
- str: err,
227
- });
228
- }
229
- bindToSpan(span) {
230
- const inner = this.inner;
231
- if (inner.tag !== 'sink') {
232
- throw new Error(`Not supported on type ${this.inner.tag}`);
233
- }
234
- return Value.sink(span, inner.trace, inner.symbols);
235
- }
236
- trace() {
237
- const inner = this.inner;
238
- if (inner.tag !== 'sink') {
239
- return undefined;
240
- }
241
- const ret = [];
242
- for (let curr = inner.trace; curr !== undefined; curr = curr?.next) {
243
- ret.push(curr.ast);
244
- }
245
- return ret.length === 0 ? undefined : ret;
246
- }
247
- symbols() {
248
- const inner = this.inner;
249
- if (inner.tag !== 'sink') {
250
- return undefined;
251
- }
252
- return inner.symbols;
253
- }
254
- span() {
255
- const inner = this.inner;
256
- if (inner.tag !== 'sink') {
257
- return undefined;
258
- }
259
- return inner.span;
260
- }
261
- or(that) {
262
- const err = badType('bool');
263
- return select(this, {
264
- arr: err,
265
- bool: lhs => lhs ||
266
- select(that(), {
267
- arr: err,
268
- bool: rhs => rhs,
269
- foreign: err,
270
- lambda: err,
271
- num: err,
272
- obj: err,
273
- str: err,
274
- }),
275
- foreign: err,
276
- lambda: err,
277
- num: err,
278
- obj: err,
279
- str: err,
280
- });
281
- }
282
- and(that) {
283
- const err = badType('bool');
284
- return select(this, {
285
- arr: err,
286
- bool: lhs => lhs &&
287
- select(that(), {
288
- arr: err,
289
- bool: rhs => rhs,
290
- foreign: err,
291
- lambda: err,
292
- num: err,
293
- obj: err,
294
- str: err,
295
- }),
296
- foreign: err,
297
- lambda: err,
298
- num: err,
299
- obj: err,
300
- str: err,
301
- });
302
- }
303
- unsink(that) {
304
- if (this.isSink()) {
305
- return that();
306
- }
307
- return this;
308
- }
309
- equalsTo(that) {
310
- if (this.inner.tag !== that.inner.tag) {
311
- return Value.bool(false);
312
- }
313
- // TODO(imaman): much better comparison is needed here
314
- const b = JSON.stringify(this.inner.val) === JSON.stringify(that.inner.val);
315
- return Value.bool(b);
316
- }
317
- not() {
318
- const err = badType('bool');
319
- return select(this, {
320
- arr: err,
321
- bool: lhs => !lhs,
322
- foreign: err,
323
- lambda: err,
324
- num: err,
325
- obj: err,
326
- str: err,
327
- });
328
- }
329
- binaryNumericOperator(a, b, f) {
330
- const err = badType('num');
331
- return select(a, {
332
- arr: err,
333
- bool: err,
334
- foreign: err,
335
- lambda: err,
336
- num: lhs => select(b, {
337
- arr: err,
338
- bool: err,
339
- foreign: err,
340
- lambda: err,
341
- num: rhs => f(lhs, rhs),
342
- obj: err,
343
- str: err,
344
- }),
345
- obj: err,
346
- str: err,
347
- });
348
- }
349
- plus(that) {
350
- const errNum = badType('num');
351
- return select(this, {
352
- arr: errNum,
353
- bool: errNum,
354
- foreign: errNum,
355
- lambda: errNum,
356
- num: lhs => select(that, {
357
- arr: errNum,
358
- bool: errNum,
359
- foreign: errNum,
360
- lambda: errNum,
361
- num: rhs => lhs + rhs,
362
- obj: errNum,
363
- str: errNum,
364
- }),
365
- obj: errNum,
366
- str: lhs => select(that, {
367
- arr: rhs => lhs + rhs,
368
- bool: rhs => lhs + rhs,
369
- foreign: rhs => lhs + rhs,
370
- lambda: rhs => lhs + rhs,
371
- num: rhs => lhs + rhs,
372
- obj: rhs => lhs + rhs,
373
- str: rhs => lhs + rhs,
374
- }),
375
- });
376
- }
377
- minus(that) {
378
- return this.binaryNumericOperator(this, that, (a, b) => a - b);
379
- }
380
- times(that) {
381
- return this.binaryNumericOperator(this, that, (a, b) => a * b);
382
- }
383
- power(that) {
384
- return this.binaryNumericOperator(this, that, (a, b) => a ** b);
385
- }
386
- over(that) {
387
- return this.binaryNumericOperator(this, that, (a, b) => a / b);
388
- }
389
- modulo(that) {
390
- return this.binaryNumericOperator(this, that, (a, b) => a % b);
391
- }
392
- negate() {
393
- return Value.num(0).minus(this);
394
- }
395
- isToZero(comparator) {
396
- const err = badType('num');
397
- return select(this, {
398
- arr: err,
399
- bool: err,
400
- foreign: err,
401
- lambda: err,
402
- num: n => (0, switch_on_1.switchOn)(comparator, {
403
- '<': () => Value.bool(n < 0),
404
- '<=': () => Value.bool(n <= 0),
405
- '==': () => Value.bool(n == 0),
406
- '!=': () => Value.bool(n !== 0),
407
- '>=': () => Value.bool(n >= 0),
408
- '>': () => Value.bool(n > 0),
409
- }),
410
- obj: err,
411
- str: err,
412
- });
413
- }
414
- isTrue() {
415
- const err = badType('bool');
416
- return selectRaw(this, {
417
- arr: err,
418
- bool: b => b,
419
- foreign: err,
420
- lambda: err,
421
- num: err,
422
- obj: err,
423
- sink: err,
424
- str: err,
425
- });
426
- }
427
- isZero() {
428
- const err = badType('num');
429
- return selectRaw(this, {
430
- arr: err,
431
- bool: err,
432
- foreign: err,
433
- lambda: err,
434
- num: n => n === 0,
435
- obj: err,
436
- sink: err,
437
- str: err,
438
- });
439
- }
440
- /**
441
- * Determines the order beteween `this` and the given argument (`that`). The behavior of this method is dictated by
442
- * the following principles:
443
- *
444
- * (i) if a < b then b >= a (i.e., it provides a consistent answer regardless of the whether `this` is `a`
445
- * and `that` is `b` or vice versa)
446
- * (ii) ordering two values of different type result in runtime error.
447
- * (iii) orderingg a value with itself evaluates to `0`
448
- *
449
- * Principles (i) and (iii) realizes the intuitive behavior of comparisons. (ii) realizes the idea that
450
- * "one cannot compare oranges and apples". This is essentially a design decision. We could have gone with defining
451
- * some order between types (the tag of a Value object), but we feel that a saner approach is to say "we do not know
452
- * how to sort an array containing numbers and booleans".
453
- *
454
- * IMPORTANT: these principles overpower other principles. In parituclar, the principles that "an expression with
455
- * sink evaluates to sink" is trumped by comparison principle (ii)
456
- *
457
- * @param that
458
- * @returns
459
- */
460
- order(that) {
461
- const err = (_u, t) => {
462
- throw new Error(`Cannot compare a value of type ${t}`);
463
- };
464
- if (this.inner.tag !== that.inner.tag) {
465
- throw new Error(`Cannot compare a ${this.inner.tag} value with a value of another type (${that.inner.tag})`);
466
- }
467
- return select(this, {
468
- arr: err,
469
- bool: lhs => {
470
- const rhs = that.assertBool();
471
- return lhs && !rhs ? 1 : !lhs && rhs ? -1 : 0;
472
- },
473
- foreign: err,
474
- lambda: err,
475
- num: () => {
476
- const d = this.minus(that).assertNum();
477
- return d < 0 ? -1 : d > 0 ? 1 : 0;
478
- },
479
- obj: err,
480
- str: a => {
481
- const rhs = that.assertStr();
482
- const d = a.localeCompare(rhs);
483
- return d < 0 ? -1 : d > 0 ? 1 : 0;
484
- },
485
- });
486
- }
487
- static toStringOrNumber(input) {
488
- if (typeof input === 'string') {
489
- return input;
490
- }
491
- const err = badType('str', 'num');
492
- return selectRaw(input, {
493
- arr: err,
494
- bool: err,
495
- foreign: err,
496
- lambda: err,
497
- num: a => a,
498
- obj: err,
499
- sink: err,
500
- str: a => a,
501
- });
502
- }
503
- access(indexValue, callEvaluator) {
504
- const err = badType('obj', 'str', 'arr');
505
- return select(this, {
506
- arr: a => {
507
- if (typeof indexValue === 'string') {
508
- return (0, find_array_method_1.findArrayMethod)(a, indexValue, callEvaluator);
509
- }
510
- const i = indexValue.assertNum();
511
- if (i < 0 || i > a.length) {
512
- throw new Error(`array index (${i}) is out of bounds (length = ${a.length})`);
513
- }
514
- return a[i];
515
- },
516
- bool: err,
517
- foreign: err,
518
- lambda: err,
519
- num: err,
520
- obj: o => o[Value.toStringOrNumber(indexValue)],
521
- str: s => (0, find_string_method_1.findStringMethod)(s, indexValue),
522
- });
523
- }
524
- call(args, evaluator) {
525
- const err = badType('lambda', 'foreign');
526
- return select(this, {
527
- arr: err,
528
- bool: err,
529
- foreign: f => from(f(...args)),
530
- lambda: l => evaluator(l.ast.formalArgs.map(a => a.t.text), l.ast.body, l.table),
531
- num: err,
532
- obj: err,
533
- str: err,
534
- });
535
- }
536
- keys() {
537
- const err = badType('obj');
538
- return select(this, {
539
- arr: err,
540
- bool: err,
541
- foreign: err,
542
- lambda: err,
543
- num: err,
544
- obj: a => Object.keys(a),
545
- str: err,
546
- });
547
- }
548
- entries() {
549
- const err = badType('obj');
550
- return select(this, {
551
- arr: err,
552
- bool: err,
553
- foreign: err,
554
- lambda: err,
555
- num: err,
556
- obj: a => Object.entries(a),
557
- str: err,
558
- });
559
- }
560
- fromEntries() {
561
- const err = badType('arr');
562
- return select(this, {
563
- arr: a => Object.fromEntries(a.map(x => selectRaw(x, {
564
- arr: pair => {
565
- pair.length === 2 || (0, fail_me_1.failMe)(`each entry must be a [key, value] pair`);
566
- return [pair[0].assertStr(), pair[1]];
567
- },
568
- bool: err,
569
- foreign: err,
570
- lambda: err,
571
- num: err,
572
- obj: err,
573
- sink: err,
574
- str: err,
575
- }))),
576
- bool: err,
577
- foreign: err,
578
- lambda: err,
579
- num: err,
580
- obj: err,
581
- str: err,
582
- });
583
- }
584
- toString() {
585
- return this.inner.val?.toString() ?? 'sink';
586
- }
587
- toJSON() {
588
- const copy = (v) => {
589
- return selectRaw(v, {
590
- arr: a => a.map(x => copy(x)),
591
- bool: a => a,
592
- foreign: a => a.toString(),
593
- lambda: a => (0, ast_node_1.show)(a.ast),
594
- num: a => a,
595
- obj: a => Object.fromEntries(Object.entries(a).map(([k, x]) => [k, copy(x)])),
596
- sink: () => undefined,
597
- str: a => a,
598
- });
599
- };
600
- return copy(this);
601
- }
602
- export() {
603
- return this.toJSON();
604
- }
605
- static from(u) {
606
- return from(u);
607
- }
608
- }
609
- exports.Value = Value;
610
- function from(u) {
611
- if (u instanceof Value) {
612
- return u;
613
- }
614
- if (typeof u === 'boolean') {
615
- return Value.bool(u);
616
- }
617
- if (typeof u === 'number') {
618
- return Value.num(u);
619
- }
620
- if (typeof u === 'string') {
621
- return Value.str(u);
622
- }
623
- if (Array.isArray(u)) {
624
- return Value.arr(u.map(curr => from(curr)));
625
- }
626
- if (typeof u === 'undefined') {
627
- return Value.sink();
628
- }
629
- if (u && typeof u === 'object') {
630
- return Value.obj(Object.fromEntries(Object.entries(u).map(([k, v]) => [k, from(v)])));
631
- }
632
- throw new Error(`cannot convert ${JSON.stringify(u)} to Value`);
633
- }
634
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQWtEO0FBQ2xELHVDQUFrQztBQUNsQywyREFBb0U7QUFDcEUsNkRBQXVEO0FBRXZELCtEQUF5RDtBQUV6RCwyQ0FBc0M7QUFrQ3RDLFNBQVMsWUFBWSxDQUFDLENBQVU7SUFDOUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzFCLENBQUM7QUFFRCxNQUFNLE9BQU8sR0FDWCxDQUFDLFFBQWEsRUFBRSxHQUFHLFlBQW1CLEVBQUUsRUFBRSxDQUMxQyxDQUFDLEVBQVcsRUFBRSxPQUFZLEVBQUUsQ0FBUSxFQUFFLEVBQUU7SUFDdEMsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixRQUFRLGNBQWMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtLQUN2RjtJQUVELE1BQU0sSUFBSSxLQUFLLENBQ2IscUNBQXFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sUUFBUSxjQUFjLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUMzRyxDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBRUg7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsU0FBUyxDQUFJLENBQVEsRUFBRSxLQUFrQjtJQUNoRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQ3JCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUU7UUFDdkIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQTtLQUMxQztJQUNELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxNQUFNLEVBQUU7UUFDeEIsT0FB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
@@ -1 +0,0 @@
1
- export {};