circuitscript 0.0.38 → 0.1.2

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 (66) hide show
  1. package/dist/cjs/BaseVisitor.js +69 -46
  2. package/dist/cjs/SymbolValidatorVisitor.js +1 -1
  3. package/dist/cjs/antlr/CircuitScriptLexer.js +80 -80
  4. package/dist/cjs/antlr/CircuitScriptParser.js +580 -613
  5. package/dist/cjs/builtinMethods.js +32 -10
  6. package/dist/cjs/draw_symbols.js +375 -233
  7. package/dist/cjs/execute.js +142 -131
  8. package/dist/cjs/export.js +2 -4
  9. package/dist/cjs/geometry.js +52 -19
  10. package/dist/cjs/globals.js +14 -9
  11. package/dist/cjs/helpers.js +16 -3
  12. package/dist/cjs/layout.js +143 -151
  13. package/dist/cjs/logger.js +8 -1
  14. package/dist/cjs/objects/ClassComponent.js +22 -22
  15. package/dist/cjs/objects/ExecutionScope.js +10 -4
  16. package/dist/cjs/objects/Frame.js +4 -1
  17. package/dist/cjs/objects/ParamDefinition.js +120 -4
  18. package/dist/cjs/objects/PinDefinition.js +1 -4
  19. package/dist/cjs/objects/types.js +41 -0
  20. package/dist/cjs/render.js +41 -110
  21. package/dist/cjs/sizing.js +33 -7
  22. package/dist/cjs/utils.js +92 -2
  23. package/dist/cjs/visitor.js +279 -284
  24. package/dist/esm/BaseVisitor.mjs +70 -47
  25. package/dist/esm/SymbolValidatorVisitor.mjs +1 -1
  26. package/dist/esm/antlr/CircuitScriptLexer.mjs +80 -80
  27. package/dist/esm/antlr/CircuitScriptParser.mjs +580 -613
  28. package/dist/esm/builtinMethods.mjs +29 -10
  29. package/dist/esm/draw_symbols.mjs +381 -238
  30. package/dist/esm/execute.mjs +144 -133
  31. package/dist/esm/export.mjs +2 -4
  32. package/dist/esm/geometry.mjs +52 -19
  33. package/dist/esm/globals.mjs +13 -8
  34. package/dist/esm/helpers.mjs +17 -4
  35. package/dist/esm/layout.mjs +144 -153
  36. package/dist/esm/logger.mjs +8 -1
  37. package/dist/esm/objects/ClassComponent.mjs +21 -26
  38. package/dist/esm/objects/ExecutionScope.mjs +10 -4
  39. package/dist/esm/objects/Frame.mjs +4 -1
  40. package/dist/esm/objects/ParamDefinition.mjs +119 -3
  41. package/dist/esm/objects/PinDefinition.mjs +0 -2
  42. package/dist/esm/objects/types.mjs +42 -0
  43. package/dist/esm/render.mjs +44 -113
  44. package/dist/esm/sizing.mjs +34 -8
  45. package/dist/esm/utils.mjs +86 -1
  46. package/dist/esm/visitor.mjs +281 -286
  47. package/dist/types/BaseVisitor.d.ts +3 -2
  48. package/dist/types/antlr/CircuitScriptParser.d.ts +5 -3
  49. package/dist/types/draw_symbols.d.ts +81 -49
  50. package/dist/types/execute.d.ts +16 -11
  51. package/dist/types/geometry.d.ts +31 -19
  52. package/dist/types/globals.d.ts +15 -10
  53. package/dist/types/helpers.d.ts +2 -1
  54. package/dist/types/layout.d.ts +22 -21
  55. package/dist/types/logger.d.ts +1 -1
  56. package/dist/types/objects/ClassComponent.d.ts +19 -16
  57. package/dist/types/objects/ExecutionScope.d.ts +2 -1
  58. package/dist/types/objects/Frame.d.ts +5 -3
  59. package/dist/types/objects/ParamDefinition.d.ts +31 -2
  60. package/dist/types/objects/PinDefinition.d.ts +0 -2
  61. package/dist/types/objects/types.d.ts +7 -2
  62. package/dist/types/render.d.ts +2 -1
  63. package/dist/types/utils.d.ts +9 -1
  64. package/dist/types/visitor.d.ts +5 -5
  65. package/libs/lib.cst +102 -32
  66. package/package.json +7 -3
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BaseVisitor = void 0;
4
4
  const fs_1 = require("fs");
5
5
  const path_1 = require("path");
6
+ const big_js_1 = require("big.js");
6
7
  const CircuitScriptParser_1 = require("./antlr/CircuitScriptParser");
7
8
  const CircuitScriptVisitor_1 = require("./antlr/CircuitScriptVisitor");
8
9
  const execute_1 = require("./execute");
@@ -13,6 +14,7 @@ const PinTypes_1 = require("./objects/PinTypes");
13
14
  const types_1 = require("./objects/types");
14
15
  const globals_1 = require("./globals");
15
16
  const builtinMethods_1 = require("./builtinMethods");
17
+ const utils_1 = require("./utils");
16
18
  class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
17
19
  constructor(silent = false, onErrorHandler = null, currentDirectory, defaultLibsPath) {
18
20
  super();
@@ -22,7 +24,6 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
22
24
  this.printToConsole = true;
23
25
  this.acceptedDirections = [types_1.Direction.Up, types_1.Direction.Down,
24
26
  types_1.Direction.Right, types_1.Direction.Left];
25
- this.acceptedFlip = ['flipX', 'flipY'];
26
27
  this.resultData = new Map;
27
28
  this.paramData = new Map;
28
29
  this.pinTypesList = [
@@ -56,18 +57,21 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
56
57
  tmpComponent.instanceName = reference.name;
57
58
  instances.delete(oldName);
58
59
  instances.set(reference.name, tmpComponent);
59
- this.getExecutor().log(`assigned '${reference.name}' to ClassComponent`);
60
+ this.log2(`assigned '${reference.name}' to ClassComponent`);
60
61
  }
61
62
  else {
62
63
  this.getExecutor().scope.variables.set(reference.name, value);
64
+ this.log2(`assigned variable ${reference.name} to ${value}`);
63
65
  }
64
66
  }
65
67
  else {
66
- if (reference.value instanceof ClassComponent_1.ClassComponent) {
67
- this.setInstanceParam(reference.value, trailers, value);
68
+ if (reference.parentValue instanceof ClassComponent_1.ClassComponent) {
69
+ this.setInstanceParam(reference.parentValue, trailers, value);
70
+ this.log2(`assigned component param ${reference.parentValue} trailers: ${trailers} value: ${value}`);
68
71
  }
69
- else if (reference.value instanceof Object) {
70
- reference.value[trailers.join('.')] = value;
72
+ else if (reference.parentValue instanceof Object) {
73
+ reference.parentValue[trailers.join('.')] = value;
74
+ this.log2(`assigned object ${reference.parentValue} trailers: ${trailers} value: ${value}`);
71
75
  }
72
76
  }
73
77
  this.setResult(ctx, value);
@@ -78,7 +82,7 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
78
82
  this.visit(ctxDataExpr);
79
83
  const value = this.getResult(ctxDataExpr);
80
84
  if (!reference.found) {
81
- throw 'Undefined reference: ' + reference.name;
85
+ this.throwWithContext(ctx, 'Undefined reference: ' + reference.name);
82
86
  }
83
87
  const trailers = reference.trailers ?? [];
84
88
  let currentValue = null;
@@ -94,26 +98,27 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
94
98
  }
95
99
  }
96
100
  if (currentValue === null) {
97
- throw 'Operator assignment failed: could not get value';
101
+ this.throwWithContext(ctx, 'Operator assignment failed: could not get value');
98
102
  }
99
103
  let newValue = 0;
104
+ const operator = new ParamDefinition_1.NumberOperator();
100
105
  if (ctx.AdditionAssign()) {
101
- newValue = currentValue + value;
106
+ newValue = operator.addition(currentValue, value);
102
107
  }
103
108
  else if (ctx.MinusAssign()) {
104
- newValue = currentValue - value;
109
+ newValue = operator.subtraction(currentValue, value);
105
110
  }
106
111
  else if (ctx.MultiplyAssign()) {
107
- newValue = currentValue * value;
112
+ newValue = operator.multiply(currentValue, value);
108
113
  }
109
114
  else if (ctx.DivideAssign()) {
110
- newValue = currentValue / value;
115
+ newValue = operator.divide(currentValue, value);
111
116
  }
112
117
  else if (ctx.ModulusAssign()) {
113
- newValue = currentValue % value;
118
+ newValue = operator.modulus(currentValue, value);
114
119
  }
115
120
  else {
116
- throw 'Operator assignment failed: could not perform operator';
121
+ this.throwWithContext(ctx, 'Operator assignment failed: could not perform operator');
117
122
  }
118
123
  if (trailers.length === 0) {
119
124
  this.getExecutor().scope.variables.set(reference.name, newValue);
@@ -133,6 +138,14 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
133
138
  const firstId = ctx.ID(0);
134
139
  const atomId = firstId.getText();
135
140
  let currentReference;
141
+ const idTrailers = [];
142
+ if (ctx.ID().length > 1) {
143
+ const idLength = ctx.ID().length;
144
+ for (let i = 1; i < idLength; i++) {
145
+ const tmpCtx = ctx.ID(i);
146
+ idTrailers.push(tmpCtx.getText());
147
+ }
148
+ }
136
149
  if (this.pinTypesList.indexOf(atomId) !== -1) {
137
150
  currentReference = {
138
151
  found: true,
@@ -141,26 +154,17 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
141
154
  };
142
155
  }
143
156
  else {
144
- currentReference = executor.resolveVariable(this.executionStack, atomId);
145
- }
146
- const idTrailers = [];
147
- if (ctx.ID().length > 1) {
148
- const idLength = ctx.ID().length;
149
- for (let i = 1; i < idLength; i++) {
150
- const tmpCtx = ctx.ID(i);
151
- idTrailers.push(tmpCtx.getText());
152
- }
157
+ currentReference = executor.resolveVariable(this.executionStack, atomId, idTrailers);
153
158
  }
154
- currentReference.trailers = idTrailers;
155
- if (currentReference.found && currentReference.type === 'instance') {
159
+ if (currentReference.found && currentReference.type === 'instance' && idTrailers.length === 0) {
156
160
  const tmpComponent = currentReference.value;
157
161
  for (const [pinId, net] of tmpComponent.pinNets) {
158
162
  executor.scope.setNet(tmpComponent, pinId, net);
159
163
  }
160
164
  }
161
- this.getExecutor().log('atomId:', atomId, currentReference);
165
+ this.log2(`atomId: ${atomId} ${currentReference}`);
162
166
  if (ctx.parent instanceof CircuitScriptParser_1.ExpressionContext && !currentReference.found) {
163
- throw "Unknown symbol: " + atomId;
167
+ this.throwWithContext(ctx, "Unknown symbol: " + atomId);
164
168
  }
165
169
  this.setResult(ctx, currentReference);
166
170
  };
@@ -182,7 +186,7 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
182
186
  let currentReference = executor.resolveVariable(this.executionStack, atomId);
183
187
  if (ctx.trailer_expr().length > 0) {
184
188
  if (!currentReference.found) {
185
- throw "Unknown function name: " + atomId;
189
+ this.throwWithContext(ctx, "Unknown function name: " + atomId);
186
190
  }
187
191
  currentReference.trailers = [];
188
192
  ctx.trailer_expr().forEach(item => {
@@ -195,13 +199,18 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
195
199
  parameters = this.getResult(ctxParameters);
196
200
  }
197
201
  const useNetNamespace = this.getNetNamespace(executor.netNamespace, passedNetNamespace);
198
- const [, functionResult] = executor.callFunction(currentReference.name, parameters, this.executionStack, useNetNamespace);
199
- currentReference = {
200
- found: true,
201
- value: functionResult,
202
- type: (functionResult instanceof ClassComponent_1.ClassComponent) ?
203
- 'instance' : 'value',
204
- };
202
+ try {
203
+ const [, functionResult] = executor.callFunction(currentReference.name, parameters, this.executionStack, useNetNamespace);
204
+ currentReference = {
205
+ found: true,
206
+ value: functionResult,
207
+ type: (functionResult instanceof ClassComponent_1.ClassComponent) ?
208
+ 'instance' : 'value',
209
+ };
210
+ }
211
+ catch (err) {
212
+ this.throwWithContext(ctx, err);
213
+ }
205
214
  }
206
215
  else {
207
216
  currentReference.trailers.push(itemValue);
@@ -221,10 +230,10 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
221
230
  let result = null;
222
231
  if (ctxIntegerValue || ctxDecimalValue || ctxNumericValue) {
223
232
  if (ctxIntegerValue) {
224
- result = sign * Number(ctxIntegerValue.getText());
233
+ result = (0, utils_1.resolveToNumericValue)((new big_js_1.Big(ctxIntegerValue.getText())).mul(new big_js_1.Big(sign)));
225
234
  }
226
235
  else if (ctxDecimalValue) {
227
- result = sign * Number(ctxDecimalValue.getText());
236
+ result = (0, utils_1.resolveToNumericValue)((new big_js_1.Big(ctxDecimalValue.getText())).mul(new big_js_1.Big(sign)));
228
237
  }
229
238
  else if (ctxNumericValue) {
230
239
  const textExtra = ctx.Minus() ? '-' : '';
@@ -233,7 +242,7 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
233
242
  }
234
243
  else {
235
244
  if (sign === -1) {
236
- throw "Invalid value!";
245
+ this.throwWithContext(ctx, "Invalid value");
237
246
  }
238
247
  }
239
248
  if (ctxBooleanValue) {
@@ -320,7 +329,7 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
320
329
  this.visitImport_expr = (ctx) => {
321
330
  const ID = ctx.ID().toString();
322
331
  this.log('import', ID);
323
- this.handleImportFile(ID, true);
332
+ this.handleImportFile(ID, true, ctx);
324
333
  this.log('done import', ID);
325
334
  };
326
335
  this.visitFunction_return_expr = (ctx) => {
@@ -420,12 +429,15 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
420
429
  getReference(ctx) {
421
430
  const atomStr = ctx.getText();
422
431
  if (atomStr.indexOf('(') !== -1 || atomStr.indexOf(')') !== -1) {
423
- throw "Invalid assignment expression!";
432
+ this.throwWithContext(ctx, "Invalid assignment expression!");
424
433
  }
425
434
  this.visit(ctx);
426
435
  const reference = this.getResult(ctx);
427
- if (!reference.found && reference.trailers && reference.trailers.length > 0) {
428
- throw 'Undefined reference: ' + reference.name + '.' + reference.trailers.join('.');
436
+ const { trailers = [] } = reference;
437
+ const undefinedParentWithTrailers = trailers.length > 0
438
+ && reference.parentValue === undefined;
439
+ if (undefinedParentWithTrailers) {
440
+ this.throwWithContext(ctx, 'Undefined reference: ' + reference.name + '.' + trailers.join('.'));
429
441
  }
430
442
  return reference;
431
443
  }
@@ -435,7 +447,11 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
435
447
  getResult(ctx) {
436
448
  return this.resultData.get(ctx);
437
449
  }
438
- handleImportFile(name, throwErrors = true) {
450
+ visitResult(ctx) {
451
+ this.visit(ctx);
452
+ return this.getResult(ctx);
453
+ }
454
+ handleImportFile(name, throwErrors = true, ctx = null) {
439
455
  let hasError = false;
440
456
  let hasParseError = false;
441
457
  let pathExists = false;
@@ -470,14 +486,18 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
470
486
  catch (err) {
471
487
  this.log('Failed to import file: ', err.message);
472
488
  }
489
+ let errorMessage = null;
473
490
  if (throwErrors && (hasError || hasParseError || !pathExists)) {
474
491
  if (!pathExists) {
475
- throw `File does not exist: ${name}`;
492
+ errorMessage = `File does not exist: ${name}`;
476
493
  }
477
494
  else {
478
- throw `Failed to import: ${name}`;
495
+ errorMessage = `Failed to import: ${name}`;
479
496
  }
480
497
  }
498
+ if (errorMessage !== null && ctx) {
499
+ this.throwWithContext(ctx, errorMessage);
500
+ }
481
501
  return {
482
502
  hasError,
483
503
  hasParseError,
@@ -559,7 +579,7 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
559
579
  setInstanceParam(object, trailers, value) {
560
580
  const paramName = trailers[0];
561
581
  object.setParam(paramName, value);
562
- this.getExecutor().log(`set instance ${object.instanceName} param ${paramName} to ${value}`);
582
+ this.log2(`set instance ${object.instanceName} param ${paramName} to ${value}`);
563
583
  }
564
584
  getInstanceParam(object, trailers) {
565
585
  const paramName = trailers[0];
@@ -580,5 +600,8 @@ class BaseVisitor extends CircuitScriptVisitor_1.CircuitScriptVisitor {
580
600
  prepareStringValue(value) {
581
601
  return value.slice(1, value.length - 1);
582
602
  }
603
+ throwWithContext(context, message) {
604
+ (0, utils_1.throwWithContext)(context, message);
605
+ }
583
606
  }
584
607
  exports.BaseVisitor = BaseVisitor;
@@ -9,7 +9,7 @@ class SymbolValidatorVisitor extends BaseVisitor_js_1.BaseVisitor {
9
9
  this.symbolTable = new SymbolTable();
10
10
  this.visitImport_expr = (ctx) => {
11
11
  const ID = ctx.ID().toString();
12
- const { pathExists } = this.handleImportFile(ID, false);
12
+ const { pathExists } = this.handleImportFile(ID, false, ctx);
13
13
  if (!pathExists) {
14
14
  this.symbolTable.addUndefined(this.getExecutor(), ID, ctx.ID());
15
15
  }
@@ -238,86 +238,86 @@ CircuitScriptLexer._serializedATN = [
238
238
  95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113,
239
239
  0, 115, 57, 117, 58, 119, 59, 121, 60, 123, 61, 125, 62, 127, 63, 129, 64, 131, 0,
240
240
  133, 0, 135, 65, 1, 0, 10, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95,
241
- 97, 122, 1, 0, 49, 57, 2, 0, 48, 57, 95, 95, 1, 0, 48, 57, 1, 0, 48, 48, 5, 0, 77, 77, 107,
242
- 107, 109, 110, 112, 112, 117, 117, 3, 0, 48, 57, 65, 90, 97, 122, 2, 0, 9, 9, 32, 32,
243
- 2, 0, 10, 10, 12, 13, 511, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0,
244
- 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0,
245
- 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0,
246
- 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0,
247
- 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0,
248
- 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0,
249
- 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0,
250
- 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0,
251
- 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0,
252
- 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0,
253
- 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107,
254
- 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0,
255
- 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1,
256
- 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 1, 137, 1, 0, 0, 0, 3, 139, 1, 0, 0, 0, 5,
257
- 141, 1, 0, 0, 0, 7, 143, 1, 0, 0, 0, 9, 146, 1, 0, 0, 0, 11, 148, 1, 0, 0, 0, 13, 150, 1,
258
- 0, 0, 0, 15, 152, 1, 0, 0, 0, 17, 158, 1, 0, 0, 0, 19, 165, 1, 0, 0, 0, 21, 172, 1, 0, 0,
259
- 0, 23, 182, 1, 0, 0, 0, 25, 190, 1, 0, 0, 0, 27, 197, 1, 0, 0, 0, 29, 202, 1, 0, 0, 0, 31,
260
- 206, 1, 0, 0, 0, 33, 210, 1, 0, 0, 0, 35, 213, 1, 0, 0, 0, 37, 216, 1, 0, 0, 0, 39, 222,
261
- 1, 0, 0, 0, 41, 227, 1, 0, 0, 0, 43, 236, 1, 0, 0, 0, 45, 243, 1, 0, 0, 0, 47, 247, 1, 0,
262
- 0, 0, 49, 254, 1, 0, 0, 0, 51, 258, 1, 0, 0, 0, 53, 261, 1, 0, 0, 0, 55, 267, 1, 0, 0, 0,
263
- 57, 276, 1, 0, 0, 0, 59, 279, 1, 0, 0, 0, 61, 288, 1, 0, 0, 0, 63, 290, 1, 0, 0, 0, 65, 296,
264
- 1, 0, 0, 0, 67, 302, 1, 0, 0, 0, 69, 305, 1, 0, 0, 0, 71, 308, 1, 0, 0, 0, 73, 310, 1, 0,
265
- 0, 0, 75, 313, 1, 0, 0, 0, 77, 315, 1, 0, 0, 0, 79, 323, 1, 0, 0, 0, 81, 329, 1, 0, 0, 0,
266
- 83, 331, 1, 0, 0, 0, 85, 333, 1, 0, 0, 0, 87, 335, 1, 0, 0, 0, 89, 337, 1, 0, 0, 0, 91, 339,
267
- 1, 0, 0, 0, 93, 341, 1, 0, 0, 0, 95, 344, 1, 0, 0, 0, 97, 347, 1, 0, 0, 0, 99, 350, 1, 0,
268
- 0, 0, 101, 353, 1, 0, 0, 0, 103, 356, 1, 0, 0, 0, 105, 359, 1, 0, 0, 0, 107, 366, 1, 0,
269
- 0, 0, 109, 377, 1, 0, 0, 0, 111, 379, 1, 0, 0, 0, 113, 394, 1, 0, 0, 0, 115, 408, 1, 0,
270
- 0, 0, 117, 410, 1, 0, 0, 0, 119, 421, 1, 0, 0, 0, 121, 426, 1, 0, 0, 0, 123, 436, 1, 0,
271
- 0, 0, 125, 449, 1, 0, 0, 0, 127, 454, 1, 0, 0, 0, 129, 465, 1, 0, 0, 0, 131, 473, 1, 0,
272
- 0, 0, 133, 477, 1, 0, 0, 0, 135, 486, 1, 0, 0, 0, 137, 138, 5, 58, 0, 0, 138, 2, 1, 0, 0,
273
- 0, 139, 140, 5, 44, 0, 0, 140, 4, 1, 0, 0, 0, 141, 142, 5, 61, 0, 0, 142, 6, 1, 0, 0, 0,
274
- 143, 144, 5, 46, 0, 0, 144, 145, 5, 46, 0, 0, 145, 8, 1, 0, 0, 0, 146, 147, 5, 46, 0, 0,
275
- 147, 10, 1, 0, 0, 0, 148, 149, 5, 91, 0, 0, 149, 12, 1, 0, 0, 0, 150, 151, 5, 93, 0, 0,
276
- 151, 14, 1, 0, 0, 0, 152, 153, 5, 98, 0, 0, 153, 154, 5, 114, 0, 0, 154, 155, 5, 101,
277
- 0, 0, 155, 156, 5, 97, 0, 0, 156, 157, 5, 107, 0, 0, 157, 16, 1, 0, 0, 0, 158, 159, 5,
278
- 98, 0, 0, 159, 160, 5, 114, 0, 0, 160, 161, 5, 97, 0, 0, 161, 162, 5, 110, 0, 0, 162,
279
- 163, 5, 99, 0, 0, 163, 164, 5, 104, 0, 0, 164, 18, 1, 0, 0, 0, 165, 166, 5, 99, 0, 0, 166,
280
- 167, 5, 114, 0, 0, 167, 168, 5, 101, 0, 0, 168, 169, 5, 97, 0, 0, 169, 170, 5, 116, 0,
281
- 0, 170, 171, 5, 101, 0, 0, 171, 20, 1, 0, 0, 0, 172, 173, 5, 99, 0, 0, 173, 174, 5, 111,
282
- 0, 0, 174, 175, 5, 109, 0, 0, 175, 176, 5, 112, 0, 0, 176, 177, 5, 111, 0, 0, 177, 178,
283
- 5, 110, 0, 0, 178, 179, 5, 101, 0, 0, 179, 180, 5, 110, 0, 0, 180, 181, 5, 116, 0, 0,
284
- 181, 22, 1, 0, 0, 0, 182, 183, 5, 103, 0, 0, 183, 184, 5, 114, 0, 0, 184, 185, 5, 97,
285
- 0, 0, 185, 186, 5, 112, 0, 0, 186, 187, 5, 104, 0, 0, 187, 188, 5, 105, 0, 0, 188, 189,
286
- 5, 99, 0, 0, 189, 24, 1, 0, 0, 0, 190, 191, 5, 109, 0, 0, 191, 192, 5, 111, 0, 0, 192,
287
- 193, 5, 100, 0, 0, 193, 194, 5, 117, 0, 0, 194, 195, 5, 108, 0, 0, 195, 196, 5, 101,
288
- 0, 0, 196, 26, 1, 0, 0, 0, 197, 198, 5, 119, 0, 0, 198, 199, 5, 105, 0, 0, 199, 200, 5,
289
- 114, 0, 0, 200, 201, 5, 101, 0, 0, 201, 28, 1, 0, 0, 0, 202, 203, 5, 112, 0, 0, 203, 204,
290
- 5, 105, 0, 0, 204, 205, 5, 110, 0, 0, 205, 30, 1, 0, 0, 0, 206, 207, 5, 97, 0, 0, 207,
291
- 208, 5, 100, 0, 0, 208, 209, 5, 100, 0, 0, 209, 32, 1, 0, 0, 0, 210, 211, 5, 97, 0, 0,
292
- 211, 212, 5, 116, 0, 0, 212, 34, 1, 0, 0, 0, 213, 214, 5, 116, 0, 0, 214, 215, 5, 111,
293
- 0, 0, 215, 36, 1, 0, 0, 0, 216, 217, 5, 112, 0, 0, 217, 218, 5, 111, 0, 0, 218, 219, 5,
294
- 105, 0, 0, 219, 220, 5, 110, 0, 0, 220, 221, 5, 116, 0, 0, 221, 38, 1, 0, 0, 0, 222, 223,
295
- 5, 106, 0, 0, 223, 224, 5, 111, 0, 0, 224, 225, 5, 105, 0, 0, 225, 226, 5, 110, 0, 0,
296
- 226, 40, 1, 0, 0, 0, 227, 228, 5, 112, 0, 0, 228, 229, 5, 97, 0, 0, 229, 230, 5, 114,
297
- 0, 0, 230, 231, 5, 97, 0, 0, 231, 232, 5, 108, 0, 0, 232, 233, 5, 108, 0, 0, 233, 234,
298
- 5, 101, 0, 0, 234, 235, 5, 108, 0, 0, 235, 42, 1, 0, 0, 0, 236, 237, 5, 114, 0, 0, 237,
299
- 238, 5, 101, 0, 0, 238, 239, 5, 116, 0, 0, 239, 240, 5, 117, 0, 0, 240, 241, 5, 114,
300
- 0, 0, 241, 242, 5, 110, 0, 0, 242, 44, 1, 0, 0, 0, 243, 244, 5, 100, 0, 0, 244, 245, 5,
301
- 101, 0, 0, 245, 246, 5, 102, 0, 0, 246, 46, 1, 0, 0, 0, 247, 248, 5, 105, 0, 0, 248, 249,
302
- 5, 109, 0, 0, 249, 250, 5, 112, 0, 0, 250, 251, 5, 111, 0, 0, 251, 252, 5, 114, 0, 0,
303
- 252, 253, 5, 116, 0, 0, 253, 48, 1, 0, 0, 0, 254, 255, 5, 102, 0, 0, 255, 256, 5, 111,
304
- 0, 0, 256, 257, 5, 114, 0, 0, 257, 50, 1, 0, 0, 0, 258, 259, 5, 105, 0, 0, 259, 260, 5,
305
- 110, 0, 0, 260, 52, 1, 0, 0, 0, 261, 262, 5, 119, 0, 0, 262, 263, 5, 104, 0, 0, 263, 264,
306
- 5, 105, 0, 0, 264, 265, 5, 108, 0, 0, 265, 266, 5, 101, 0, 0, 266, 54, 1, 0, 0, 0, 267,
307
- 268, 5, 99, 0, 0, 268, 269, 5, 111, 0, 0, 269, 270, 5, 110, 0, 0, 270, 271, 5, 116, 0,
308
- 0, 271, 272, 5, 105, 0, 0, 272, 273, 5, 110, 0, 0, 273, 274, 5, 117, 0, 0, 274, 275,
309
- 5, 101, 0, 0, 275, 56, 1, 0, 0, 0, 276, 277, 5, 105, 0, 0, 277, 278, 5, 102, 0, 0, 278,
310
- 58, 1, 0, 0, 0, 279, 280, 5, 101, 0, 0, 280, 281, 5, 108, 0, 0, 281, 282, 5, 115, 0, 0,
311
- 282, 283, 5, 101, 0, 0, 283, 60, 1, 0, 0, 0, 284, 289, 5, 33, 0, 0, 285, 286, 5, 110,
312
- 0, 0, 286, 287, 5, 111, 0, 0, 287, 289, 5, 116, 0, 0, 288, 284, 1, 0, 0, 0, 288, 285,
313
- 1, 0, 0, 0, 289, 62, 1, 0, 0, 0, 290, 291, 5, 102, 0, 0, 291, 292, 5, 114, 0, 0, 292, 293,
314
- 5, 97, 0, 0, 293, 294, 5, 109, 0, 0, 294, 295, 5, 101, 0, 0, 295, 64, 1, 0, 0, 0, 296,
315
- 297, 5, 115, 0, 0, 297, 298, 5, 104, 0, 0, 298, 299, 5, 101, 0, 0, 299, 300, 5, 101,
316
- 0, 0, 300, 301, 5, 116, 0, 0, 301, 66, 1, 0, 0, 0, 302, 303, 5, 61, 0, 0, 303, 304, 5,
317
- 61, 0, 0, 304, 68, 1, 0, 0, 0, 305, 306, 5, 33, 0, 0, 306, 307, 5, 61, 0, 0, 307, 70, 1,
318
- 0, 0, 0, 308, 309, 5, 62, 0, 0, 309, 72, 1, 0, 0, 0, 310, 311, 5, 62, 0, 0, 311, 312, 5,
319
- 61, 0, 0, 312, 74, 1, 0, 0, 0, 313, 314, 5, 60, 0, 0, 314, 76, 1, 0, 0, 0, 315, 316, 5,
320
- 60, 0, 0, 316, 317, 5, 61, 0, 0, 317, 78, 1, 0, 0, 0, 318, 319, 5, 38, 0, 0, 319, 324,
241
+ 97, 122, 1, 0, 49, 57, 2, 0, 48, 57, 95, 95, 1, 0, 48, 57, 1, 0, 48, 48, 8, 0, 71, 71, 75,
242
+ 75, 77, 77, 102, 102, 107, 107, 109, 110, 112, 112, 117, 117, 3, 0, 48, 57, 65, 90,
243
+ 97, 122, 2, 0, 9, 9, 32, 32, 2, 0, 10, 10, 12, 13, 511, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0,
244
+ 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0,
245
+ 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0,
246
+ 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0,
247
+ 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0,
248
+ 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0,
249
+ 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0,
250
+ 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0,
251
+ 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0,
252
+ 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0,
253
+ 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0,
254
+ 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 115, 1,
255
+ 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0,
256
+ 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 1, 137, 1, 0,
257
+ 0, 0, 3, 139, 1, 0, 0, 0, 5, 141, 1, 0, 0, 0, 7, 143, 1, 0, 0, 0, 9, 146, 1, 0, 0, 0, 11, 148,
258
+ 1, 0, 0, 0, 13, 150, 1, 0, 0, 0, 15, 152, 1, 0, 0, 0, 17, 158, 1, 0, 0, 0, 19, 165, 1, 0,
259
+ 0, 0, 21, 172, 1, 0, 0, 0, 23, 182, 1, 0, 0, 0, 25, 190, 1, 0, 0, 0, 27, 197, 1, 0, 0, 0,
260
+ 29, 202, 1, 0, 0, 0, 31, 206, 1, 0, 0, 0, 33, 210, 1, 0, 0, 0, 35, 213, 1, 0, 0, 0, 37, 216,
261
+ 1, 0, 0, 0, 39, 222, 1, 0, 0, 0, 41, 227, 1, 0, 0, 0, 43, 236, 1, 0, 0, 0, 45, 243, 1, 0,
262
+ 0, 0, 47, 247, 1, 0, 0, 0, 49, 254, 1, 0, 0, 0, 51, 258, 1, 0, 0, 0, 53, 261, 1, 0, 0, 0,
263
+ 55, 267, 1, 0, 0, 0, 57, 276, 1, 0, 0, 0, 59, 279, 1, 0, 0, 0, 61, 288, 1, 0, 0, 0, 63, 290,
264
+ 1, 0, 0, 0, 65, 296, 1, 0, 0, 0, 67, 302, 1, 0, 0, 0, 69, 305, 1, 0, 0, 0, 71, 308, 1, 0,
265
+ 0, 0, 73, 310, 1, 0, 0, 0, 75, 313, 1, 0, 0, 0, 77, 315, 1, 0, 0, 0, 79, 323, 1, 0, 0, 0,
266
+ 81, 329, 1, 0, 0, 0, 83, 331, 1, 0, 0, 0, 85, 333, 1, 0, 0, 0, 87, 335, 1, 0, 0, 0, 89, 337,
267
+ 1, 0, 0, 0, 91, 339, 1, 0, 0, 0, 93, 341, 1, 0, 0, 0, 95, 344, 1, 0, 0, 0, 97, 347, 1, 0,
268
+ 0, 0, 99, 350, 1, 0, 0, 0, 101, 353, 1, 0, 0, 0, 103, 356, 1, 0, 0, 0, 105, 359, 1, 0, 0,
269
+ 0, 107, 366, 1, 0, 0, 0, 109, 377, 1, 0, 0, 0, 111, 379, 1, 0, 0, 0, 113, 394, 1, 0, 0,
270
+ 0, 115, 408, 1, 0, 0, 0, 117, 410, 1, 0, 0, 0, 119, 421, 1, 0, 0, 0, 121, 426, 1, 0, 0,
271
+ 0, 123, 436, 1, 0, 0, 0, 125, 449, 1, 0, 0, 0, 127, 454, 1, 0, 0, 0, 129, 465, 1, 0, 0,
272
+ 0, 131, 473, 1, 0, 0, 0, 133, 477, 1, 0, 0, 0, 135, 486, 1, 0, 0, 0, 137, 138, 5, 58, 0,
273
+ 0, 138, 2, 1, 0, 0, 0, 139, 140, 5, 44, 0, 0, 140, 4, 1, 0, 0, 0, 141, 142, 5, 61, 0, 0,
274
+ 142, 6, 1, 0, 0, 0, 143, 144, 5, 46, 0, 0, 144, 145, 5, 46, 0, 0, 145, 8, 1, 0, 0, 0, 146,
275
+ 147, 5, 46, 0, 0, 147, 10, 1, 0, 0, 0, 148, 149, 5, 91, 0, 0, 149, 12, 1, 0, 0, 0, 150,
276
+ 151, 5, 93, 0, 0, 151, 14, 1, 0, 0, 0, 152, 153, 5, 98, 0, 0, 153, 154, 5, 114, 0, 0, 154,
277
+ 155, 5, 101, 0, 0, 155, 156, 5, 97, 0, 0, 156, 157, 5, 107, 0, 0, 157, 16, 1, 0, 0, 0,
278
+ 158, 159, 5, 98, 0, 0, 159, 160, 5, 114, 0, 0, 160, 161, 5, 97, 0, 0, 161, 162, 5, 110,
279
+ 0, 0, 162, 163, 5, 99, 0, 0, 163, 164, 5, 104, 0, 0, 164, 18, 1, 0, 0, 0, 165, 166, 5,
280
+ 99, 0, 0, 166, 167, 5, 114, 0, 0, 167, 168, 5, 101, 0, 0, 168, 169, 5, 97, 0, 0, 169,
281
+ 170, 5, 116, 0, 0, 170, 171, 5, 101, 0, 0, 171, 20, 1, 0, 0, 0, 172, 173, 5, 99, 0, 0,
282
+ 173, 174, 5, 111, 0, 0, 174, 175, 5, 109, 0, 0, 175, 176, 5, 112, 0, 0, 176, 177, 5,
283
+ 111, 0, 0, 177, 178, 5, 110, 0, 0, 178, 179, 5, 101, 0, 0, 179, 180, 5, 110, 0, 0, 180,
284
+ 181, 5, 116, 0, 0, 181, 22, 1, 0, 0, 0, 182, 183, 5, 103, 0, 0, 183, 184, 5, 114, 0, 0,
285
+ 184, 185, 5, 97, 0, 0, 185, 186, 5, 112, 0, 0, 186, 187, 5, 104, 0, 0, 187, 188, 5, 105,
286
+ 0, 0, 188, 189, 5, 99, 0, 0, 189, 24, 1, 0, 0, 0, 190, 191, 5, 109, 0, 0, 191, 192, 5,
287
+ 111, 0, 0, 192, 193, 5, 100, 0, 0, 193, 194, 5, 117, 0, 0, 194, 195, 5, 108, 0, 0, 195,
288
+ 196, 5, 101, 0, 0, 196, 26, 1, 0, 0, 0, 197, 198, 5, 119, 0, 0, 198, 199, 5, 105, 0, 0,
289
+ 199, 200, 5, 114, 0, 0, 200, 201, 5, 101, 0, 0, 201, 28, 1, 0, 0, 0, 202, 203, 5, 112,
290
+ 0, 0, 203, 204, 5, 105, 0, 0, 204, 205, 5, 110, 0, 0, 205, 30, 1, 0, 0, 0, 206, 207, 5,
291
+ 97, 0, 0, 207, 208, 5, 100, 0, 0, 208, 209, 5, 100, 0, 0, 209, 32, 1, 0, 0, 0, 210, 211,
292
+ 5, 97, 0, 0, 211, 212, 5, 116, 0, 0, 212, 34, 1, 0, 0, 0, 213, 214, 5, 116, 0, 0, 214,
293
+ 215, 5, 111, 0, 0, 215, 36, 1, 0, 0, 0, 216, 217, 5, 112, 0, 0, 217, 218, 5, 111, 0, 0,
294
+ 218, 219, 5, 105, 0, 0, 219, 220, 5, 110, 0, 0, 220, 221, 5, 116, 0, 0, 221, 38, 1, 0,
295
+ 0, 0, 222, 223, 5, 106, 0, 0, 223, 224, 5, 111, 0, 0, 224, 225, 5, 105, 0, 0, 225, 226,
296
+ 5, 110, 0, 0, 226, 40, 1, 0, 0, 0, 227, 228, 5, 112, 0, 0, 228, 229, 5, 97, 0, 0, 229,
297
+ 230, 5, 114, 0, 0, 230, 231, 5, 97, 0, 0, 231, 232, 5, 108, 0, 0, 232, 233, 5, 108, 0,
298
+ 0, 233, 234, 5, 101, 0, 0, 234, 235, 5, 108, 0, 0, 235, 42, 1, 0, 0, 0, 236, 237, 5, 114,
299
+ 0, 0, 237, 238, 5, 101, 0, 0, 238, 239, 5, 116, 0, 0, 239, 240, 5, 117, 0, 0, 240, 241,
300
+ 5, 114, 0, 0, 241, 242, 5, 110, 0, 0, 242, 44, 1, 0, 0, 0, 243, 244, 5, 100, 0, 0, 244,
301
+ 245, 5, 101, 0, 0, 245, 246, 5, 102, 0, 0, 246, 46, 1, 0, 0, 0, 247, 248, 5, 105, 0, 0,
302
+ 248, 249, 5, 109, 0, 0, 249, 250, 5, 112, 0, 0, 250, 251, 5, 111, 0, 0, 251, 252, 5,
303
+ 114, 0, 0, 252, 253, 5, 116, 0, 0, 253, 48, 1, 0, 0, 0, 254, 255, 5, 102, 0, 0, 255, 256,
304
+ 5, 111, 0, 0, 256, 257, 5, 114, 0, 0, 257, 50, 1, 0, 0, 0, 258, 259, 5, 105, 0, 0, 259,
305
+ 260, 5, 110, 0, 0, 260, 52, 1, 0, 0, 0, 261, 262, 5, 119, 0, 0, 262, 263, 5, 104, 0, 0,
306
+ 263, 264, 5, 105, 0, 0, 264, 265, 5, 108, 0, 0, 265, 266, 5, 101, 0, 0, 266, 54, 1, 0,
307
+ 0, 0, 267, 268, 5, 99, 0, 0, 268, 269, 5, 111, 0, 0, 269, 270, 5, 110, 0, 0, 270, 271,
308
+ 5, 116, 0, 0, 271, 272, 5, 105, 0, 0, 272, 273, 5, 110, 0, 0, 273, 274, 5, 117, 0, 0,
309
+ 274, 275, 5, 101, 0, 0, 275, 56, 1, 0, 0, 0, 276, 277, 5, 105, 0, 0, 277, 278, 5, 102,
310
+ 0, 0, 278, 58, 1, 0, 0, 0, 279, 280, 5, 101, 0, 0, 280, 281, 5, 108, 0, 0, 281, 282, 5,
311
+ 115, 0, 0, 282, 283, 5, 101, 0, 0, 283, 60, 1, 0, 0, 0, 284, 289, 5, 33, 0, 0, 285, 286,
312
+ 5, 110, 0, 0, 286, 287, 5, 111, 0, 0, 287, 289, 5, 116, 0, 0, 288, 284, 1, 0, 0, 0, 288,
313
+ 285, 1, 0, 0, 0, 289, 62, 1, 0, 0, 0, 290, 291, 5, 102, 0, 0, 291, 292, 5, 114, 0, 0, 292,
314
+ 293, 5, 97, 0, 0, 293, 294, 5, 109, 0, 0, 294, 295, 5, 101, 0, 0, 295, 64, 1, 0, 0, 0,
315
+ 296, 297, 5, 115, 0, 0, 297, 298, 5, 104, 0, 0, 298, 299, 5, 101, 0, 0, 299, 300, 5,
316
+ 101, 0, 0, 300, 301, 5, 116, 0, 0, 301, 66, 1, 0, 0, 0, 302, 303, 5, 61, 0, 0, 303, 304,
317
+ 5, 61, 0, 0, 304, 68, 1, 0, 0, 0, 305, 306, 5, 33, 0, 0, 306, 307, 5, 61, 0, 0, 307, 70,
318
+ 1, 0, 0, 0, 308, 309, 5, 62, 0, 0, 309, 72, 1, 0, 0, 0, 310, 311, 5, 62, 0, 0, 311, 312,
319
+ 5, 61, 0, 0, 312, 74, 1, 0, 0, 0, 313, 314, 5, 60, 0, 0, 314, 76, 1, 0, 0, 0, 315, 316,
320
+ 5, 60, 0, 0, 316, 317, 5, 61, 0, 0, 317, 78, 1, 0, 0, 0, 318, 319, 5, 38, 0, 0, 319, 324,
321
321
  5, 38, 0, 0, 320, 321, 5, 97, 0, 0, 321, 322, 5, 110, 0, 0, 322, 324, 5, 100, 0, 0, 323,
322
322
  318, 1, 0, 0, 0, 323, 320, 1, 0, 0, 0, 324, 80, 1, 0, 0, 0, 325, 326, 5, 124, 0, 0, 326,
323
323
  330, 5, 124, 0, 0, 327, 328, 5, 111, 0, 0, 328, 330, 5, 114, 0, 0, 329, 325, 1, 0, 0,